Hi.
Man sollte in verschiedene World's keine Befehle eingeben können.
Inwiefern sollte es gehen?
Einfach bei jenen Befehlen am Anfang die Virtuelle Welt abfragen und vergleichen
Hi.
Man sollte in verschiedene World's keine Befehle eingeben können.
Inwiefern sollte es gehen?
Einfach bei jenen Befehlen am Anfang die Virtuelle Welt abfragen und vergleichen
Hab es so geprintet und es ist alles richtig?
Nun solltest du uns noch den Auszug aus der Server_Log geben, indem es ausgegeben wurde oder selbst schauen ob das ganze richtig ist und passt
Er printet in der Zeile nur Name: und ab da nichts mehr. Als würde es leer sein.
Dann lass es dir bitte vor dem Namen printen, ich denke mal das das i zu hoch ist und dort einfach kein Eintrag mehr vorhanden ist.
Hier der Code. Er printet Name:%s nicht.
Lass dir mal bitte in Zeile 24 zusätzlich das "i" als %d printen.
Doch er printet nur falsch.
@>Apple
Das scheint denn allerdings an einer anderen Stelle in die Konsole geschrieben zu werden, da du in deinem Code ja nur den Namen ausgibst und nirgends "ID:, Name:" printest
ocmd:setmoney(playerid, params[])
{
print("setmoney Befehl ausgeführt!");
if(!isAdmin(playerid,3))return SendClientMessage(playerid, DUNKELROT, "Dein Adminlevel ist zu Niedrig!");
new pID, string[128], BETRAG;
if(sscanf(params, "ui", pID, BETRAG))return SendClientMessage(playerid, GELB, "[INFO]: /setmoney [SpielerID] [Betrag]");
ResetPlayerMoney(pID);
GivePlayerMoney(pID, BETRAG);
PlayerInfo[pID][pMoney] = BETRAG;
format(string, sizeof(string), "AdmCmd: %s hat dein Geld auf $%i gesetzt", SpielerName(playerid), BETRAG);
SendClientMessage(pID, DUNKELROT, string);
format(string, sizeof(string), "AdmCmd: Du hast %s den Geldbetrag auf $%i gesetzt!", SpielerName(pID), BETRAG);
SendClientMessage(playerid, DUNKELROT, string);
SaveUserStats(pID);
return 1;
}
Alles anzeigen
Grade gesehen, dass du nicht der Ersteller des Themas bist und der Code oben somit nicht deine Variable ist.
Du müsstest also nun "PlayerInfo[pID][pmoney]" durch "PlayerInfo[pID][pMoney]" ersetzten
Danke dir, jetzt hab ich die vom letzten und diesem Jahr
Wäre das so richtig? @Whice.
ocmd:setmoney(playerid, params[])
{
print("setmoney Befehl ausgeführt!");
if(!isAdmin(playerid,3))return SendClientMessage(playerid, DUNKELROT, "Dein Adminlevel ist zu Niedrig!");
new pID, string[128], BETRAG;
if(sscanf(params, "ui", pID, BETRAG))return SendClientMessage(playerid, GELB, "[INFO]: /setmoney [SpielerID] [Betrag]");
ResetPlayerMoney(pID);
GivePlayerMoney(pID, BETRAG);
PlayerInfo[pID][pmoney]+=BETRAG;
format(string, sizeof(string), "AdmCmd: %s hat dein Geld auf $%i gesetzt", SpielerName(playerid), PlayerInfo[pID][pmoney]);
SendClientMessage(pID, DUNKELROT, string);
format(string, sizeof(string), "AdmCmd: Du hast %s den Geldbetrag auf $%i gesetzt!", SpielerName(pID), PlayerInfo[pID][pmoney]);
SendClientMessage(playerid, DUNKELROT, string);
SaveUserStats(pID);
return 1;
}
Alles anzeigen
Danke.
Deaths werden nun gespeichert und geladen. Jetzt hab ich noch das problem das money geladen wird aber nicht gespeichert.
@Whice. Ist bei mir das selbe kann in der Datenbank mein Geld setten wird Ingame geladen aber wenn ich /setmoney 1 0 setzte und vom Server Disconnecte was ich eigentlich nichteinmal machen müsste da ich beim setmoney Befehl noch den Spieler Speicher. Aber in der Datenbank steht das ich trotzdem noch 50k habe und @Zreeq Sorry das ich dir jetzt nicht helfen kann
Ich denke mal das dies daran liegen wird, dass ihr bei deinem GiveMoney Befehl das ganze nur über GivePlayerMoney macht, dort ist es allerdings wichtig, dass die Geldvariable "PlayerInfo[playerid][pmoney]" auch hochgesetzt wird.
mein Makeadminbefehl sieht so aus nicht wundern wegen den beiden SendClientMessages am Schluss:
Das kannst du am besten mit einem stock lösen, der den Namen einer PlayerID ausgibt, so kannst du nun immer wenn du den Namen brauchst "SpielerName(playerid)" verwenden.
Das obere sollte so passen.
ocmd:makeadmin(playerid,params[])
{
print("makeadmin Befehl ausgeführt!");
if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
new pID,a_level,string[128];
if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid,GELB,"[INFO]: /makeadmin [playerid] [Level]");
PlayerInfo[pID][pAlevel]=a_level;
SaveUserStats(pID);
format(string, sizeof(string), "Du wurdest von %s zu einem Admin %i ernannt", SpielerName(playerid), a_level);
SendClientMessage(pID, GELB, string);
format(string, sizeof(string), "Du hast %s zu einem Admin %i ernannt", SpielerName(playerid), a_level);
SendClientMessage(playerid, GELB, string);
return 1;
}
stock SpielerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}
Alles anzeigen
außer ich will einen neuen Abspeicherbaren Parameter einfügen?
Nein, vor steht WHERE darf niemals ein Komma stehen, wenn du einen weiteren Parameter hast setzt du das Komma natürlich hinter alevel = '%d' und dahinter dann den neuen Parameter, danach allerdings keins mehr.
Falls das jetzt verständlich war^^
Habs grade übersehen aber vor dem WHERE kommt kein Komma mehr
stock SaveUserStats(playerid)
{
//Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
if(!PlayerInfo[playerid][pLoggedIn]) return 1;
//Ansonsten speichere sie
new query[256];
mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][p_id]);
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen
Der Fehler liegt an deiner MySQL-Abfrage, die du zum Speichern nutzt. Die Variable pid muss an letzter Stelle der Parameter sein, da diese ja auch als letztes in dem MySQL-Befehl gebraucht wird.
stock SavePlayer(playerid)
{
new query[256];
mysql_format(db_handle, query, sizeof(query), "UPDATE accounts SET level = '%d', money = '%d', kills = '%d', deaths = '%d', admin = '%d', ip = '%d' WHERE id = '%d'",
PlayerInfo[playerid][plevel], PlayerInfo[playerid][pmoney], PlayerInfo[playerid][pkills], PlayerInfo[playerid][pdeaths], PlayerInfo[playerid][padmin], PlayerInfo[playerid][pip], PlayerInfo[playerid][pid]);
mysql_pquery(db_handle, query);
return 1;
}
Wenn du alleine auf dem Server bist, solltest du eigentlich ID 0 haben. Ansonsten zeig uns mal dein makeadmin-Command
// EDIT
Grad am Handy gewesen deswegen hab ich es voll übersehen, aber deine Parameter der SQL abfrage sind falsch gesetzt und irgendwie 2 zu viel (Franktion, Rank)
mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', alevel = '%d', WHERE id = '%d'",
PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][p_id]);
wichtig ist, dasss PlayerInfo[playerid][p_id] an letzter Stelle steht, da dies ja deine letzte Variable in der SQL-Abfrage ist. Wenn du also einen neuen Parameter hinzufügen möchtest, einfach zwischen pAlevel und p_id eintragen.
Funktioniert nun, allerdings entsteht doch ein Dauerspam - wie kann ich diesem entgehen?
Du könntest ganz einfach nen Sleep, 5000 oder so einbauen, also einfach unter das SendChat
Heißt deine api denn wirklich "SAMP-API.ahk" und befindet sie sich im selben Ordner?
Hast du denn eine offizielle Version von GTA V und diese installiert?