OnPlayerStateChange doppelt

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
  • Bei mir wird OnPlayerStateChange immer doppelt ausgeführt, wenn ich z.B. in ein Fahrzeug einsteige.
    Folgender Log sollte helfen:
    OnPlayerStateChange(id, newstate, oldstate)
    States

    Code
    [21:50:08] OnPlayerStateChange(0, 8, 0)//Spawnen
    [21:50:10] OnPlayerStateChange(0, 1, 8)//Spawnen
    [21:50:23] OnPlayerStateChange(0, 2, 1)//einsteigen
    [21:50:23] OnPlayerStateChange(0, 2, 0)//einsteigen


    Das Lustige ist also, dass es nochmal ausgeführt wird, da der Spieler wohl kurz "offline" war.
    Das Problem hatte ich bisher noch nie, erst seit einigen Updates. (Geringfügig)


    Code
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    format(string, sizeof(string),"OnPlayerStateChange(%d, %d, %d)", playerid, newstate, oldstate);
    SendClientMessage(playerid, COLOR_RED, string);
    return 1;
    }


    Ein weiteres Problem ist auch, dass Checkpoints in Fahrzeugen und nach dem Aussteigen nicht mehr funktonieren.
    D.h., dass OnPlayerEnterCheckpoint(playerid) nicht mehr ausgeführt wird.


    Hat jemand damit schon Erfahrung und kennt die Behebung?


    MfG
    Atrox

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • Wo ist jetzt das Problem ?
    0 ist offensichtlich der State für's Idle'n,
    und steht da eigentlich auch zurecht.


    Du spawnst - bist also ...
    1. nichts, dann am spawnen,
    2. am spawnen,dann am stehen


    Beschreibe doch einmal, warum derartige Aufrufe dein Skript stören,
    dann ist es auch einfacher, eine Lösung zu finden.

  • Spawnen ist nicht mein Problem.
    Das Einsteigen ist es.
    Ich steige in ein Fahrzeug ein und werde von "on foot" auf "driver" und dann nochmal von "offline" auf "driver" gesetzt.
    Problem ist eben, dass das Script dann in der Callback doppelt ausgeführt wird. (Das ließe sich natürlich mit && oldkeys != 0 beheben, ist aber keine Lösung dafür, dass die Checkpoint-Callback nicht ausgeführt wird.)

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • Zitat

    (Das ließe sich natürlich mit && oldkeys != 0 beheben, ist aber keine Lösung dafür, dass die Checkpoint-Callback nicht ausgeführt wird.)


    Wieso nicht?


    Das ist die einfachste und beste Möglichkeit, die doppelten Aufrufe zu umgehen.

  • Es funktonierte schon davor ohne ausschließen, also muss der Fehler wo anders liegen. Und das mit den Checkpoints ist auch so eine Sache...
    Ich bin "on foot", erstelle ein CP, gehe rein, funktoniert.
    Steige in ein Fahrzeug ein, fahre rein, nichts passiert.
    Steige aus, gehe rein, nichts passiert.
    Mit "passieren" meine ich die Debug nachricht, gleich nach Callbackbeginn.

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • Denk dran - fahren kann man nur in Racing-Checkpoints ;)


    Wenn es am Skript liegt, kannst du uns natürlich wichtige Teile des Skriptes zeigen,
    und wir versuchen da was zu finden, oder aber du blockierst einfach die 0 -
    da letzteres deutlich schneller und einfacher ist, natürlich besser.


    Den Debugging-CMD für den Checkpoint dann bitte

  • Bug gefunden.

    Code
    if(oldstate == PLAYER_STATE_ONFOOT)
    	{
    		RemovePlayerAttachedObject(playerid, 1);
    		RemovePlayerAttachedObject(playerid, 2);
    		RemovePlayerAttachedObject(playerid, 3);
    		RemovePlayerAttachedObject(playerid, 4);
    		RemovePlayerAttachedObject(playerid, 5);
    	}


    Das war dafür verantwortlich. Sollte eigt von 0-4 sein, nicht von 1-5.
    SAMP eben :/

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."