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
//WICHTIG: Definiere FILTERSCRIPT ganz oben auf deinem Script, um sicher zu gehen, dass du diesen Include für einen Filterscript gebrauchst, sonst nichts!
//Kommentiere Definitionen die du nicht brauchst sonst entkommentiere sie.
#define USE_IN_ALL_SCRIPTS //Wird benutzt um alle Callbacks im script fernzusteuern, anderseits werden die Callbacks nur in einem Script aufgerufen.
#define USE_OPU_DELAY //Benutzt eine Verzögerung im OnPlayerUpdate um den Server nicht total zu killen (Sehr gut für Anti Cheats, dafür werden die Callbacks langsamer!)
//#define USE_OPU_SECONDS //Callbacks verzögern >1 Sekunden anderseits sie verzögern >1 Millisekunden. (Entkommentiere USE_OPU_DELAY um es gebrauchbar zu machen!) [Optional]
#define USE_PLAYER_CALLBACKS //Macht den Gebrauch von Erweiterten Spieler Callbacks.
//#define USE_PVAR_CALLBACKS //Macht den Gebrauch von PVar Callbacks (Entkommentiere es, wenn du die PVar Callbacks benutzen willst.) [Optional]
#define CB_OnPlayerEnteredVehicle //Macht den Gebrach von OnPlayerEnteredVehicle (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerExitedVehicle //Macht den Gebrach von OnPlayerExitedVehicle (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerSkinChange //Macht den Gebrach von OnPlayerSkinChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerHoldWeaponChange //Macht den Gebrach von OnPlayerHoldWeaponChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerWeaponStateChange //Macht den Gebrach von OnPlayerWeaponStateChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define USE_WEAPON_DATA_CALLBACKS //Macht den Gebrach von Waffen Daten Callbacks.
#define CB_OnPlayerWeaponDataChange //Macht den Gebrach von OnPlayerWeaponDataChange (Entkommentiere USE_PLAYER_CALLBACKS und USE_WEAPON_DATA_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerAmmoDataChange //Macht den Gebrach von OnPlayerAmmoDataChange (Entkommentiere USE_PLAYER_CALLBACKS und USE_WEAPON_DATA_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerMoneyChange //Macht den Gebrach von OnPlayerMoneyChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerHealthChange //Macht den Gebrach von OnPlayerHealthChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerArmourChange //Macht den Gebrach von OnPlayerArmourChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerAnimationIndexChange //Macht den Gebrach von OnPlayerAnimationIndexChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerSpecialActionChange //Macht den Gebrach von OnPlayerSpecialActionChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerAnalogKeysChange //Macht den Gebrach von OnPlayerAnalogKeysChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerVehicleHealthChange //Macht den Gebrach von OnPlayerVehicleHealthChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPlayerVirtualWorldChange //Macht den Gebrach von OnPlayerVirtualWorldChange (Entkommentiere USE_PLAYER_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPVarDelete //Macht den Gebrach von OnPVarDelete (Entkommentiere USE_PVAR_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPVarCreate //Macht den Gebrach von OnPVarCreate (Entkommentiere USE_PVAR_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPVarTypeChange //Macht den Gebrach von OnPVarTypeChange (Entkommentiere USE_PVAR_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPVarIntChange //Macht den Gebrach von OnPVarIntChange (Entkommentiere USE_PVAR_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPVarStringChange //Macht den Gebrach von OnPVarStringChange (Entkommentiere USE_PVAR_CALLBACKS um es benutzbar zu machen!)
#define CB_OnPVarFloatChange //Macht den Gebrach von OnPVarFloatChange (Entkommentiere USE_PVAR_CALLBACKS um es benutzbar zu machen!)
//Setzbare Definitionen
#define ADD_OPU_DELAY 0 //Du kannst die Verzögerung von OnPlayerUpdate verringer/vergrößern wenn du diese Definition veränderst (0 ist Standart [bedeuted >1 s oder ms Verzögerung]) (Wenn USE_OPU_SECONDS definiert ist, dann ist es in Sekunden anderseits in Millisekunden)
Alles anzeigen
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!
Wo kann ich mir das runterladen?
Download Paket in Solidfiles
oder
Pastebin Download (ncbs.inc)
Pastebin Download (ncbs_forwards.inc)
Pastebin Download (ncbs_defines.inc)
Bitte meldet hier irgendwelche Bugs!
MfG: BigETI