Guck dir SetPlayerAttachedObject und RemovePlayerAttachedObject nocheinmal genau an.
Dann findest du deinen Fehler sofort ![]()
Beiträge von Akino Kiritani
-
-
Ja ok,
ich hab das aus dem Tutorial über das Plugin Coding genommen,
welches im englischem Forum zu finden ist,
da ist das vorhanden -
Verwendest du die Invoke-Source von dem Streamer Plugin?
Ja tue ich, bisher ist er auch unverändert.
Darum wundert mich das auch sehr stark^^ -
Die Variabeln Namen dürfen auch nicht gleich heißen^^
-
Du kannst in einem enum nicht 2 Arrays reinsetzen
musst du dann schon so machen
FrakRank1[50]
FrakRank2[50]
oder machst das andersnew FrakRank[MAX_FRAK][MAX_RANKE][50];
so würde das gehen -
SpielerInfo[playerid][sEingeloggt] = 1;
einfach zuweisen halt^^
-
Ich nutze die SDK gar nicht, da die veraltert ist und die Funktionen die ich brauche nicht unterstützt

Du meinst hoff ich mal die GDK, aber da hab ich alles hinzugefügt.//Edit ich hab das mit der SDK nun soweit das der Server nicht mehr crashed, so wie es vorher mal der Fall war

Aber nun ruft er die Natives nicht auf
Hier einmal der CodeDer Code #include "SDK\amx\amx.h"
#include "SDK\plugincommon.h"Der Code #include "Invoke.h"Der Code #include <string>
#include <vector>Der Code #include <cstdlib>
#include <ctime>Der Code typedef void (*logprintf_t)(char* format, ...);Der Code logprintf_t logprintf;
extern void *pAMXFunctions;Der Code using namespace std;Der Code //PAWN native: native CreateDialog(playerid);
cell AMX_NATIVE_CALL CreateDialog(AMX* amx, cell* params)
{
logprintf("Call it. Bitch!");
float x=1.0,y=1.0;
const string str = "Text Text";
int ID = g_Invoke->callNative(&PAWN::TextDrawCreate, amx_ftoc(x), amx_ftoc(y), str);
int ret = g_Invoke->callNative(&PAWN::SendClientMessage, params[1], 0xFFFFFFFF, "Wanna Try?");
logprintf("ID I got is %d",ID);
logprintf("SendClientMessage returnt %d",ret);
g_Invoke->callNative(&PAWN::TextDrawShowForPlayer, params[1], ID);
return 1;
}Der Code //PAWN native: native Invoke_GetAddresses();
cell AMX_NATIVE_CALL Invoke_GetAddresses(AMX* amx, cell* params)
{
return g_Invoke->getAddresses();
}Der Code PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}Der Code PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
g_Invoke = new Invoke;Der Code pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
logprintf = (logprintf_t) ppData[PLUGIN_DATA_LOGPRINTF];Der Code logprintf(" * New Dialogtypes *");
logprintf(" * by BlackAce *");
logprintf(" * loaded. *");
return true;
}Der Code PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
logprintf(" * New Dialogtypes *");
logprintf(" * by BlackAce *");
logprintf(" * unloaded. *");
}Der Code AMX_NATIVE_INFO PluginNatives[] =
{
{"CreateDialog", CreateDialog},
{"Invoke_GetAddresses", Invoke_GetAddresses},
{0, 0}
};Der Code PLUGIN_EXPORT int PLUGIN_CALL AmxLoad( AMX *amx )
{
g_Invoke->amx_list.push_back(amx);
return amx_Register(amx, PluginNatives, -1);
}Der Code PLUGIN_EXPORT int PLUGIN_CALL AmxUnload( AMX *amx )
{
for(list<AMX *>::iterator i = g_Invoke->amx_list.begin(); i != g_Invoke->amx_list.end(); ++i)
{
if(*i == amx)
{
g_Invoke->amx_list.erase(i);
break;
}
}
return AMX_ERR_NONE;
} -
Dann ist mir folgendes in der Konsole aufgefallen:
Wenn du das in der Konsole bekommst solltest du schleunigst mal einen wert in dein sscanf packen-> if(sscanf(params,"us[hier die länge des strings]",pID,Grund))
sonst arbeitet sscanf nicht wie es soll und macht was es will -
SCM(Rot,"Du bist nicht in der Nähe des Parkhauses von Los Santos!");
playerid vergessen?
-
stock SendMeChat(string[],playerid)
{
for(new i = 0;i < MAX_PLAYERS; i++)
{
if(GetDistanceBetweenPlayers(i,playerid) <= 25)
{
SendPlayerMessageToPlayer(i,playerid,string);
}
}
return 1;
}
und schon ist es fertig,
so schwer ist das nicht^^ -
SendPlayerMessageToPlayer(empfänger, sender, "Hallo Empfänger");
in einer schleife sieht das dann so aus
SendPlayerMessageToPlayer(i, playerid,"Hallo du");
-
pack den Timer doch einfach in OnPlayerConnect,
denk aber dran den Timer wieder in OnPlayerDisconnect zu killnen -
Es gibt 2 Möglichkeiten
die erste
Nutze SendPlayerMessageToPlayer - welches genau den effekt hat den du willstdie 2.
Sende den Text als spielerfarbe und färbe den rest einfach weißBeispiel
format(string, sizeof(string),"%s says: {FFFFFF}%s",sendername,text);
SendClientMessage(i,GetPlayerColor(playerid),string);
Du musst nur darauf achten, das du auch SetPlayerColor verwendet hast,
sonst geht das schief
-
Wenn du das mit dem Stremer machen willst nutze doch bitte
SetDynamicObjectMaterial -
kannste evntl mal nen Filterscript schreiben von der Checkbox ?
Oder den Code in schnipsel mal zeigen damit das hier einige machen können wär echt super
Ich werde das ganze Teil als Plugin hergeben,
eventuell verkaufen oder sogar ganz releasen, das weiß ich aber noch nicht -
Die anderen gefallen mir leider nicht so , da tendiere ich doch lieber zu den standart-Dialogen

Sie sollen ja auch nicht wirklich anders sein als die Standart Dialoge,
nur sie bekommen ein paar features die in den Dialogen fehlen
-
Theoretisch müsste es sogar möglich sein weil es gab/gibt soviel ich weiß ein Slot bug
Das war, als die Slots vom Server aus nicht wiederfrei gegeben wurden, das passierte aber erst bei ca 100 Spielern,
das wurde aber glücklicherweise gefixxt -
Entweder du meinst das
if(SpielerInfo[playerid][sEingeloggt]==1)
oder das
if(dini_Int(Spieler,"Eingeloggt")==1)
-
ok muss ich bei strcmp ein ! davor setzten damit überprüft wird ob sie gleich sind oder kein !.
das hat dort eingentlich die gleiche Wirkung wie als wenn du abfragst ob etwas 0 ist.Zitatund muss ich ein , true noch dahinter setzten oder reichen die 2 strings?
true müsste nur dann dahinter, wenn die Groß und Kleinschreibung egal wäre,
aber ich denke das ist beim Spielernamen nicht sowichtig -
RemoveBuildingForPlayer hat ein Limit von 1000.
Ich bin mir aber nicht sicher was passiert wenn man das Limit überschreitet,
das kann natürlich wie dir es dir widerfahren ist, das Spiel freezen