Habe pawn.exe erneuert Problem besteht weiterhin, was ich sehr lustig finde jetzt kann ich dialoge bis 189 definieren
Hast du es mal in einem leeren Gamemode versucht?
Eventuell ist irgendwas an deinem Gamemode fehlerhaft.
Habe pawn.exe erneuert Problem besteht weiterhin, was ich sehr lustig finde jetzt kann ich dialoge bis 189 definieren
Hast du es mal in einem leeren Gamemode versucht?
Eventuell ist irgendwas an deinem Gamemode fehlerhaft.
Beide Blöcke müssen damit ersetzt werden.
Genau.
(Zeile 6-9 und 18-21)
Nimm das ganze if/else-if/else von den formats weg, es reicht wenn du es so schreibst:
format(String,sizeof(String),"%02d:%02d",Hour,Minute);
Dann steht die führende Null automatisch dabei, wenn die Werte unter 10 sind.
Ändere mal
printf("playerid: %i hat das Level: %i",playerid,sInfo[playerid]);
zu:
printf("playerid: %i hat das Level: %i",playerid,sInfo[playerid][Level]);
Das ändert aber nichts am Problem.
Wobei der Code korrekt aussieht.
Gibt dir der MySQL Log etwas aus?
Es ist nur möglich diese Keys abzufragen:
https://wiki.sa-mp.com/wiki/Keys
Je nach Tastaturbelegung (Einstellungen von GTA) können das natürlich beliebige Tasten sein.
Hast du den Code beim Login auch eingefügt, nachdem pWanted aus der Datenbank/Datei geladen wurde:
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
if(PlayerInfo[i][pMember] == 1)
{
format(str, sizeof(str), "Wanted: %d", PlayerInfo[playerid][pWanted]);
UpdatePlayer3DTextLabelText(i, wantedLabel[i][playerid], COLOR_BUSBLUE, str);
}
}
Eventuell war das nicht ganz klar.
Das muss überall hin, wo sich der Wert von pWanted ändert. playerid ist dabei die ID, für die sich der Wert ändert.
//Edit:
Ah, die Wanteds passen nicht.
Ok.
Dann füge bei OnPlayerConnect das mal hinzu:
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
if(PlayerInfo[i][pMember] == 1)
{
DeletePlayer3DTextLabel(i, wantedLabel[i][playerid]);
format(str, sizeof(str), "Wanted: %d", PlayerInfo[playerid][pWanted]);
wantedLabel[i][playerid] = CreatePlayer3DTextLabel(i, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, playerid);
}
}
Klappt es dann?
Das attachen wird hier geregelt:
wantedLabel[playerid][i] = CreatePlayer3DTextLabel(playerid, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, i);
Das "i" am Ende heißt, dass es an den Spieler mit der ID "i" attached wird.
Sprich, alle pMember = 1 sehen für alle Spieler das Label (sofern SA-MP das auch für nicht-online Spieler versteht, teste das bitte so).
So, wie ich das verstanden habe, sollen es nur Mitglieder einer Fraktion sehen können.
Dem ersten Post war das nicht zu entnehmen.
Da es im Thread-Verlauf aber wohl dazu kommt:
Dann würde der Code so aussehen:
new PlayerText3D:wantedLabel[MAX_PLAYERS][MAX_PLAYERS];
Nach dem Login (und, falls der Spieler seinen pMember im laufen Betrieb ändern kann, zusätzlich dort wo das geändert wird):
if(PlayerInfo[playerid][pMember] == 1)
{
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
format(str, sizeof(str), "Wanted: %d", PlayerInfo[i][pWanted]);
wantedLabel[playerid][i] = CreatePlayer3DTextLabel(playerid, str, COLOR_BUSBLUE, 0.0, 0.0, 0.4, 10, i);
}
}
In OnPlayerDisconnect (und, falls der Spieler seinen pMember im laufen Betrieb ändern kann, zusätzlich dort wo das geändert wird und zwar bevor pMember gesetzt wird):
if(PlayerInfo[playerid][pMember] == 1)
{
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
DeletePlayer3DTextLabel(playerid, wantedLabel[playerid][i]);
}
}
An der Stelle, an der sich das Wanted aktualisiert (kein Timer notwendig):
new str[16];
for(new i = 0, j = GetMaxPlayers(); i < j; i++)
{
if(PlayerInfo[i][pMember] == 1)
{
format(str, sizeof(str), "Wanted: %d", PlayerInfo[p_id][pWanted]);
UpdatePlayer3DTextLabelText(i, wantedLabel[i][p_id], COLOR_BUSBLUE, str);
}
}
Wobei ich hier voraussetze, dass SA-MP das Label einem Spieler auch attached, wenn dieser nach dem pMember = 1 auf den Server kommt.
Sollte das nicht der Fall sein, verkompliziert sich die ganze Sache nochmal.
Das Label muss für jeden Spieler separat definiert und erstellt werden. Daher unter den Includes:
new Text3D:wantedLabel[MAX_PLAYERS];
In OnPlayerConnect:
wantedLabel[playerid] = Create3DTextLabel("Wanted: 0", COLOR_BUSBLUE, 0.0, 0.0, 0.4,10, 0, 1);
In OnPlayerSpawn:
Attach3DTextLabelToPlayer(wantedLabel[playerid], playerid, 0.0, 0.0, 0.7);
In OnPlayerDisconnect:
Delete3DTextLabel(wantedLabel[playerid]);
Und an der Stelle, an der sich das Wanted aktualisiert (kein Timer notwendig):
new str[16];
format(str, sizeof(str), "Wanted: %d", PlayerInfo[p_id][pWanted]);
Update3DTextLabelText(wantedLabel[p_id], COLOR_BUSBLUE, str);
Der Compiler sollte davon nicht abstürzen.
Hast du mal versucht, die aktuelle SA-MP Version herunterzuladen, und es mit dem beigefügten pawno.exe und dessen Compiler zu kompilieren?
Falls das auch nicht geht, prüfe ob du vielleicht aus versehen ein falsches Zeichen hinter/vor dem Define eingefügt hast.
Versuche es alternativ auch mal, den define ganz oben hin zu schreiben.
An ~200 Defines wird der Compiler aber nicht abstürzen, das ist problemlos machbar.
Dort ist die angesprochene Code Zeile nicht beinhaltet, somit kann es auch nicht der richtige Code sein.
Das solltest du eigentlich selbst erkennen.
case 11:{FrakHelpMenu(playerid);}
Das muss drin sein. Das hattest du ja bereits gefunden, daher verstehe ich nicht, warum du das Ganze dazu nicht postest.
Ansonsten solltest du dich mit dem Ersteller des Codes in Verbindung setzen.
Ich habe den Separaten Public (OnPlayerCheck) jetzt unter OnPlayerRequestClass und trotz aller dem wird die Kamera Fahrt erst nach dem Dialog gestartet..
"unter dem Callback" heißt im Coding immer IN dem Callback.
Positionstechnisch spielt es keine Rolle wo die Funktionen an sich sitzen, außerhalb von Funktionen.
Sprich, der Code, der OnUserCheck aufruft, muss aus OnPlayerConnect raus, und "in OnPlayerRequestClass rein".
Ich glaube das ging so, bin mir nicht sicher.^^
cache_get_value_name und strmid müssen vertauscht werden, sonst klappt es nicht.
Aber:
lade nicht sprich es wird eine leerer string zurück geben.
Hat jemand ne Ahnung Warum?
Bei Strings die in Arrays mit enum Werten stehen musst du die Länge mit angeben:
cache_get_value_name(i, "name", fInfo[i][fName], MAX_PLAYER_NAME);
Damit spart man sich das strmid.
bei mir wir kein MySQL_log mehr erstellt.
Hast du das aktuelle Plugin?
Werden dir im Server Log irgendwelche Fehler ausgegeben?
Beachte dass sich der MySQL Log jetzt im Ordner /logs/plugins/ unter mysql.txt befindet.
Dann setze den Aufruf des separaten Publics unter die Kamerabewegung. Es kann auch davor stehen, wichtig ist nur, dass beides durch OnPlayerRequestClass aufgerufen wird, und nicht durch OnPlayerConnect.
Ein Fehler im Code muss nicht unbedingt sein, es kann sein dass die Variablenwerte nicht passen.
Lass dir die mal ausgeben und prüfe, welches SetPlayerSkin ausgeführt werden sollte, anhand der Werte:
printf("Fraktion: %d / Rang: %d", pInfo[playerid][fraktion], pInfo[playerid][frang]);
Setze dann an dem entsprechenden SetPlayerSkin einen Print und prüfe ob der ausgeführt wird.
Dann prüfe die Stelle an der der Skin gesetzt werden sollte und lass dir eventuell vorhandene Variablen ausgeben.
Vielleicht wird da ein if-Abschnitt nicht aufgerufen, weil eine Variable nicht passt.
Ich kenne deinen Code nicht, daher kann ich nur vermuten.