Moin,
speichern sollte er gar nichts, da du einen Fehler in deiner Query hast. Du darfst vor WHERE kein Komma setzten, richtig wäre also so:
Danke hat geklappt.
Moin,
speichern sollte er gar nichts, da du einen Fehler in deiner Query hast. Du darfst vor WHERE kein Komma setzten, richtig wäre also so:
Danke hat geklappt.
Codemysql_format(dbhandle,query,sizeof(query),"UPDATE `user` SET `skin` = '%d', `alter` = '%d', `geschlecht` = '%d', `neuling` = '%d', `leben` = '%.0f', `russi` = '%.0f', `Posx` = '%f', `Posy` = '%f', `Posz` = '%f', `Posa` = '%f', `Interior` = '%d', `Virtualworld` = '%d', WHERE `ID` = '%i'",GetPlayerSkin(playerid), pInfo[playerid][palter],pInfo[playerid][pgeschlecht],pInfo[playerid][pneuling],pInfo[playerid][pleben],pInfo[playerid][prussi],x,y,z,a,GetPlayerInterior(playerid),GetPlayerVirtualWorld(playerid),pInfo[playerid][pid]);
fehler du hattest 0.f bei den cordinaten aber es muss zu %f
weste un leben, kannst du auch normal %f nehmen
Leider ohne erfolg!
Guten Tag,
komischerweise Speichern die Positionen nicht (?).
mysql_format(dbhandle,query,sizeof(query),"UPDATE `user` SET `skin` = '%d', `alter` = '%d', `geschlecht` = '%d', `neuling` = '%d', `leben` = '%.0f', `russi` = '%.0f', `Posx` = '%.0f', `Posy` = '%.0f', `Posz` = '%.0f', `Posa` = '%.0f', `Interior` = '%d', `Virtualworld` = '%d', WHERE `ID` = '%i'",GetPlayerSkin(playerid),
pInfo[playerid][palter],pInfo[playerid][pgeschlecht],pInfo[playerid][pneuling],pInfo[playerid][pleben],pInfo[playerid][prussi],x,y,z,a,GetPlayerInterior(playerid),GetPlayerVirtualWorld(playerid),pInfo[playerid][pid]);
//Spieler-Position-Laden [ ! ]
pInfo[playerid][px]=cache_get_field_content_float(0,"Posx",dbhandle);
pInfo[playerid][py]=cache_get_field_content_float(0,"Posy",dbhandle);
pInfo[playerid][pz]=cache_get_field_content_float(0,"Posz",dbhandle);
pInfo[playerid][pa]=cache_get_field_content_float(0,"Posa",dbhandle);
pInfo[playerid][pint]=cache_get_field_content_int(0,"Interior",dbhandle);
pInfo[playerid][pvit]=cache_get_field_content_int(0,"Virtualworld",dbhandle);
//Spieler-Position-Laden [ ! ]
Wenn ich das ganze printe kommt das beim Server.exe:
INSERT INTO user (username, password) VALUES ('Reste',MD5('test'))
UPDATE `user` SET `skin` = '247', `alter` = '23', `geschlecht` = '1', `neuling` = '0', `leben` = '0', `russi` = '0', `Posx` = '0', `Posy` = '0', `Posz` = '0', `Posa` = '0', `Interior` = '0', `Virtualworld` = '0', WHERE `ID` = '63'
/e MySQL Log
[19:35:26] [DEBUG] mysql_format - connection: 1, len: 256, format: "INSERT INTO user (username, password) VALUES ('%e',MD5('%e'))"
[19:35:26] [DEBUG] mysql_tquery - connection: 1, query: "INSERT INTO user (username, password) VALUES ('Reste',MD5('xxxx", callback: "OnPlayerRegister", format: "i"
[19:35:26] [DEBUG] CMySQLQuery::Execute[OnPlayerRegister] - starting query execution
[19:35:26] [DEBUG] CMySQLQuery::Execute[OnPlayerRegister] - query was successfully executed within 2.755 milliseconds
[19:35:26] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
[19:35:26] [DEBUG] Calling callback "OnPlayerRegister"..
[19:35:26] [DEBUG] cache_insert_id - connection: 1
[19:35:26] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called
[19:35:26] [DEBUG] mysql_format - connection: 1, len: 256, format: "UPDATE `user` SET `skin` = '%d', `alter` = '%d', `geschlecht` = '%d', `neuling` = '%d', `leben` = '%.0f', `russi` = '%.0f', `Pos..."
[19:35:26] [DEBUG] mysql_pquery - connection: 1, query: "UPDATE `user` SET `skin` = '247', `alter` = '23', `geschlecht` =", callback: "(null)", format: "(null)"
[19:35:26] [DEBUG] CMySQLQuery::Execute[] - starting query execution
[19:35:26] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE `ID` = '63'' at line 1
[19:35:26] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
Alles anzeigen
Versuche dir doch mal dem Fehler auf der Spur zu kommen ( nicht Böse gemeint oder so )
Hab am Anfang auch immer den Fehler gemacht nur hier zu fragen aber lasse dir doch einfach mal ein bisschen code Debuggen das hilft schon um zu sehen ob und was überhaupt Passiert.
CodeAlles anzeigenz.b so OnGameModeInit: //INT Laden for(new i=0;i<sizeof(bInfo);i++) { printf("Punkt 1"); new string[250],string2[250]; printf("Punkt 2"); printf("%f %f %f", bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]); CreatePickup(1318,1,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],-1); CreatePickup(1318,1,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz],-1); printf("Punkt 3"); format(string,sizeof(string),"%s Eingang u zu interagieren\nbenutze die Eingabetaste",bInfo[i][b_name]); Create3DTextLabel(string,COLOR_WHITE,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],40,0,1); format(string2,sizeof(string2),"%s Ausgang um zu interagieren\nbenutze die Eingabetaste",bInfo[i][b_name]); Create3DTextLabel(string,COLOR_WHITE,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz],40,i,1); printf("Punkt 4); CreateDynamicMapIcon(bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],bInfo[i][intmapmarker],-1,-1,-1,-1,-1,MAPICON_LOCAL); printf("Punkt 5); }
Wo du recht hast, hast du sowieso recht.
Habs jetzt geschafft, nun wenn ich ins Interior betrete Falle ich durchs Map
Hab einfach die b_a gelöscht und die b_ia
Hey,
komischerweise werden bei mir die Gebäuden und Mapmarker nicht geladen(?)
´
enum intInfo{
b_name[128],
Float:b_x,
Float:b_y,
Float:b_z,
Float:b_a,
Float:b_ix,
Float:b_iy,
Float:b_iz,
Float:b_ia,
b_interior,
intmapmarker
}
new bInfo[][intInfo] = {
{"Stadthalle",481.0609,-1771.0409,18.7958, 352.6132,389.8470, 173.7643, 1008.3828, 89.3840,3,38}
};
Alles anzeigen
OnGameModeInit:
//INT Laden
for(new i=0;i<sizeof(bInfo);i++)
{
new string[250],string2[250];
CreatePickup(1318,1,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],-1);
CreatePickup(1318,1,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz],-1);
format(string,sizeof(string),"%s Eingang u zu interagieren\nbenutze die Eingabetaste",bInfo[i][b_name]);
Create3DTextLabel(string,COLOR_WHITE,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],40,0,1);
format(string2,sizeof(string2),"%s Ausgang um zu interagieren\nbenutze die Eingabetaste",bInfo[i][b_name]);
Create3DTextLabel(string,COLOR_WHITE,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz],40,i,1);
CreateDynamicMapIcon(bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],bInfo[i][intmapmarker],-1,-1,-1,-1,-1,MAPICON_LOCAL);
}
Alles anzeigen
//Interrior
if(newkeys & KEY_SECONDARY_ATTACK)
{
if(enterexit[playerid]!=0)return 1;
for(new i=0;i<sizeof(bInfo);i++)
{
if(IsPlayerInRangeOfPoint(playerid,2,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]))
{
SetPlayerPos(playerid,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz]);
SetPlayerVirtualWorld(playerid,bInfo[i][b_interior]);
SetPlayerVirtualWorld(playerid,i);
SetPlayerFacingAngle(playerid,bInfo[i][b_ia]);
enterexit[playerid]=2;
return 1;
}
if(IsPlayerInRangeOfPoint(playerid,2,bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz]))
{
if(GetPlayerVirtualWorld(playerid)!=i)continue;
SetPlayerPos(playerid,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]);
SetPlayerVirtualWorld(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPlayerFacingAngle(playerid,bInfo[i][b_a]);
enterexit[playerid]=2;
return 1;
}
}
}
Alles anzeigen
Danke alles funktioniert!
Danke an alle
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,string,"Testserver,"Dein Account wurde gefunden bitte Logge dich ein ","OK","");
zu
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Testserver,"Dein Account wurde gefunden bitte Logge dich ein ","OK","");
Funktioniert, jedoch steht dann nicht da wie viele Versuche er schon versucht hat
Das liegt wohl mit daran, das deine Escape Zeichen falsch sind. Du verwendest ´ brauchst aber `
Richtig wäre also:
SQLUPDATE `user` SET `skin` = '%d', `alter` = '%d', `geschlecht` = '%d', `neuling` = '%d', `leben` = '%.0f', `russi` = '%.0f' WHERE `ID` = '%i'
Um zu überprüfen, ob deine SQL-Anfrage korrekt ist, kannst du auch auf verschiedene Online-Tools zurückgreifen (Beispiel: https://www.eversql.com/sql-syntax-check-validator/)
Danke, hat funktioniert!
btw, danke an Alle
Hätte da noch einen Warning, denn ich irgendwie nicht wegbekomme
warning 202: number of arguments does not match definition <-- Zeile 191
public OnPasswordResponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields);
if(num_rows==0)
{
//Passwort falsch
LoginPW[playerid]+=1;
new string[250];
format(string,sizeof(string),"Passwort falsch [%d/3]",LoginPW[playerid]);
if(LoginPW[playerid]>=3)
{
ShowPlayerDialog(playerid, DIALOG_LOGINT, DIALOG_STYLE_MSGBOX, "Du wurdest gekickt!","Du wurdest gekickt da du dein Passwort drei mal falsch eingegeben hast!\n\nFalls du dein Passwort vergessen hast melde dich bei einem Teammitglied.","OK"," ");
return SetTimerEx("KickHackInfo",1000,false,"i",playerid);
}
else
{
Zeile 191 : ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,string,"Testserver,"Dein Account wurde gefunden bitte Logge dich ein ","OK","");
}
}
else
{
//Passwort richtig
LoadAccount(playerid);
}
return 1;
}
Alles anzeigen
Alles anzeigenDu brauchst in deinem Falle die ´´ und '' nicht.
'' Benötigst du beim String, bzw. SET frakrang='%e', dort liegt aber definitiv nicht der Fehler.
Glaube es liegt am ´user´
Schreibe es mal so: (spielerjahr = alter) Falls du es genauso übernimmst, bitte in der Datenbank anpassen.
CodeAlles anzeigensavePlayer(playerid) { //Spieler Speichern if(pInfo[playerid][peingeloggt]!=1 || IsPlayerNPC(playerid))return 1; GetPlayerHealth(playerid,pInfo[playerid][pleben]), GetPlayerArmour(playerid,pInfo[playerid][prussi]); new query[256]; mysql_format(dbhandle,query,sizeof(query),"UPDATE user SET skin=%d,spieleralt=%d,geschlecht=%d,neuling=%d,leben='%.0f',russi='%.0f' WHERE ID=%i",GetPlayerSkin(playerid), pInfo[playerid][palter],pInfo[playerid][pgeschlecht],pInfo[playerid][pneuling],pInfo[playerid][pleben],pInfo[playerid][prussi],pInfo[playerid][pid]), mysql_pquery(dbhandle,query,"",""), printf("%s",query), pInfo[playerid][peingeloggt]=0; return 1; }
Ohne Erfolg!
Weder das Geschlecht & Alter speichert sich nicht
Ohne Erfolg leider..
Weiß jetzt nicht ob das wirklich der Fehler ist.. aber integer werte packt man bei mysql nicht in Anführungszeichen. Probiere es mal ohne.
mysql_format(dbhandle,query,sizeof(query),"UPDATE user SET skin='%d',alter='%d',geschlecht='%d',neuling´='%d',leben='%.0f',russi='%.0f' WHERE ID='%i'",GetPlayerSkin(playerid),
pInfo[playerid][palter],pInfo[playerid][pgeschlecht],pInfo[playerid][pneuling],pInfo[playerid][pleben],pInfo[playerid][prussi],pInfo[playerid][pid]),
So funktionierts irgendwie auch nicht
Alles anzeigenMoin Meister.
Du solltest dich bei deinem Code mehrere Sachen fragen.
Ich habe dir als aller erstes den Code minimal umgeschrieben.
Wird savePlayer ausgeführt?
Bist du angemeldet? (peingeloggt)
Was spuckt der Query Print aus sowie die MySQL Log?
"alter" würde ich umbenennen da es ein SQL Command an sich schon ist, wobei ich meine das wäre bei mysql_format nicht wichtig, dennoch schaus dir an!
Zum von mir editierten Quellcode:
Man hätte man noch mehr umschreiben können, will dich aber nicht groß verwirren.
CodeAlles anzeigensavePlayer(playerid) { //Spieler Speichern if(pInfo[playerid][peingeloggt]!=1 || IsPlayerNPC(playerid))return 1; GetPlayerHealth(playerid,pInfo[playerid][pleben]), GetPlayerArmour(playerid,pInfo[playerid][prussi]); new query[256]; mysql_format(dbhandle,query,sizeof(query),"UPDATE ´user´ SET ´skin´='%d',´alter´='%d',´geschlecht´='%d',´neuling´='%d',´leben´='%.0f',´russi´='%.0f' WHERE ´ID´='%i'",GetPlayerSkin(playerid), pInfo[playerid][palter],pInfo[playerid][pgeschlecht],pInfo[playerid][pneuling],pInfo[playerid][pleben],pInfo[playerid][prussi],pInfo[playerid][pid]), mysql_pquery(dbhandle,query,"",""), printf("%s",query), pInfo[playerid][peingeloggt]=0; return 1; }
Hey, danke für deine Antwort!
19:44:55] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '´user´ SET ´skin´='60',´alter´='23',´geschlecht´='1',´neuling´='0',...' at line 1
[19:44:55] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError
Moin moin,
Alter, Geschlecht, und die SkinID wird komischerweise nicht gespeichert..
savePlayer(playerid)
{
//Speieler Speichern
if(pInfo[playerid][peingeloggt]!=1)return 1;
if(IsPlayerNPC(playerid))return 1;
GetPlayerHealth(playerid,pInfo[playerid][pleben]);
GetPlayerArmour(playerid,pInfo[playerid][prussi]);
new query[256];
mysql_format(dbhandle,query,sizeof(query),"UPDATE ´user´ SET ´skin´='%d',´alter´='%d',´geschlecht´='%d',´neuling´='%d',´leben´='%.0f',´russi´='%.0f' WHERE ´ID´='%i'",GetPlayerSkin(playerid),
pInfo[playerid][palter],pInfo[playerid][pgeschlecht],pInfo[playerid][pneuling],pInfo[playerid][pleben],pInfo[playerid][prussi],pInfo[playerid][pid]);
mysql_pquery(dbhandle,query,"","");
printf("%s",query);
pInfo[playerid][peingeloggt]=0;
return 1;
}
Alles anzeigen
Ist doch der gleiche Code?
Danke, habs auch voll übersehen xD
/e
Und was passiert, wenn du sie ganz entfernst?
Dann kommen keine Errors, komisch
Die Funktion an sich ist richtig, auch die return-Zeile.
Wo hast du den Code denn eingefügt?
Füge ihn mal ganz unten in deinen Gamemode ein, in die allerletzte Zeile. Er darf in keinem Callback oder so stehen.
Hab Sie ganz unten, wo meine andere stocks sind eingefügt.
btw, habe Sie gerade ganz oben eingefügt ohne Erfolg
Alle 8 Zeilen haben die gleiche Nummer 14221? Das wage ich zu bezweifeln.
Welche Zeile ist die 14221?
Wollte jetzt keinen extra Thread machen, aber wieso kommt dieser Error?
stock IsNummeric(string[])
{
for(new i=0,j=strlen(string),i<j;++)
{
if((string[i] > '9' || string[i] < '0'))return 0;
}
return 1;
}
C:\Users\xxx\OneDrive\Desktop\Selfmade\gamemodes\selfmade.pwn(14221) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
Alles anzeigen