Hey undzwar habe ich das Problem das das Script alles lädt nun habe ich eine Speicherfunktion eingebaut die z.B
nach dem Befehl /makeadmin das Level direkt in der Mysql Datenbank aktuallisieren soll bzw Updaten soll dies steht auch in der Server_Log jedoch
steht das neue Adminlevel dann nicht in der Mysql Datenbank.
Ladefunktion der der Accounts:
Damit rufe ich die Ladefunktion auf
mysql_function_query(db, szQuery, true, "OnQueryFinish", "ii", THREAD_LOAD_ACCOUNTS, playerid);
forward OnQueryFinish(resultid, extraid, ConnectionHandle);public OnQueryFinish(resultid, extraid, ConnectionHandle){ new Rows, Fields; if(resultid != THREAD_NO_RESULT) { cache_get_data(Rows, Fields); } switch(resultid) { case THREAD_LOAD_ACCOUNTS: { if(Rows) { new tmp[130]; cache_get_field_content(0, "ID", tmp); PlayerInfo[extraid][pID] = strval(tmp); cache_get_field_content(0, "Password", tmp); format(PlayerInfo[extraid][pPassword], 129, "%s", tmp); cache_get_field_content(0, "Level", tmp); PlayerInfo[extraid][pLevel] = strval(tmp); cache_get_field_content(0, "Gender", tmp); PlayerInfo[extraid][pGender] = strval(tmp); cache_get_field_content(0, "Age", tmp); PlayerInfo[extraid][pAge] = strval(tmp); cache_get_field_content(0, "Admin", tmp); PlayerInfo[extraid][pAdmin] = strval(tmp); cache_get_field_content(0, "Skin", tmp); PlayerInfo[extraid][pSkin] = strval(tmp); format(szQuery, sizeof(szQuery), "Hallo %s, dieser Account ist registriert. Bitte trage dein Passwort ein.", SpielerName(extraid)); ShowPlayerDialog(extraid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", szQuery, "Login", "Abbruch"); } else if(!Rows) { format(szQuery, sizeof(szQuery), "Hallo %s, dieser Account ist zum Registrieren freigegeben.", SpielerName(extraid)); ShowPlayerDialog(extraid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", szQuery, "Registrieren", "Abbruch"); } } } return 1;}
Die neue Speicherfunktion:
SpielerSpeichern(playerid){ new query[1024]; mysql_format(db,query,sizeof(query),"UPDATE `accounts` SET `Password`='%i',`Level`='%i',`Gender`='%i',`Age`='%i',`Admin`='%i',", PlayerInfo[playerid][pPassword],PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pGender],PlayerInfo[playerid][pAge],PlayerInfo[playerid][pAdmin]); mysql_format(db,query,sizeof(query),"%s`Skin`='%i' WHERE `ID`='%i'", query,PlayerInfo[playerid][pSkin],PlayerInfo[playerid][pID]); printf("query: %s", query); mysql_tquery(db,query); printf("Der Account von %s wurde erfolgreich gespeichert!",SpielerName(playerid)); return 1;}
Der /makeadmin Befehl:
CMD:makeadmin(playerid,params[]){ printf("Der Spieler %s hat /makeadmin ausgeführt!",SpielerName(playerid)); new giveid,level; if(PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid,-1,"Du bist kein NLR Teammitglied!/Du hast nicht den jeweiligen Adminrang!"); if(sscanf(params,"ui",giveid,level)) return SendClientMessage(playerid,-1,"Benutze: /makeadmin (Spielerid) (Level)"); { PlayerInfo[giveid][pAdmin] = level; SpielerSpeichern(giveid); GameTextForPlayer(playerid,"Adminlevel ~g~geandert.",10000,5); } return 1;}
//Edit Nachtrag
Dies Stand in meiner Server_Log
Der Spieler Aerox hat /makeadmin ausgeführt!
[17:45:22] query: UPDATE `accounts` SET `Password`='52',`Level`='1',`Gender`='0',`Age`='0',`Admin`='1',`Skin`='26' WHERE `ID`='5'
[17:45:22] Der Account von Aerox wurde erfolgreich gespeichert!
[17:45:22] [part] Aerox has left the server (0:1)
Damit sollte der Spieler eig das Adminlevel 1 haben aber es stand noch Adminlevel 6 in der Datebank..