Hast du das PlayerInfo erst nach dem public LogTransaktion deklariert?
Nimm die Funktion LogTransaktion mal und füge sie ganz unten im Gamemode ein, in die letzte Zeile.
Beiträge von Jeffry
-
-
Wie greifst du sonst immer auf db_id oder pAccount zu? Mit pInfo, oder SpielerInfo, oder ... ?
Poste gegebenenfalls mal den Code, mit dem du den Spieler speicherst. -
-
-
-
Stoffabsperrung
Objekt ID: 2773
-
Welchen Fehler?
-
Beispielsweise so kannst du es dann machen:
C
Alles anzeigenforward DriverUpdate(); public DriverUpdate() { new var; for(new i=0;i<MAX_PLAYERS;i++) { if(IsPlayerConnected(i) && PlayerInfo[i][ON_DUTY]) { if(PlayerInfo[i][CURRENT_JOB]==JOB_DRIVER) { var=GetPlayerVehicleID(i); for(new j=0;j<MAX_PLAYERS;j++) { if(IsPlayerConnected(j) && i!=j) { if(IsPlayerInVehicle(j,var)) { if(GetPlayerMoney(j)>=JobVar[i][1]) { GivePlayerMoney(j,-JobVar[i][1]); JobVar[i][0]+=JobVar[i][1]; } else RemovePlayerFromVehicle(j); } } } } else if(PlayerInfo[i][CURRENT_JOB]==JOB_PILOT) { var=GetVehicleModel(GetPlayerVehicleID(i)); if(var == 577) // AT-400 { JobVar[i][0]+=10; //Geld eben anpassen. } } } } return 1; } -
Auf Grund des ersten Errors sind die nachfolgenden Errors nicht anders zu erklären.
Ein Klammerfehler kommt bei diesem Fehlerbild nicht in Frage, unter keinen Umständen.26 Errors ist das Maximum an Errors, mehr gibt er dir nicht aus. Das heißt aber nicht zwangsläufig, dass es ein Klammerfehler ist.
Nichtsdestotrotz ist die strtok Funktion schlecht.
Das ist Ansichtssache und kann nicht pauschalisiert werden.
-
Ok, zuvor noch:
Ist das richtig so, oder hast du das so gemacht, es klappt aber nicht?Cif(IsPlayerConnected(i) && PlayerInfo[i][CURRENT_JOB]==JOB_DRIVER && PlayerInfo[i][CURRENT_JOB]==JOB_ABSCHLEPP && PlayerInfo[i][ON_DUTY])Weil mir kommt das komisch vor, dass der Spieler 2 Jobs haben und gleichzeitig OnDuty sein muss, um Geld zu bekommen.
-
Jeder Pilot soll immer Geld bekommen, in bestimmten Abständen?
-
Mir ist bewusst, dass der Threadstarter gesperrt ist, aber auf Grund der falschen Informationen hier möchte ich das kurz klarstellen, da es ja noch nicht all zu lange her ist.
Der Fehler ist kein Klammerfehler.Das Problem ist, dass es verschiedene Versionen von strtok gibt, die alle unterschiedliche Result-Größen haben (das was zurück gegeben wird). Darunter gibt es eine Version, die gibt Results mit einer Größe von 256 zurück. Macht man im Code nun sowas:
Dann tritt genau der Error 47 auf:
error 047: array sizes do not match, or destination array is too small
Das heißt: Die Arraygrößen stimmen nicht überein, oder das Zielarray ist zu klein. Letzteres trifft zu, da das Zielarray in unserem Beispiel nur eine Größe von 64 hat. Gibt strtok nun aber ein Array mit einer Größe von 256 zurück, dann passt das da nicht rein, entsprechend wird der Fehler ausgegeben.Lösung des Problems ist entweder in strtok das "result"-Array kleiner zu machen (256 ist unnötig groß), oder man setzt das "tmp"-Array aus dem Code oben von 64 auf 256, dann ist der Fehler ebenfalls weg.
Ich verweise auch gleich auf die von mir optimierte strtok Variante:
Nützliche Codeschnipsel - strtok v2.0 -
-
Bei OnPlayerDisconnect musst du die Fahrzeuge des Spielers entfernen lassen.
-
Im SendClientMessage das playerid ebenfalls zu i ändern, da i der Zähler für alle Spieler ist, die online sind.
Sonst geht die Nachricht X mal an den Spieler, der die Nachricht sendet. -
Du fängst mit der Schleife bei 1 an, und die Nachricht kommt immer, egal ob man das Fahrzeug parken darf oder nicht.
Versuche es so:C
Alles anzeigenCMD:parken(playerid,params[]) { new query[256]; if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,RED,"Du musst im Fahrzeug sitzen!"); for(new i = 0;i<MAX_AUTOS;i++) { if(cInfo[i][id_x] != GetPlayerVehicleID(playerid))continue; if(strcmp(cInfo[i][besitzer],SpielerInfo[playerid][Name])) return SendClientMessage(playerid,RED,"Dieses Auto gehört nicht dir!"); GetVehiclePos(cInfo[i][id_x],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z]); GetVehicleZAngle(cInfo[i][id_x],cInfo[i][c_r]); mysql_format(db, query,sizeof(query),"UPDATE autos SET x='%f',y='%f',z='%f',r='%f',nitro='%i' WHERE besitzer='%e'",cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z],cInfo[i][c_r],cInfo[i][nitro],SpielerInfo[playerid][Name]); mysql_function_query(db,query,false,"",""); SendClientMessage(playerid,GREEN,"Du hast dein Fahrzeug erfolgreich geparkt !"); return 1; } return 1; } -
Geht es um den autoentfernen Befehl?
Dort:
DestroyVehicle(aInfo[i][besitzer]);
Zu
DestroyVehicle(aInfo[i][id_x]);Einen Admin Befehl habe ich nicht gefunden, poste den gegebenenfalls.
-
Ja, genau so.
-
Was meinst du?
In den Code musst du es schreiben, falls du das meinst, wenn du es verwenden willst, ja. -