format(string,sizeof(string),"UPDATE `fraks` SET `f_Rank%d`='%s' WHERE `id`='%d'",rID,name,fInfo[frak][f_id]); //Tabellennamen anpassen
![]()
mysql_tquery(handle,string,"");
Unter die Zeile schreib mal:
print(string);
und dann sag mal, was er da ausgibt ![]()
format(string,sizeof(string),"UPDATE `fraks` SET `f_Rank%d`='%s' WHERE `id`='%d'",rID,name,fInfo[frak][f_id]); //Tabellennamen anpassen
![]()
mysql_tquery(handle,string,"");
Unter die Zeile schreib mal:
print(string);
und dann sag mal, was er da ausgibt ![]()
Steht denn schon was in der Tabelle mein ich?!
Müsste ja, da die Fraktion ja geladen wird ![]()
Printen tut er garnichts
Im mysql_log oder beim query print? ![]()
Printe dir mal den query den du sendest und dann für ihn evtl mal in phpmyadmin aus und dann schau ob es da funktioniert.
Oder du schaust mal in den mysql log. bzw aktivierst den mit mysql_log(ALL); unter OnGameModeInit und schaust, was er dir so alles ausgibt ![]()
Ein Screen evtl was in der Datenbank steht wäre dann auch gut ![]()
Wie sieht denn dein Code jetzt aus?
Der Rankname hat sich nicht verändert.
Wo?
In der Variable oder in der Datenbank?
Hast du auch das wo ich Kommentare gemacht habe überall angepasst?
Richtige Tabellenname und Fraktionsvariable und nutzt du auch das sscanf Plugin?
Achso, dann so:
ocmd:setfrank(playerid,params[])
{
new rID,name[50];
if(sInfo[playerid][Rank] < 11)return SendClientMessage(playerid,rot,"Du bist nicht der Leader");
if(sscanf(params,"is[50]",rID,name)) return SendClientMessage(playerid,rot,"Verwendung: /setfrank [Rank 1-12] [Name]");
if(rID <= 0 || rID > 12) return SendClientMessage(playerid,rot,"Der Rank muss zwischen 1-12 liegen!");
new frak = sInfo[playerid][Fraktion]; //Hier sInfo evtl anpassen, da ich nicht den Namen für die Frak kenne
format(fInfo[frak][fracEnum:(rID+8)],50,name);
format(string,sizeof(string),"UPDATE `fraks` SET `f_Rank%d`='%s' WHERE `id`='%d'",rID,name,fInfo[frak][f_id]); //Tabellennamen anpassen :)
mysql_tquery(handle,string,"");
format(string,sizeof(string),"Du hast den Name von Rank: %i in %s geändert.",rID,name);
SendClientMessage(playerid,grün,string);
return 1;
}
Alles anzeigen
Ja, einfach wenn der Server mal neugestartet werden sollte bzw mit einem restart Befehl vorher sowas wie:
SaveAllFraks() oder so aufrufen und in der Funktion speicherst du alle Fraktionen.
Wenn du auch das zu unsicher ist, kannst du auch direkt beim ändern ein Update Query ausführen oder alle 30min die Funktion aufrufen.
Das ist ja dir überlassen, wie man allgemein etwas speichert sollte dir bekannt sein, da du ja per MySQL laden kannst...
Mit einem UPDATE Query einfach alles speichern.
Also eine kurze Erklärung:
Es wäre gut möglich sowas mit einem switch zu machen. Im Spoiler ist das Beispiel dafür:
Aber wie du siehst, würde das ziemlich lang werden.
Man kann hier auch tricksen. Da bei deinem enum das erste Element in diesem Fall f_id die ID 0 hat und dann hochgezählt wird um 1 immer, hat also f_Rank1 die id 9.
Folglich könntest du es einfach so machen:
ocmd:setfrank(playerid,params[])
{
new rID,string[128];
if(sInfo[playerid][Rank] < 11)return SendClientMessage(playerid,rot,"Du bist nicht der Leader");
if(sscanf(params,"is[50]",rID,string)) return SendClientMessage(playerid,rot,"Verwendung: /setfrank [Rank 1-12] [Name]");
if(rID <= 0 || rID > 12) return SendClientMessage(playerid,rot,"Der Rank muss zwischen 1-12 liegen!");
new frak = sInfo[playerid][Fraktion]; //Hier sInfo evtl anpassen, da ich nicht den Namen für die Frak kenne
format(fInfo[frak][fracEnum:(rID+8)],50,string);
format(string,sizeof(string),"Du hast den Name von Rank: %i in %s geändert.",rID,string);
SendClientMessage(playerid,grün,string);
return 1;
}
Alles anzeigen
Damit der Trick auch in Zukunft immer funktioniert, einfach im Enum bitte jetzt wenn etwas neues hinzukommt unten anfügen ![]()
Wenn dir das zu unsicher ist, kannst du auch Methode 1 verwenden ![]()
Kann ich kurz das Enum zu fInfo sehen? ![]()
Wie speicherst du denn den RangNamen?
Bzw wie fragst du ab, wie der Rang Name heißt?
money ist eine Zahl und kein String, da strfind für strings ist und das eine Zahl kannst du darin nichts suchen.
Man muss hier keine Unterscheidung machen, kannst es einfach so schreiben:
stock GivePlayerMoneySave(playerid,money)
{
PlayerInfo[playerid][pCash] += money;
GivePlayerMoney(playerid, money);
return 0;
}
Denn wenn es negativ ist, passiert automatisch x + (-1) = x - 1
Somit funktioniert das auch automatisch mit negativen Zahlen ![]()
Könnt ihr mir etwas düsteres empfehlen?
Um meinen inneren Troll loszuwerden hier etwas düsteres:
Wers erkennt und versteht kann ja mal liken, wer nicht, sowieso ![]()
Aber was genau meinst du mit "dunkel"?
Eher Religiös so mit Dämonen, Totenköpfen, Schwertern?
Oder einfach nur dunkel in der Farbe?
Und eher klein oder Groß?
Es sei noch gesagt, sei vorsichtig wo und was du kaufst, denn wenn es deiner Perle net gefallen sollte, haste n Problem wenn du es nicht wieder umtauschen kannst, eventuell solltest du über etwas subtileres im Bereich der Romantik nachdenken und ihr dann noch einen Gutschein (Hier auch vorsichtig, viele Frauen wollen das nicht, weil es zu unpersönlich ist, andere finden das perfekt) schenken, damit sie selbst schauen kann ![]()
Am Besten mit Vertrag, wir sind hier schließlich immer noch in Deutschland.
Direkt neben Breadfish Mittelsmann auch Breadfish Schläger Notar eröffnen ![]()
UpdateDynamic3DTextLabelText
Also hier nutzt du eine Dynamic Funktion und erstellst es mit Create3DTextLabel. Da stimmt was nicht...
Den Rest haste ja so gelassen, wie ich es gezeigt hatte..
zu:
Und wieso?
Ich meine, man erstellt ja nicht für jeden Spieler ein Taxi, sondern es gibt nur 7...
Negativ,
Ja negativ..du hast irgendwie nicht gelesen was ich geschrieben habe und hast keine deklarationen oder sonst was geändert...
Der Code beim Attachen ist halt falsch...
Du arbeitest irgendwie nicht mit dem Array von der globalen Variable Taxi, so wie ich es gezeigt hatte... ![]()
Da musste die Variable global nutzen:
new Text3D:taxi[sizeof(pTaxi)];
//Dann in der Schleife
taxi[i] = Create3DTextLabel(...);
Attach3DTextLabel(taxi[i], ..);
und dann ändern mit:
Dann lade mal crashdetect, der sagt dir, was der Fehler ist ![]()
Das hier reicht, da sscanf dir immer die ID gibt, auch wenn du den Namen eingibst:
CMD:id(playerid, params[])
{
new pID, string[128], name[MAX_PLAYER_NAME];
if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00FF00}/id [SpielerID/Name]");
if(IsPlayerConnected(pID))
{
format(string, sizeof(string), "ID: %d, Name: %s, Level: %d, Ping: %d", pID, GetName(pID), Spieler[pID][pLevel], GetPlayerPing(pID));
SendClientMessage(playerid, COLOR_GREY, string);
return 1;
}
return SendClientMessage(playerid, COLOR_GREY, "Kein Spieler gefunden.");
}
Alles anzeigen