[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ja, und? Ist doch auch richtig so.


    Zum eigentlichen Problem: Das liegt daran, dass bei jedem OnPlayerUpdate die Geschwindigkeit wieder runtergesetzt wird, da der Spieler ja eigentlich nicht so schnell laufen kann. Wenn du es GENAU so machst wie ich es dir gegeben habe, auch mit der GetPlayerSpeed Funktion, dann geht es, mit kleinen Rucklern, aber er ist merklich schneller.

  • Ja, und? Ist doch auch richtig so.


    Zum eigentlichen Problem: Das liegt daran, dass bei jedem OnPlayerUpdate die Geschwindigkeit wieder runtergesetzt wird, da der Spieler ja eigentlich nicht so schnell laufen kann. Wenn du es GENAU so machst wie ich es dir gegeben habe, auch mit der GetPlayerSpeed Funktion, dann geht es, mit kleinen Rucklern, aber er ist merklich schneller.


    Hmm.. Aber wenn ich es genau so mache, wie du es mir gegeben hast, dann wird "Speed" mit dem Wert 0 ausgegeben.
    Die Funktion "GetPlayerSpeed" hat nur einen Parameter, nämlich den, für die Player-ID.

  • Hmm.. Aber wenn ich es genau so mache, wie du es mir gegeben hast, dann wird "Speed" mit dem Wert 0 ausgegeben.
    Die Funktion "GetPlayerSpeed" hat nur einen Parameter, nämlich den, für die Player-ID.


    Wie ich schon sagte, mit der GetPlayerSpeed Funktion die ich dir gegeben habe, benenn die von mit aus um, zu GetPlayerSpeed2, wenn du schon eine GetPlayerSpeed Funktion hast. Dann wirst du sehen, dass es geht. Ich weiß ja nicht was für Werte deine GetPlayerSpeed-Funktion zurück gibt.


  • Wie ich schon sagte, mit der GetPlayerSpeed Funktion die ich dir gegeben habe, benenn die von mit aus um, zu GetPlayerSpeed2, wenn du schon eine GetPlayerSpeed Funktion hast. Dann wirst du sehen, dass es geht. Ich weiß ja nicht was für Werte deine GetPlayerSpeed-Funktion zurück gibt.


    Ähm...

    Aber wenn ich es genau so mache, wie du es mir gegeben hast


    Ich benutze den GANZEN Code von dir ..
    Es klappt nicht, wenn ichs so mache, "Speed" wird immer der Wert 0.0000 ( ist ja Float ) zugeteilt.

  • public OnPlayerSpawn(playerid)
    {
    SetCameraBehindPlayer(playerid);
    StopAudioStreamForPlayer(playerid);
    new Random = random(sizeof(RandomSpawns));
    SetPlayerPos(playerid, RandomSpawns[Random][0], RandomSpawns[Random][1], RandomSpawns[Random][2]);
    SetPlayerFacingAngle(playerid, RandomSpawns[Random][3]);


    if(IsPlayerNPC(playerid))
    {
    new npcname[64];
    GetPlayerName(playerid,npcname,64);
    if(!strcmp(npcname,"CrazyMoron",true))
    {
    //SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
    SetSpawnInfo(playerid, 0, 60, 2492.5146, -1703.2296, 1015.5703, 328.5485, 0, 0, 0, 0, 0, 0);
    new Text3D:NameEintragen = Create3DTextLabel("CrazyMoron",0xFFFFFFFF,10.0,40.0,50.0,40.0,0);
    Attach3DTextLabelToPlayer(NameEintragen, playerid, 0.0, 0.0, 0.2);
    SetPlayerColor(playerid,0xFFFFFFFF);


    }
    }
    return 1;


    //==============================================================================
    // Registering
    //==============================================================================


    if(AccInfo[playerid][Registered] == 0 && ServerInfo[MustRegister] == 1) // (1030) : warning 225: unreachable code
    {
    #if USE_DIALOGS == true
    new rstring[256];
    format(rstring,256,"Welcome to %s\n\nThe Account '%s' is not registred yet.\n\n\nEnter a password to register your account:",GetServerHostName(),pName(playerid));
    ShowPlayerDialog(playerid,DIALOGID+66,DIALOG_STYLE_INPUT,"Register Account",rstring,"Register","Quit");
    #endif
    return 1;
    }


    Wieso bekomme ich den unreachable code warning? Muss ich das return 1; löschen in Zeile 23?

  • Wie ich das sehe hast du die Abfrage unter dem return 1;
    Oder gehört das nicht mehr zum OnPlayerConnect-Callback?
    Meinte natürlich OnPlayerSpawn-Callback ;)

    Einmal editiert, zuletzt von AirM4X ()

  • Ich verstehe nicht warum man das return 1; weglassen soll. Manchmal bleibt es und manchmal kann man es weglassen


    Ein "return" beendet das Callback bzw. die Funktion genau an der Stelle und zwar immer dann, wenn es aufgerufen wird.


    Als hier in Kurzform dein OnPlayerSpawn:


    public ...
    Code...
    Code...
    return 1;
    Code... //wird NIEMALS erreicht.
    return 1;


    Nach dem ersten return ist schon Ende, das heißt der Code darunter wird NIE aufgerufen, daher die Warnung "unreachable Code" (unerreichbarer Code).



    Anders hier:
    public ...
    Code...
    if(irgendwas) return 1;
    Code... //Wir erreicht, wenn "irgendwas" nicht eintrifft.
    return 1;


    Hier bekommst du keine Warnung, da der Code unter dem IF nur dann nicht aufgerufen wird, wenn "irgendwas" eintrifft, wenn nicht, führt er den Code unter dem IF aus.



    => Du hast als einen Code wie im ersten Beispiel, der unter keinen Umständen aufgerufen wird, daher macht das für den Compiler keinen Sinn.



    Entferne das return 1, das da mittendrin steht, oder setze es in eine IF-Verschachtelung in der du es wirklich haben willst.

  • Aber wenn ich das return weglasse bekomme ich die warnung SERVER: Unknown command? :S


    Bei OnPlayerCommandText, ja. Weil dort ist "return 1" = keine Nachricht und "return 0" = Unknown Command. Das siehst du, weil da steht gaaaanz am Ende von OnPlayerCommandText ein return 0. Bei Befehlen arbeitest du aber ja mit der Struktur aus dem zweiten Beispiel (IF). Wird ein Befehl ausgeführt (irgendwas = wahr), dann kannst du return 1 machen, da dich der Rest dann nicht mehr interessiert.
    Es kommt immer auf die Situation an, wann du was benutzen musst.

  • Dann poste bitte den Code wie du ihn hast, wenn du den Code vor mir benutzt.


    if(!IsPlayerInAnyVehicle(playerid) && Sprinted[playerid])
    {
    new Float:speed; GetPlayerSpeed(playerid,speed);
    if(speed >= 38.0 && speed <= 40.0){ // Das ist ja klar, dass ich das bearbeitet habe..
    SetPlayerSpeed(playerid, 70.0, speed); // too
    }
    }


    //OnPlayerKey
    if(newkeys & KEY_SPRINT)Sprinted[playerid] = true;
    else Sprinted[playerid] = false;


    stock SetPlayerSpeed(playerid, Float:_speed, Float:_isspeed){
    if(playerid == INVALID_PLAYER_ID)return INVALID_PLAYER_ID;
    else if(IsPlayerNPC(playerid))return 1;
    else if(IsPlayerInAnyVehicle(playerid))return 1;
    else if(!Sprinted[playerid])return 1;
    new Float:x1, Float:y1, Float:z1, Float:a,Float:speed;
    GetPlayerVelocity(playerid, x1, y1, z1);
    GetPlayerFacingAngle(playerid, a);
    return SetPlayerVelocity(playerid, x1*(1+(1/(1+(_speed/_isspeed)))), y1*(1+(1/(1+(_speed/_isspeed)))), z1);
    }

  • if(speed >= 38.0 && speed <= 40.0){ // Das ist ja klar, dass ich das bearbeitet habe..
    Nein, weil bei dem GetPlayerSpeed von mir wird er NIE 38 km/h rennen, sondern maximal was um die 25. ;)


    if(speed >= 20.0 && speed <= 40.0){


    Deshalb sagte ich, probier es zuerst genau so wie ich es gemacht habe.

  • Okay, aber wie gesagt, das Problem liegt daran, dass die Variable "Speed" einen Wert von 0 hat.


    Hier mal Log:
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:32] Speed: 0.000000
    [16:13:33] Speed: 0.000000
    [16:13:33] Speed: 0.000000
    [16:13:33] Speed: 0.000000
    [16:13:33] Speed: 0.000000
    //usw ;)


    Code:
    if(!IsPlayerInAnyVehicle(playerid) && Sprinted[playerid])
    {
    new Float:speed; GetPlayerSpeed(playerid,speed);
    printf("Speed: %f",GetPlayerSpeed(playerid,speed)); // auch -> "printf("Speed: %f",speed);" ausprobiert!
    if(speed >= 20.0 && speed <= 40.0){
    printf("Speed wird gesetzt");
    SetPlayerSpeed(playerid, 40.0, speed);
    }
    }

  • stock GetPlayerSpeed_New(playerid, &Float:speed) // By: [XST]O_x
    {
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid)!=PLAYER_STATE_PASSENGER)
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
    speed = ST[3];
    return 1;
    }
    Warum sagst du nicht, dass ich die Funktion dir noch nie gegeben habe. :D
    Ich dachte die hätte ich dir schonmal gegeben, scheint wohl nicht so.


    new Float:speed; GetPlayerSpeed_New(playerid,speed);
    printf("Speed: %f",speed);


    Ich hab sie gleich umbenannt, damit du nicht durcheinander kommst.


  • Dachte du meintest die Funktion, die auch in dem Thread war ..
    Jedenfalls klappts nun, danke dir ! ;)