und ich bekomme die Fehler:
Das bringt aber so nichts soviel.
Hast du die forwards gesetzt?
sonst musst du mir mal die ganzen Fehler geben, denn so sieht man da keinen Fehler
und ich bekomme die Fehler:
Das bringt aber so nichts soviel.
Hast du die forwards gesetzt?
sonst musst du mir mal die ganzen Fehler geben, denn so sieht man da keinen Fehler
Das bringt aber so nichts soviel.
Hast du die forwards gesetzt?
sonst musst du mir mal die ganzen Fehler geben, denn so sieht man da keinen Fehler
Ja, habe ich alle gesetzt..
Das sind ja die ganzen Fehler..
In beiden Includes sind z.B. "OnPlayerConnect", und dafür bekomme ich halt nen Fehler..
Dann könnte das an anderen Includes liegen.
Das kann man ohne Code schwer sagen.
Die reine Umdefintion von dir ist ja richtig, der Fehler muss/wird wo anders liegen.
//Edit: Ich hab nach knapp 1,5 Jahren, eine kleine Änderung vorgenommen und zwar am Aufrufen des Callbacks aus dem Hook heraus.
Diese Variante ist deutlich besser.
Schaut für nähere Informationen, bitte in den Startpost.
Guten Tag,
ich versuche grade in meinen Includes das Hooking zu verwenden.
Derzeit versuche ich in 3 Includes OnPlayerSpawn(playerid) zu hooken.
forward _OnPlayerSpawn(playerid);
public OnPlayerSpawn(playerid)
{
#if defined _OnPlayerSpawn
return _OnPlayerSpawn(playerid);
#else
return true;
#endif
}
#if defined _OnPlayerSpawn
forward _OnPlayerSpawn(playerid);
#endif
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn _OnPlayerSpawn
So habe ich das in jedem Include
Und ich erhalte folgende Fehle
C:\Users\Nils\Desktop\Scripts\02_SAMP\R38\pawno\include\.../.../TeamDM.inc(17) : error 021: symbol already defined: "_OnPlayerSpawn"
C:\Users\Nils\Desktop\Scripts\02_SAMP\R38\pawno\include\.../.../Heu.inc(17) : error 021: symbol already defined: "_OnPlayerSpawn"
C:\Users\Nils\Desktop\Scripts\02_SAMP\R38\gamemodes\Script.pwn(672) : error 021: symbol already defined: "_OnPlayerSpawn"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
3 Errors.
Woran liegt es das ich diese Fehler erhalte?
Muss ich die Public's oder die Define's anders nennen wenn ich es in mehreren Includes mache?
Muss ich die Public's oder die Define's anders nennen wenn ich es in mehreren Includes mache?
Klar. Includes sind ja direkter Teil von Gamemodes, da sie vor dem Kompilieren Teil des Gamemodes werden. Daher dürfen sich Bezeichnungen auf gleicher Ebene nicht überlappen.
Hey @Jack_Bauer:
also muss ich diesen Teil hier
forward _OnPlayerSpawn(playerid);
public OnPlayerSpawn(playerid)
{
#if defined _OnPlayerSpawn
return _OnPlayerSpawn(playerid);
#else
return true;
#endif
}
#if defined _OnPlayerSpawn
forward _OnPlayerSpawn(playerid);
#endif
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn _OnPlayerSpawn
Immer ändern oder nur einen bestimmten Teil davon?
@BlackAce:
Das was du immer ändern musst ist der Teil vor dem _ Der Callbacks.
Bspw. Login_OnPlayerSpawn
public OnPlayerSpawn(playerid)
{
#if defined Login_OnPlayerSpawn
return Login_OnPlayerSpawn(playerid);
#else
return true;
#endif
}
#if defined Login_OnPlayerSpawn
forward Login_OnPlayerSpawn(playerid);
#endif
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn Login_OnPlayerSpawn
Hey @BlackAce: Hoffe es ist okay wenn ich dir hier markiere
public OnPlayerSpawn(playerid)
{
#if defined Login_OnPlayerSpawn
return Login_OnPlayerSpawn(playerid);
#else
return true;
#endif
}
Bei dem Code, was passiert da? Also er ruft dann Login_OnplayerSpawn auf?
Aber er ist doch bereits in diesem Public? Was hat das für einen sinn?
der sinn ist, das du aufgrund der include 2 Onplayerspawn hast. im endeffektist das richtige onplayerspawn das deiner ersten include wenn dannach Login_OnPlayerspawn definiert wird so ist das onplayer spawn der 2. include das Login_Onplayerspawn in der 2. include wird dann inv_onplayerspawn definert, somit ist das onplayerspawn des gamemodes das inv_onplayerspawn.
dh. du greifst dir in der Include das Onplayerspawn vorweg nennst das darauf folgende OnPlayerSpawn um und rufst das umbennante onplayerspawn auf.
Wenn ich OnPlayerSpawn jetzt in 5 includes habe, muss ich es dann nach jedem aufrufen?
@BlackAce:
Dankeschön für die Hilfe, es klappt alles wunderbar und verstanden habe ich es auch.
Ein echt tolles Tutorial und echt hilfsbereit wenn man es nicht direkt versteht
Danke
Mit freundlichen Grüßen
PermanenT
Eine Frage: Wenn ich jetzt mehrere Includes habe die das gleiche Callback hooken, wird das originale Callback nicht mehrmals aufgerufen?
Nein, denn im Grunde führst du die Funktion bzw. das Callback aus und leitest dann einfach weiter auf eine weitere Funktion.
Für dich heißt sie zwar im GM zwar "OnPlayerSpawn" compiliert wäre es dann aber Login_OnPlayerSpawn, das kommt durch die defines die es im Hook zusätzlich gibt.
Die Includes werden ja im Grunde im GM zusammen geführt
aus
#include <a_samp>
main () { }
public OnGameModeInit()
{
return true;
}
wird
Das bedeutet das aus dem Hook das hier wird
public OnPlayerSpawn(playerid)
{
return Login_OnPlayerSpawn(playerid);
}
forward Login_OnPlayerSpawn(playerid);
public Login_OnPlayerSpawn(playerid)
{
return true;
}
Ich hoffe das war irgendwie verständlich
Hat meine Frage beantwortet. Danke
in 10-20 Includes hooken
Das geht...aber irgendwann geht es logischerweise enorm auf die Performanz
Das geht...aber irgendwann geht es logischerweise enorm auf die Performanz
Auch das kann man gut verwalten in dem man sich ein Controller schreibt und die hocking methode mit state nutzt
Auch das kann man gut verwalten in dem man sich ein Controller schreibt und die hocking methode mit state nutzt
Das ist egal.
Ich rede von der Ausführungszeit wenn es große Funktionen sind.
Dann wirst du es nie schaffen, ohne Zeitversetzung die Funktionen (bzw Callbacks) aufzurufen...und das Problem ist einfach je mehr du das machst desto später werden sie logischerweise aufgerufen...
Bei 30x...und jeder Callback muss 20ms verarbeitet werden hast du schon beim letzten mehr als 600ms delay...
Und wie könnte man Hooks am beste nutzen ? Für eher kleine Systeme oder doch größere ?
Ich persönliche nutze die Methode die @BlackAce: in seinem Open Pawn Projekt nutzt. Hatte vor alle Systeme in seperate Includes zu schreiben, aber wenn ich lese,dass es die Performance negativ beeinflusst, komme ich ins grübeln.