Eigenes Callback - was muss ich beachten?

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
  • Hallo,


    ich habe mir gedacht ich schreibe mein eigenes kleines Callback, das nach dem Vorbild von OnPlayerInteriorChange funktionieren soll, nur mit virtuellen Welten, ergo: Wenn ein Spieler die virtuelle Welt wechselt, soll das Callback aufgerufen werden.


    forward OnPlayerWorldChange(playerid, newworld, oldworld);
    public OnPlayerWorldChange(playerid, newworld, oldworld)
    {
    return 1;
    }


    Wie genau stelle ich das jetzt am besten an, dass die Funktion nur zu einem solchen Zeitpunkt aufgerufen wird?

  • Am besten machst du das so:


    #include <a_samp>


    forward OnPlayerWorldChange(playerid, newworld, oldworld);


    stock __SetPlayerVirtualWorld(playerid, worldid){
    if(funcidx("OnPlayerVirtualWorldChange") != -1){
    CallLocalFunction("OnPlayerVirtualWorldChange", "iii", playerid, worldid, GetPlayerVirtualWorld(playerid));
    }
    return SetPlayerVirtualWorld(playerid, worldid);
    }


    #if defined _ALS_SetPlayerVirtualWorld
    #undef SetPlayerVirtualWorld
    #else
    #define _ALS_SetPlayerVirtualWorld(playerid);
    #endif


    #define SetPlayerVirtualWorld __SetPlayerVirtualWorld

  • #include <a_samp>


    forward OnPlayerWorldChange(playerid, newworld, oldworld);


    stock SetPlayerVirtualWorldEx(playerid, worldid)
    {
    if(funcidx("OnPlayerWorldChange") != -1)
    {
    CallLocalFunction("OnPlayerWorldChange", "iii", playerid, worldid, GetPlayerVirtualWorld(playerid));
    }
    return SetPlayerVirtualWorld(playerid, worldid);
    }


    #if defined _ALS_SetPlayerVirtualWorld
    #undef SetPlayerVirtualWorld
    #else
    #define _ALS_SetPlayerVirtualWorld(playerid);
    #endif


    #define SetPlayerVirtualWorld SetPlayerVirtualWorldEx


    Okay, soweit müsste das dann stimmen. Aber wozu die if Abfrage nach "funcidx"?