Nach mysql_format muss das Query noch versendet werden:
mysql_pquery(handle, string);
Nach mysql_format muss das Query noch versendet werden:
mysql_pquery(handle, string);
Ich hab folgendes Problem.
Und zwar wird mir Angezeigt das in einen Syntax Fehler hätte
Hier mal der Error:
[02/03/19 14:33:05] [ERROR] error #1064 while executing query "UPDATE `users` SET `level` = '0', `money` = '0', `kills` = '0', `deaths` = '0', `ban` = '3', `admin` = '0', WHERE `id` = '31'": You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `id` = '31'' at line 1
Hier der Code:
mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', WHERE `id` = '%d', `ban` = '%d', `admin` = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin]);
Desweiteren werden die Daten nicht richtig Gespeichert z.b beim Befehl /setadmin:
CMD:setadmin(playerid,params[]){new string[128];if(PlayerInfo[playerid][pAdmin] >= 1){if(sscanf(params,"ui",p_id ,pAdmin))return SendClientMessage(playerid,0x00FF00,"[Info] /setadmin [playerid][adminlevel]");PlayerInfo[p_id][pAdmin] = pAdmin;mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '1' WHERE `id` = %d;", PlayerInfo[playerid][pAdmin]);mysql_pquery(handle, string);SendClientMessage(playerid,0x00FF00,"Du hast den Adminrang geändert");}else{SendClientMessage(playerid,0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl auszuführen!"); // Keine Rechte}return 1;}
Hier mein SaveUserStats:
stock SaveUserStats(playerid){//Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nichtif(!PlayerInfo[playerid][pLoggedIn]) return 1;//Ansonsten speichere sienew query[1024];mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', WHERE `id` = '%d', `ban` = '%d', `admin` = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id], PlayerInfo[playerid][pBan], PlayerInfo[playerid][pAdmin]);//Das Query wird abgesendetmysql_pquery(handle, query);return 1;}
Wo Liegt der Fehler?
Wo Liegt der Fehler?
Du kannst nicht einfach hinter das WHERE noch mehr dran hängen, dass muss alles zwischen das SET und dem WHERE, nicht danach.
Musst es so anordnen:
UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', `ban` = '%d', `admin` = '%d' WHERE `id` = '%d'
Und kein Komma vor das WHERE
Du kannst nicht einfach hinter das WHERE noch mehr dran hängen, dass muss alles zwischen das SET und dem WHERE, nicht danach.
Musst es so anordnen:
UPDATE `users` SET `level` = '%d', `money` = '%d', `kills` = '%d', `deaths` = '%d', `ban` = '%d', `admin` = '%d' WHERE `id` = '%d'
Und kein Komma vor das WHERE
danke für den Hinweis
Leider werden die Daten durch den Befehl /setadmin nicht richtig gespeichert.
CMD:setadmin(playerid,params[])
{
new string[128];
if(PlayerInfo[playerid][pAdmin] >= 1)
{
if(sscanf(params,"ui",p_id ,pAdmin))return SendClientMessage(playerid,0x00FF00,"[Info] /setadmin [playerid][adminlevel]");
PlayerInfo[p_id][pAdmin] = pAdmin;
mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '1' WHERE `id` = %d;", PlayerInfo[playerid][pAdmin]);
mysql_pquery(handle, string);
SendClientMessage(playerid,0x00FF00,"Du hast den Adminrang geändert");
}
else
{
SendClientMessage(playerid,0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl auszuführen!"); // Keine Rechte
}
return 1;
}
Also ich gebe Ingame z.b /setadmin Id:0 Adminlevel = 3 ein und es wird trotzdem 1 Eingespeichert.
Es kann sein das ich einen Denkfehler habe, aber weiß nicht wo..
@Kaliber
Ich würde das komplette MySQL Zeug da raus nehmen.
Schließlich reicht es doch, wenn beim Logout alles in der Datenbank erst gespeichert wird
Der Fehler den du gemacht ist, ist du gibst beim Query statisch 1 an und die ID soll das Adminlevel bei dir sein..das ja Käse..
mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '%d' WHERE `id` = %d", PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][p_id]);
So müsstest du es machen
Alles anzeigenIch würde das komplette MySQL Zeug da raus nehmen.
Schließlich reicht es doch, wenn beim Logout alles in der Datenbank erst gespeichert wird
Der Fehler den du gemacht ist, ist du gibst beim Query statisch 1 an und die ID soll das Adminlevel bei dir sein..das ja Käse..
mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `admin` = '%d' WHERE `id` = %d", PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][p_id]);
So müsstest du es machen
Danke für den Tipp.
Kann ich generell die Mysql Funktionen in einem Befehl raus lassen, und es einfach bei einem Logout speichern lassen?
Und ich möchte gerne, anstatt das in der DB '1' steht das dort Steht: Supporter usw.
Kann ich das durch eine Case Funktion ermöglichen?
Funktioniert diese Variante die ich Angefangen habe zu Scripten?
//Admin-Level//
#define ADMIN_LEVEL_1_NAME "Supporter"
#define ADMIN_LEVEL_2_NAME "Admin"
Hier sind die Admin Level defeniert
GetAdminRank(playerid)
{
new arank[64];
switch(PlayerInfo[playerid][pAdmin])
{
case 2: arank = ADMIN_LEVEL_2_NAME;
case 1: arank = ADMIN_LEVEL_1_Name;
}
return arank;
}
Hier ist die Funktion
Nur weiß ich nicht, wie ich es im Code umsetzen kann.
Kann ich generell die Mysql Funktionen in einem Befehl raus lassen, und es einfach bei einem Logout speichern lassen?
Und ich möchte gerne, anstatt das in der DB '1' steht das dort Steht: Supporter usw.
Kann ich das durch eine Case Funktion ermöglichen?
Ja, zu Allem
Kannst du mal aus Spaß das ShowPlayerDialog auskommentieren und mal schauen ob du dann immer noch crashst?
Und printe dir mal den String und poste den mal
Entschuldige für die sehr Späte Antwort.
Also, hab den Dialog Ausgeklammert, er Crasht nun nicht mehr, der Print schaut wiefolgt aus:
[15:49:43] str: {FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{FFFFFF}{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---{808080}---
Huhu,
gibts eine Möglichkeit für folgende Situation:
Ich möchte einen Text im "TextDraw" anzeigen lassen, jedoch wenn der Spieler
einen Text eingibt, welcher Länger als 30 Zeilen ist (sonst schauts über den TextDraw hinaus) irgendwie einen automatischen
"~n~" in den Text reinsetzen lassen? (Über buffer?)
Der Text wird über eine Variable gesetzt (pLastText][125]), wie funktioniert das, wenn der Text der in dieser Variable drin ist, automatisch dieses ~n~ erhält?
Also, hab den Dialog Ausgeklammert, er Crasht nun nicht mehr, der Print schaut wiefolgt aus:
Also das Problem ist, dass du das alles in eine Reihe ausgeben willst und das für den Dialog zu lang ist.
Du musst öfter Zeilenumbrüche machen mit \n.
Schreibe es mal so:
CMD:reports(playerid, params[])
{
if(!PlayerInfo[playerid][pEingeloggt])return SendClientMessage(playerid, -1, "{808080}[{FF3333}FEHLGESCHLAGEN{808080}]: Du bist nicht Eingeloggt!");
if(PlayerInfo[playerid][pAdmin] < 1)return SendClientMessage(playerid, -1, "{808080}[{FF3333}FEHLGESCHLAGEN{808080}]: Du hast nicht die benötige Rechte um diesen Befehl zu benutzen!");
new str[1024];
for(new i; i < MAX_SUP; i++){
if(SupportInfo[i][erstellt] == true){
if(SupportInfo[i][bearbeitung] == false){
format(str, sizeof(str), "%s{FFFFFF}%s | {B36B00}%s\n", str, SupportInfo[i][Name], SupportInfo[i][Ueberschrift]);
}
else{
format(str, sizeof(str), "%s{FFFFFF}%s | {B36B00}%s [In Bearbeitung]\n", str, SupportInfo[i][Name], SupportInfo[i][Ueberschrift]);
}
}else format(str, sizeof(str), "%s{808080}---\n", str);
}
ShowPlayerDialog(playerid, DIALOG_SUPPORT_LIST, DIALOG_STYLE_LIST, ""#TAG_SERVERKURZ" - Support Tickets:", str, "Auswählen", "Schließen");
return 1;
}
Alles anzeigen
//Edit:
Jaa ganz ruhig Leute xD
@PlayEasy
Verstehe dein Problem nicht, ja das ist doch schon die fertige Funktion?!
Die jetzt einfach nur verwenden
@ReborN
Denke das könntest du so einfach machen:
Er schreibt mir den Satz weiterhin im vollen Stück ohne einen Umbruch.
Also die ~n~ werden korrekt in den Text gesetzt.
Kannst du mal zeigen, wie du es genau verwendest?
Abend,
Wie gebe ich am besten wieder wenn Admin %s den Rang/Level von %s geändert hat?
Also gemeint ist Admin: %s hat den Rang von Spieler: %s zu %s geändert
Ich habe es versucht über eine else Funktion zu machen.
new p_ID;format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",PlayerInfo[pID][p_ID],PlayerInfo[playerid][pLevel]);}}
Leider kriege ich dort 1 Warning:
selfmade1.p(369): warning 213: tag mismatch
Wo hab ich den Fehler produziert?
Ich weiß das er sagt das pID eine Variable ist wenn ich nicht Falsch liege
Der befehlt sieht folgendermaßen aus:
CMD:setlevel(playerid,params[])
{
if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, 0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl zu nutzen!");
new string[128], pID, level; // 'level' ist eine neue Variable für [pLevel]
if(sscanf(params,"ui",pID,level))return SendClientMessage(playerid, 0x00FF00,"[Info] /setlevel [playerid][level]");
else
{
new p_ID;
format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",PlayerInfo[pID][p_ID],PlayerInfo[playerid][pLevel]);
}
PlayerInfo[pID][pLevel] = level;
format(string,sizeof(string),"Spieler ist Levelrank: %s",GetLevelRank(pID));
SendClientMessage(playerid, -1, string);
mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `level` = '%d' WHERE `id` = '%d'", level, PlayerInfo[pID][p_id]);
mysql_pquery(handle, string);
return 1;
}
Schreib es so:
CMD:setlevel(playerid,params[])
{
if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, 0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl zu nutzen!");
new string[128], pID, level, name[MAX_PLAYER_NAME];// 'level' ist eine neue Variable für [pLevel]
if(sscanf(params,"ui",pID,level)) return SendClientMessage(playerid, 0x00FF00,"[Info] /setlevel [playerid][level]");
GetPlayerName(playerid, string, MAX_PLAYER_NAME);
GetPlayerName(pID,name,MAX_PLAYER_NAME);
PlayerInfo[pID][pLevel] = level;
format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",string,name,GetLevelRank(pID));
SendClientMessage(playerid, -1, string);
format(string,sizeof(string),"Spieler ist Levelrank: %s",GetLevelRank(pID));
SendClientMessage(playerid, -1, string);
mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `level` = '%d' WHERE `id` = '%d'", level, PlayerInfo[pID][p_id]);
mysql_pquery(handle, string);
return 1;
}
Alles anzeigen
Im Endeffekt ist das nur der -- Operator.
Und das untere ist (-x) --
Also..was heißt Sinnvoll, kannst es halt verwenden
Ist zumindest toller als eine for Schleife.
Du kannst das zwar machen, aber es ist schlechter als eine for-Schleife.
Das liegt daran, wie der Code verarbeitet wird vom Compiler.
for-Schleifen wurden genau für so einen Zweck gemacht, also solltest du sie auch für diesen Zweck nutzen
Schreib es so:
CAlles anzeigenCMD:setlevel(playerid,params[]) { if(!PlayerInfo[playerid][pAdmin]) return SendClientMessage(playerid, 0x00FF00, "[ ! ] Du besitzt keine Rechte um diesen Befehl zu nutzen!"); new string[128], pID, level, name[MAX_PLAYER_NAME];// 'level' ist eine neue Variable für [pLevel] if(sscanf(params,"ui",pID,level)) return SendClientMessage(playerid, 0x00FF00,"[Info] /setlevel [playerid][level]"); GetPlayerName(playerid, string, MAX_PLAYER_NAME); GetPlayerName(pID,name,MAX_PLAYER_NAME); PlayerInfo[pID][pLevel] = level; format(string,sizeof(string),"Admin %s hat den Rang von Spieler: %s zu %s geändert",string,name,GetLevelRank(pID)); SendClientMessage(playerid, -1, string); format(string,sizeof(string),"Spieler ist Levelrank: %s",GetLevelRank(pID)); SendClientMessage(playerid, -1, string); mysql_format(handle, string, sizeof(string), "UPDATE `users` SET `level` = '%d' WHERE `id` = '%d'", level, PlayerInfo[pID][p_id]); mysql_pquery(handle, string); return 1; }
Danke für den Tipp / Hinweiß.
#Edit
Hab es jetzt über eine andere Funktion hin bekommen und es wird ohne Probleme wiedergegeben.
Guten Tag,
Wie kann man den Bildschirm weiß machen ?
Über ein Textdraw oder wäre es auch anders Möglich ?
Des weiteren suche ich ein Blitz Effekt ( z.b ein kleinen Ball oder so der Leuchtet ) den ich kurz Erstellen und löschen kann um ein Blitz Effekt zu erstellen