[New Player Callbacks] Version 1.4 - BigETI

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
  • Hier will ich euch einen neuen Include vorstellen, wo ihr nun mehr Möglichkeiten besitzt, in Callbacks reinzuschreiben.


    Was sind Callbacks?
    Callbacks sind Funktionen die aufgerufen werden, wenn eine Aktion stattgefunden hatte.


    Was sind es denn nun für Callbacks die das Include mit sich bringt?


    public OnPlayerEnteredVehicle(playerid, vehicleid, seatid)
    public OnPlayerExitedVehicle(playerid, vehicleid)
    public OnPlayerSkinChange(playerid, oldskin, newskin)
    public OnPlayerHoldWeaponChange(playerid, oldslot, oldweapon, newslot, newweapon)
    public OnPlayerWeaponStateChange(playerid, oldstate, newstate)
    public OnPlayerWeaponDataChange(playerid, slot, oldweapon, newweapon)
    public OnPlayerAmmoDataChange(playerid, slot, oldammo, newammo)
    public OnPlayerMoneyChange(playerid, oldmoney, newmoney)
    public OnPlayerHealthChange(playerid, Float:oldhealth, Float:newhealth)
    public OnPlayerArmourChange(playerid, Float:oldarmour, Float:newarmour)
    public OnPlayerAnimationIndexChange(playerid, oldindex, newindex)
    public OnPlayerSpecialActionChange(playerid, oldsaction, newsaction)
    public OnPlayerAnalogKeysChange(playerid, oldy, newy, oldx, newx)
    public OnPlayerVehicleHealthChange(playerid, vehicleid, Float:oldhealth, Float:newhealth, bool:isissuer)
    public OnPlayerVirtualWorldChange(playerid, oldworld, newworld)
    //Darunter befinden sich frei entscheidbare Callbacks
    public OnPVarDelete(playerid, varname[], oldtype)
    public OnPVarCreate(playerid, varname[], type)
    public OnPVarTypeChange(playerid, varname[], oldtype, newtype)
    public OnPVarIntChange(playerid, varname[], oldint_value, newint_value)
    public OnPVarStringChange(playerid, varname[], oldstring_value[], newstring_value[])
    public OnPVarFloatChange(playerid, varname[], Float:oldfloat_value, Float:newfloat_value)


    Benutzung:


    Füge einfach ncbs.inc in einen deiner Scripte (Zum Beispiel ein Filterscript). Benutze diesen Include nicht mehrmals. Benutze ncbs_forwads.inc in deinen anderen scripten, damit du ferngesteuerte Callbacks empfangen kannst.
    Damit du diesen Feature benutzen kannst, musst du USE_IN_ALL_SCRIPTS definiert lassen.
    ncbs_defines.inc gibt dir die Möglichkeit diesen Include zu konfigurieren.


    Beispiel wie man diese Includes benutzt:


    ncbs.inc füge ich in meinem Filterscript ein:
    #define FILTERSCRIPT
    #include <ncbs>
    public OnFilterScriptInit()
    {
    print("\n------------------------");
    print(" Example Filterscript...");
    print("------------------------\n");
    return 1;
    }


    ncbs_forwards.inc füge ich in meinem Gamemode ein:
    #include <ncbs_forwards>
    main()
    {
    print("\n--------------------");
    print(" Example Gamemode...");
    print("--------------------\n");
    return 1;
    }



    Beschreibungen:


    public OnPlayerEnteredVehicle(playerid, vehicleid, seatid)
    Wird aufgerufen, wenn ein Spieler in einen Fahrzeug eingestiegen ist.


    public OnPlayerExitedVehicle(playerid, vehicleid)
    Wird aufgerufen, wenn der Spieler seinen Wagen verlassen hat.


    public OnPlayerSkinChange(playerid, oldskin, newskin)
    Wird aufgerufen, wenn der Spieler sich den Skin geändert hat. (Mit SetPlayerSkin oder Mods).


    public OnPlayerHoldWeaponChange(playerid, oldslot, oldweapon, newslot, newweapon)
    Wird aufgerufen, wenn der Spieler die Waffe auf der Hand wechselt.


    public OnPlayerWeaponStateChange(playerid, oldstate, newstate)
    Wird aufgerufen, wenn der Spieler einen anderen Waffen Status abgibt (siehe http://wiki.sa-mp.com/wiki/Weapon_States).


    public OnPlayerWeaponDataChange(playerid, slot, oldweapon, newweapon)
    Wird aufgerufen, wenn der Spieler irgendwelche Waffen spawnt/verliert (Spawnen mit GivePlayerWeapon oder Cheats).


    public OnPlayerAmmoDataChange(playerid, slot, oldammo, newammo)
    Wird aufgerufen, wenn der Spieler Munition für das jeweilige Waffenslot spawnt/verliert (Spawnen mit GivePlayerWeapon oder Cheats).


    public OnPlayerMoneyChange(playerid, oldmoney, newmoney)
    Wird aufgerufen, wenn der Spieler seinen Geldbetrag verändert hat (Mit GivePlayerMoney oder Cheats)


    public OnPlayerHealthChange(playerid, Float:oldhealth, Float:newhealth)
    Wird aufgerufen, wenn der Spieler die Lebensanzeige sich verändert (Erhöhung durch Respawn, SetPlayerHealth oder Cheats).


    public OnPlayerArmourChange(playerid, Float:oldarmour, Float:newarmour)
    Wird aufgerufen, wenn der Spieler die Schutzweste sich verändert (Erhöhung durch SetPlayerArmour oder Cheats).


    public OnPlayerAnimationIndexChange(playerid, oldindex, newindex)
    Wird aufgerufen, wenn der Spieler die Animation ändert.


    public OnPlayerSpecialActionChange(playerid, oldsaction, newsaction)
    Wird aufgerufen, wenn der Spieler seinen Special Action verändert (mit SetPlayerSpecialAction oder Mods/Cheats).


    public OnPlayerAnalogKeysChange(playerid, oldy, newy, oldx, newx)
    Wird aufgerufen, wenn der Spieler die Hoch, Runter, Links und Rechts Taste gedrückt hat.


    public OnPlayerVehicleHealthChange(playerid, vehicleid, Float:oldhealth, Float:newhealth, bool:isissuer)
    Wird aufgerufen, wenn der HP des Spielers Fahrzeugs sich verändert hat.


    public OnPlayerVirtualWorldChange(playerid, oldworld, newworld)
    Wird aufgerufen, wenn der Spieler korrekt den Virtual World geändert hat (Da Virtual Worlds Serverbeständig sind, kann man mit Cheats nicht verändern)


    Freiwillige Callbacks:


    public OnPVarDelete(playerid, varname[], oldtype)
    Wird nur aufgerufen wenn ein PVar entfernt worden ist (siehe http://wiki.sa-mp.com/wiki/DeletePVar)


    public OnPVarCreate(playerid, varname[], type)
    Wird nur aufgerufen, wenn ein PVar erstellt worden ist.


    public OnPVarTypeChange(playerid, varname[], oldtype, newtype)
    Wird nur aufgerufen, wenn der PVarType sich verändert hat.


    public OnPVarIntChange(playerid, varname[], oldint_value, newint_value)
    Wird nur aufgerufen, wenn ein SetPVarInt seinen eigenen Wert verändert hat.


    public OnPVarStringChange(playerid, varname[], oldstring_value[], newstring_value[])
    Wird nur aufgerufen, wenn ein SetPVarString seinen eigenen Wert verändert hat.


    public OnPVarFloatChange(playerid, varname[], Float:oldfloat_value, Float:newfloat_value)
    Wird nur aufgerufen, wenn ein SetPVarFloat seinen eigenen Wert verändert hat.


    Wie kann ich nun die Callbacks im Script wählen?:
    Da das Script komplett in Englisch ist und somit International gelten sollte, werde ich einfach Übersetzen was im ncbs_defines.inc steht


    Bekannte Bugs:

    • OnPlayerWeaponDataChange und OnPlayerAmmoDataChange werden nur gerufen wenn eine andere Aktion stattgefunden hat (SA:MP schuld)
    • Sonst wurden keine weiteren Bugs gefunden..


    Credits:

    • ALS hooking wurde hinzugefügt (gemacht von Y_Less)
    • Danke an wups, das er mir vorgeschlagen hat, wie man Callbacks mit funcidx wiedergibt
    • Hat mir die Idee gegeben die OPU Verzögerung einzubauen (Idee von cessil)
    • Das SA:MP development Team
    • Ich selber..


    Updates:

    • Version 1.4: OnPlayerChangeMoney, OnPlayerEnteredVehicle, OnPlayerExitedVehicle, OnPlayerAnalogKeysChange und OnPlayerVehicleHealthChange wurden hinzugefügt.
      Die callbacks in anderen Scripte aufrufbar.
      new_callbacks.inc wurde umgeändert zu ncbs.inc
      ncbs_forwards.inc wurde hinzugefügt (Wird benutzt um ferngesteuerte Callbacks zu empfangen.)
      ncbs_defines.inc wurde hinzugefügt (Wird benutzt um die Definitionen zu verändern.)
      Einige wichtige/unwichtige Fehler wurden behoben..
    • Version 1.3: OPU delay Idee wurde hinzugefügt um einen epischen Server Crash zu vermeiden (Idee von cessil)
      Jede einzelner Callback ist nun wählbar!
      Geschwindigkeit wurde verbessert.
      Bug Fixes..
    • Version 1.2: Benutzung der ALS hooking Methode (von Y_Less) und benutzung von funcidx, um die Callbacks gescheidt wiederzugeben (Idee von wups)
      OnPVar Callbacks sind nun freiwillig aktivierbar (Unkommentiere die USE_PVAR_CALLBACKS Definition innerhalb der Include damit man die OnPVar Callbacks benutzen kann).
    • Version 1.1: OnPlayerSpecialActionChange Callback wurde hinzugefügt.
    • Version 1: Erster Release!



    Bitte meldet hier irgendwelche Bugs!


    MfG: BigETI

    16 Mal editiert, zuletzt von BigETI ()

  • Sieht nicht schlecht aus.
    Wäre vielleicht noch praktisch, wofür die Callbacks zu gebrauchen sind und wie man sie anwendet.
    Aber sonst 9/10

    Die besten Zitate aus dem sa-mp.de Forum

    Zitat

    -Wenn hier die sache nicht drine ist aber sie brachen es vlt kann ich es und dann mache ich es für sie!)

    Zitat

    Die Prüfungen(Fahrprüfungen), welche sehr realitätsnah entworfen sind, kann jeder Spieler allein absolvieren ohne auf andere angewiesen zu sein.

    Zitat

    Features: Ausgeprägte und leicht verständliche Serverregeln!

    Zitat

    aber wer dumme Antworten gibt bekommt eine Dumme zurück ... und chill mal dein Leben!

    Zitat

    Ich bin für Luca, wieso weiß ich nicht, aber der andere hat so hässlige Haare..

    Zitat

    Ich habe mir eig. immer nur die Castings angesehen, weil die da immer Runtergemacht wurden.

    Zitat

    Unknown processor
    übersetzt (by google translator)
    unbekannten Prozessor

    Zitat

    Verkaufe Minecraft Keys
    Nur für 20,-€ PaySafeCard.
    Unfassbar in mindestens 5 Minuten hast du dein Key!

  • Danke


    Sieht nicht schlecht aus.
    Wäre vielleicht noch praktisch, wofür die Callbacks zu gebrauchen sind und wie man sie anwendet.
    Aber sonst 9/10


    Sorry, dass ich die Beschreibungen vergessen habe.
    Ich werde Morgen alle Callbacks komplett beschreiben, und wie sie auch funktionieren.


    MfG

  • Edit:
    Ich habe nun die Beschreibungen eingefügt und zusätzlich einen Callback hinzugefügt, den ich beim letzten Release einfach mal so vergessen hatte.
    public OnPlayerSpecialActionChange(playerid, oldsaction, newsaction)

  • Danke :)


    Y_Less hat schon gemeckert, dass dieses Include inkompatibel mit den anderen Includes sind, die am meißten verwendet werden xD
    Ich soll anscheinend die ALS Methode verwenden lol :whistling:


    Edit:

    Einmal editiert, zuletzt von BigETI ()

  • Und du bist jetzt so stolz darüber das du deine Include schlecht/inkompatibel geschrieben hast dass du uns das jetzt präsentieren willst oder wie? :huh:


    Ich wollte damit eigentlich vermitteln, dass ich diesen Include leider mit der alt bekannten ALS Methode schreiben muss..
    Morgen werde ich den Script neu releasen, damit es mit den anderen Includes kompatibel ist, Punkt.

  • Es wurde ein kleines Update gemacht.
    Nun verfügt es über die Y_Less ALS hooking Methode und nun werden die Callbacks gescheidt wiedergegeben (mit benutzung von funcidx [Idee von wups])
    OnPVar Callbacks kann man nur noch freiwillig aktivieren/deaktivieren.


    Bitte meldet irgendwelche Bugs.
    Danke!


    MfG

  • Ohne das Script jetzt gesehen zu haben (geht auch nicht, "Pastebin.com is under heavy load right now ;("), vermute ich einfach mal, dass es sich hierbei größtenteils nur um #define Codes handeln wird, von daher ist das nicht sehr schwer.


    Aber dennoch können das manche Leute wohl gut brauchen, von daher wird das für eben diese schon recht nützlich sein.

  • Ohne das Script jetzt gesehen zu haben (geht auch nicht, "Pastebin.com is under heavy load right now ;("), vermute ich einfach mal, dass es sich hierbei größtenteils nur um #define Codes handeln wird, von daher ist das nicht sehr schwer.


    Aber dennoch können das manche Leute wohl gut brauchen, von daher wird das für eben diese schon recht nützlich sein.

    Naja logisch ist es nichts anderes ^^ Wer frägt die Werte dazwischen ab und gibt sie wieder sonst nichts anderes :D
    Im Prinzip ist das kein bisschen schwer, jedoch wie du sagst für Anfänger denke ich teilweise hilfreich...


    Denke viele wissen überhaupt gar nicht was das alles ist und die die es wissen könnten das selber realisieren

  • Naja logisch ist es nichts anderes ^^ Wer frägt die Werte dazwischen ab und gibt sie wieder sonst nichts anderes :D

    Eben. Extra eine "...Ex" Funktion, oder eine mit neuem Namen zu schreiben/verwenden ist an der Stelle schwachsinnig, da geht das mit defines schneller. Nur ein paar Sachen wie der Animationswechsel dürften mit OnPlayerUpdate oder einem Timer laufen, WENN man es zu ernst nimmt (jede einzelne Animation beim Laufen und so). Ist ansonsten auch nur ein #define.

  • Bitte ließt den Script genauer bevor ihr darüber diskutiert.
    Ich benutze größten Teil Defininitionen um alle einzelnen Callbacks wählbar zu machen. (Siehe Script Zeile 19-45) Sonst werden sie über forwards deklariert und Callbacks die schon existieren wie (OnGameModeInit, OnPlayerConnect, OnPlayerDisconnect und OnPlayerUpdate) sind mit der ALS Methode "verhakt". Restfunktionen (siehe selber) werden dagegen anders verhakt.


    Ich werde noch den ersten Post editieren und zeigen wie man alle einzelnen Callback sich wählbar machen kann.


    P.S.: Defines oder andere Funktionen die mit # anfangen sind Compiler Funktionen (benutzt in c, c++, c#, java, lua, pawno, etc..) und gehören nicht zur PAWNO Standard Sprache. Deshalb ist es nicht möglich sich Callbacks via nur mit Definitionen zu basteln.

  • Dass sich mal einer hinsetzt und ein Include macht mit mehr Callbacks!
    Finde ich gut ,da sind auch nützlige dabei!!!
    9,5/10 (sind paar drinne die ich persönlich mist finde)
    Aber ich glaube nicht ,dass ein Kind ,mit Gf dieses Include downloaded ,um damit zu scripten...
    Aber schöne Arbeit!

  • Include ist nun geupdated.
    Man kann nun die Callbacks in anderen Scripte auch benutzen.
    Ich habe auch einige neue Callbacks hinzugefügt.
    Lese bitte die Beschreibungen und Changelog im ersten Post.


    MfG