Den ganzen Code bitte, nicht nur die Textdraws.
Dann ja.
EDIT:
Erledigt. Das Array war zu klein.
Den ganzen Code bitte, nicht nur die Textdraws.
Dann ja.
EDIT:
Erledigt. Das Array war zu klein.
Nochmal zu meiner Frage, ich glaube die ist in dem ganzem Code oben untergegangen:
Ich hätte gerne den PayDay normal verbucht, habe dazu meinen stock "PayDay"
Soweit so gut, nun hätte ich aber gerne, wenn der spieler /lastpayday eingibt, dass er seinen letzten PayDay ausgegeben sieht. Muss ich das alles in variablen zwischenspeichern jeden Wert oder geht das noch anders ?
Wenn du nur den letzten PayDay-Wert anzeigen lassen willst, dann kannst du das relativ einfach mit einem Spielerarray machen:
Dort wo dem Spieler das PayDay-Geld gegeben wird:
Und dann der Befehl:
Hi ich habe ein Problem mit meinem PawnStart.. Der PawnStart stellt keine AMX Datei her weiß einer woran das liegt?
Kommt denn irgendeine Fehlermeldung? Bzw. bei pawno musst du auf den blauen Pfeil klicken damit die amx erstellt wird.
Ich habe noch selbst eine Frage:
Ich habe den Stock:
stock PayDayCheck(playerid)
{
new str[128];
SendClientMessage(playerid,mgrün,"[MSG]-------------- //PayDay// --------------");
SendClientMessage(playerid,mgrün,"[MSG]: Du hattest gerade deinen PayDay! Gib die Zahl am Bildschirm ein um ihn zu bestätigen!");
randpdn[playerid] = random(100);
format(str,sizeof(str),"%d",randpdn[playerid]);
GameTextForPlayer(playerid,str,7000,6);
paydaytimer = SetTimerEx("PayDayCheckTimer",20000,0,"d",playerid);
return 1;
}
Alles anzeigen
Aber ich bekomme den GameText nicht angezeigt?
Siehst du die SendClientMessages?
Ja ich sehe die SendClientMessages.
Und:
Ich habe es jetzt so geschrieben um zu schaun woran es liegt:
stock PayDayCheck(playerid)
{
new str[128];
SendClientMessage(playerid,mgrün,"[MSG]-------------- //PayDay// --------------");
SendClientMessage(playerid,mgrün,"[MSG]: Du hattest gerade deinen PayDay! Gib die Zahl am Bildschirm ein um ihn zu bestätigen!");
randpdn[playerid] = random(100) + 1;
format(str,sizeof(str),"%d",randpdn[playerid]);
GameTextForPlayer(playerid,str,7000,6);
SendClientMessage(playerid,iblau,str);
printf("Zufallszahl: %d",randpdn[playerid]);
paydaytimer = SetTimerEx("PayDayCheckTimer",30000,0,"d",playerid);
return 1;
}
Alles anzeigen
Und ich sehe sowohl die ClientMessage die mir die Zahl ausgibt, sowie den Print in der Konsole und zwar mit der richtigen Zahl.
Habe gerade nichts verändert außer die Zeile neu geschrieben und den Server neu gestartet, und plötzlich klappt es ._. .... Trotzdem danke.
hey warum baut mysql keine verbindung auf?
[21:51:12] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on '1**.7*.1**.6*' (10060)
Hallo, habe eine kurze Frage:
Ich habe den Code geschrieben um die Fraktionsgehälter Dynamisch zu ändern:
new rang,gehalt;
if(sscanf(params,"dd",rang,gehalt))return SCM(playerid,frot,"[FEHLER]: /changesalary [Rang] [Gehalt]");
format(str,sizeof(str),"gehalt%d",rang);
FI[frakid][str] = gehalt;
Meine Frage ist nur, ob das so funktioniert? Oder muss ich jetzt einzeln Abfragen was er als Rang eingegeben hat und es dann damit setzen?
Herauskommen soll hierbei, wenn er z.B /changesalary 1 100 eingibt, dass dann unten das gesetzt wird;
FI[frakid][gehalt1] = 100;
Wenn du das FI beibehalten willst, brauchst du ein 3-Dimensionales Array, einen String in einem Array Index zu schreiben macht auch keinen Sinn.
Ich würde für die Gehälter ein zweites Array erstellen.
new fSalary[MAX_FACTIONS][MAX_RANKS];
zB dann für Fraktion 0, Rang 5 das Gehalt auf 1000 setzen:
fSalary[0][4] = 1000;
new rang, gehalt;
new faction = pInfo[playerid][Fraktion];
if(sscanf(params, "dd", rang, gehalt)))return SCM(blablub);
fSalary[faction][rang] = gehalt;
Nein nein, danke das passt dann schon, eine Frage habe ich noch:
Ich lasse meine Fraktionen über diesen Stock speichern:
stock SaveFraks()
{
new query[500],id,name,kasse,gehalt[5],rname[5],msg;
for(new i=0;i<sizeof(FI);i++)
{
id = FI[i][f_id];
name = FI[i][f_name];
kasse = FI[i][f_kasse];
gehalt[0] = FI[i][gehalt1];
gehalt[1] = FI[i][gehalt2];
gehalt[2] = FI[i][gehalt3];
gehalt[3] = FI[i][gehalt4];
gehalt[4] = FI[i][gehalt5];
rname[0] = FI[i][rname1];
rname[1] = FI[i][rname2];
rname[2] = FI[i][rname3];
rname[3] = FI[i][rname4];
rname[4] = FI[i][rname5];
msg = FI[i][frakmsg];
mysql_format(db_handle,query,sizeof(query),"UPDATE fraktionen SET name = '%s', kasse = %d, gehalt1 = %d, gehalt2 = %d, gehalt3 = %d, gehalt4 = %d, gehalt5 = %d, rname1 = '%s', rname2 = '%s', rname3 = '%s', rname4 = '%s', rname5 = '%s', frakmsg = '%s' WHERE id = %d",name,kasse,gehalt[0],gehalt[1],gehalt[2],gehalt[3],gehalt[4],rname[0],rname[1],rname[2],rname[3],rname[4],msg,id);
mysql_pquery(db_handle,query);
}
return 1;
}
Alles anzeigen
Den lasse ich unter OnGameModeExit aufrufen, aber es speichert nicht, im Mysql log steht nichtmal ein Error, also befürchte ich, dass der Stock nichteinmal aufgerufen, ausgeführt wird.
A) Die Werte der Variablen sind alle 0 - auch in der DB
B) Du schließt die Datenbank Verbindung nicht oder gar vor dem Aufrufen der Funktion
C) Bitte Logs posten ![]()
Deine Werteübergabe ist falsch, du gibst Arrays in eine Normale Variable, somit wird nur ein Zeichen, welches keinen Sinn macht, gespeichert.
Achte auch darauf, dass OnGameModeExit nicht aufgerufen wird, wenn du die Konsole nur schließt ( X ).
Mache es so:
stock SaveFraks()
{
new query[512];
for(new i=0;i<sizeof(FI);i++)
{
mysql_format(db_handle,query,sizeof(query),"UPDATE fraktionen SET name = '%e', kasse = %d, gehalt1 = %d, gehalt2 = %d, gehalt3 = %d, gehalt4 = %d, gehalt5 = %d, rname1 = '%e', rname2 = '%e', rname3 = '%e', rname4 = '%e', rname5 = '%e', frakmsg = '%e' WHERE id = %d",
FI[i][f_name],FI[i][f_kasse],FI[i][gehalt1],FI[i][gehalt2],FI[i][gehalt3],FI[i][gehalt4],FI[i][gehalt5],FI[i][rname1],FI[i][rname2],FI[i][rname3],FI[i][rname4],FI[i][rname5],FI[i][frakmsg],FI[i][f_id]);
mysql_pquery(db_handle,query);
}
return 1;
}
Alles anzeigen
Sollte es weiterhin nicht klappen, lasse dir mit einem print das Query ausgeben und schaue in den MySQL Log, ob sich dort Fehler befinden.
Poste die beiden Logs gegebenenfalls, aber bitte in einem neuen Thread, da dieser Thread für kleine Scriptingfragen ist, und MySQL Debugging gehört da bei Weitem nicht mehr dazu.
Yo, hab mal ne kleine Frage:
Möchte mal mit Timern arbeiten, sprich eine ausgewählte Funktion soll erst nach einer bestimmten Zeit ausgeführt werden. Habe da mal bisschen in Wiki nachgelesen und SetTimerEx entdeckt.
Nur verstehe ich nicht was die erste Funktion sein soll die man angeben muss.
Habe da mal ein Testbefehl erstellt und hatte vor den Spieler zu freezen, Skin setzen und nach 5 Sekunden zu entfreezen.
CMD:test123(playerid,params[])
{
TogglePlayerControllable(playerid,0 );
SetPlayerSkin(playerid, 300);
TogglePlayerControllable(playerid,1 );
SetTimerEx("TogglePlayerControllable", 5000, false, "i", playerid);
return 1;
}
Ich weiß das ist falsch, wie mach ich es richtig?
CMD:test123(playerid,params[])
{
TogglePlayerControllable(playerid,0 );
SetPlayerSkin(playerid, 300);
SetTimerEx("UnfreezePlayer", 5000, false, "i", playerid);
return 1;
}
forward UnfreezePlayer(playerid);
public UnfreezePlayer(playerid)
{
TogglePlayerControllable(playerid, 1);
return 1;
}
Alles anzeigen
hey wieso connected mein mysql nicht
Mache einen neuen Thread auf, und poste dort den Server Log, sowie den MySQL Log.