Ich weiß
Hast du eventuell 2x mysql_log oder sowas in deinem Skript?
Hast du es auch wirklich compilt...usw
Es muss einen Log geben, sonst würde das heißen, dass du kein MySQL nutzt ![]()
Ich weiß
Hast du eventuell 2x mysql_log oder sowas in deinem Skript?
Hast du es auch wirklich compilt...usw
Es muss einen Log geben, sonst würde das heißen, dass du kein MySQL nutzt ![]()
Es gibt dann eine extra Datei bei deinem Server_Log, die heißt mysql_log ![]()
und im MySQL Log steht auch nichts.
Musst natürlich auch unter OnGameModeInit das hier schreiben: mysql_log(LOG_ALL);
Alles anzeigenfor(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && PlayerInfo[i][pLoggedIn])
{
SaveUserStats(i);
}
}
Hmm das was ich im Admin Befehl geschrieben hatte, schreibs mal so:
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && PlayerInfo[i][pLoggedIn])
{
SaveUserStats(i);
PlayerInfo[i][pLoggedIn] = 0;
}
}
Und dann probiere es nochmal.
Wenn es dann immer noch nicht geht, lass mal den mysql_log mitlaufen und schau dann da mal rein.
Und:
Wie sieht denn die Funktion: SaveUserStats aus? ![]()
Hab ich tatsächlich schon und verwende schon:
Ahh, das freut mich ![]()
Aber das war auf das hier z.B. bezogen:
if(PlayerInfo[playerid][pLoggedIn] == 0) return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht eingeloggt.");
Hatte ja gezeigt, wie man das nur noch 1x schreiben muss xD
Der /restart Befehl:
Du Restartest den Server, bevor du SaveUserStats verwendest.
Und du speicherst auch nur für den, der den restart Befehl eingibt, du Egoist ![]()
Ich empfehle dir sowas:
ocmd:restart(playerid, params[])
{
if(!isAdmin(playerid, 4)) return SendClientMessage(playerid, COLOR_GREY, "Diesen Befehl darfst du nicht benutzen!");
if(PlayerInfo[playerid][pLoggedIn] == 0) return SendClientMessage(playerid, COLOR_GREY, "Du bist nicht eingeloggt.");
new nachricht[128];
format(nachricht, sizeof(nachricht), "[Server-Restart] %s %s hat den Server neugestartet, wir bitten um einen Moment Geduld!", TeamNames[PlayerInfo[playerid][adminlevel]], SpielerName(playerid));
SendClientMessageToAll(COLOR_GREEN, nachricht);
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && PlayerInfo[i][pLoggedIn])
{
SaveUserStats(i);
}
}
//Bisschen Zeit lassen für die Datenbank
SetTimer("@restart",1000,0);
return 1;
}
@restart();@restart()
{
SendRconCommand("gmx");
return 1;
}
Alles anzeigen
Und schau mal hier rein: Schneller & strukturierter skripten Eventuell hilft das ein wenig ![]()
Ich finde irgendwie den Fehler nicht
Du packst random Arrays in dein Query.
Wolltest du evtl ein %s nutzen bei den Spawn_Out[0] oder hast du wirklich die Spalte so genannt? ![]()
Dann probier mal sowas: `Spawn_Out[0]`
anscheinend sind das doch nicht die schwarzen schafe
In der Log Datei steht doch, wieso es scheitert, hast dir das eigentlich mal angeschaut? ![]()
[08/25/18 14:09:56] [DEBUG] retrieved and pushed value 'UPDATE `user` SET `Level` = '1', `Money` = '115', `AdminLevel` = '0', `DonateRank` = '0', `UpgradePoint` = '0', `Registered` = '1', `Sex` = '1', `Age` = '27', `OriginHerkunft` = '1', `Muted` = '0', `Bank` = '0', `Deaths` = '1' WHERE `Username` = 'Tstuser01gg''
[08/25/18 14:09:56] [ERROR] error #1054 while executing query "UPDATE `user` SET `Gun7` = '0', `Gun8` = '0', `Gun9` = '0', `Gun10` = '0', `Gun11` = '0', `Gun12` = '0', `Ammo1` = '0', `Ammo2` = '0', `Ammo3` = '0', `Ammo4` = '0', `Ammo5` = '0', `Ammo6` = '0', `Ammo7` = '0', `Ammo8` = '0', `Ammo9` = '0', `Ammo10` = '0', `Ammo11` = '0', `Ammo12` = '0' WHERE `Ùsername` = 'Tstuser01gg'": Unknown column 'Ùsername' in 'where clause'
Etwas stimmt mit deinem String, wo du den Spielernamen speicherst.
Und du solltest deine %d überprüfen, da scheint ein Fehler zu sein...
Unterlasse doch bitte vollzitate
Aufruft ? Was ist das xD
Aufruf...
denke mal die letzten beide
..ja das sage ich seid 3 Posts...printe das doch einfach mal und prüfe es dadurch ![]()
Brauchst du nicht, es reicht ja, wenn du noch ein print jeweils zu dem Aufruft packst ![]()
Denn ich glaube, der letzte Codeblock, wo du die letzten beiden Querys drinnen hast, wird einfach nicht aufgerufen.
Kriege nur 6 "wurde abgerufen" nachrichten
Keine Ahnung, was du da machst, wo sind denn die prints dazu?
Und bei dem letzten hast du das query auskommentiert, da kann also nichts kommen und bei dem anderen, wird dieser Codeblock denn überhaupt aufgerufen?!
OnPlayerDeath
Ein Fehler tritt schonmal unter OnPlayerDeath.
Du prüfst nicht, ob killerid != INVALID_PLAYER_ID ist.
Und dadurch kommt es zu Fehlern in einem Array.
Bei deinen Querys sieht doch alles gut aus:
[INFO] Callback successfully executed.
//Edit:
Gibt es eine Möglichkeit bei einem Array der ( Primary ID ) einen Wert hinzuzufügen ohne sowas z.b
Ja generell schon, aber bei genau so einer Art von Array, ist das nicht ohne weiteres möglich.
Aber ist ja auch nicht schlimm, da das ja nur 1x unter OnGameModeInit aufgerufen wird und gut ist ![]()
Ahh ja, wird wohl ein realistic Roleplay Server ![]()
Wie auch immer man wem in den Arsch kacken will.
Aber anyway um dir das zu machen, müssen wir erst ein paar Dinge wissen:
der server ist dann abgestürzt nachdem ich ihn velrassen habe
Dann lade mal das crashdetect Plugin, das sagt dir dann genau, wieso er gecrasht ist ![]()
Hab den string query mal auf 1000 gesetzt
Kann man machen, aber ich denke 512 hätten fürs Erste auch gereicht ![]()
Ich hatte da mal was geschrieben gehabt: Easy Saving
Damit kannst du enums einfach speichern.
Der nimmt direkt die Werte aus dem enum und speichert die.
In dem Thread ist ja alles beschrieben ![]()
Die Frage ist, was genau willst du machen und was genau soll "dynamisch" sein?
Zeig uns mal die ganze Fehlermeldung, also mit Zeilen und dann zeige uns bitte auch die Zeilen ![]()
return eingebaut
Damit zerstört du aber die Funktion der Schleife, deshalb sagte ich break. (Also für andere Spieler geht dann die Schleife evtl nicht mehr.)
public TachoTimer()
{
for(new i=GetPlayerPoolSize(),string[32]; i!=-1; i--)
{
if(!IsPlayerConnected(i) || !IsPlayerInAnyVehicle(i)) continue;
format(string,sizeof string,"Tank: %i L",GetVehicleTank(GetPlayerVehicleID(i)));
PlayerTextDrawSetString(i,Tacho_Tank[i],string);
}
return 1;
}
stock GetVehicleTank(veh)
{
for(new v; v<MAX_VEHCILES; v++)
{
if(playerCar[v][p_car_id_x] == veh) return floatround(playerCar[v][p_car_fuel],floatround_round);
if(fcarInfo[v][fcar_id_x] == veh) return floatround(fcarInfo[v][fcar_fuel],floatround_round);
if(ahCarInfo[v][ah_car_id_x] == veh) return floatround(ahCarInfo[v][ah_car_fuel],floatround_round);
}
return -1;
}
Alles anzeigen
Auslagern hilft auch hier und hält den Code strukturierter.
Hier mal ein Tutorial, was ich geschrieben hatte: Schneller & strukturierter skripten
Du solltest mal sowas wie break benutzen...
Ansonsten rattert der dir da ja eine Schleife mit 500*MAX_CARS*MAX_CARS*MAX_CARS durch...und das halt eben alle paar Millisekunden, je nach timer-intervall.
Das ist ja jetzt nicht so das, was du eigentlich willst..
Es ist an sich nicht sehr schlau den Tank für jedes Fahrzeug in nem anderen Array zu speichern ![]()
Vielleicht sollte man das vereinheitlichen.
Zudem deklariert man keine Variablen in Schleifen...so muss der nämlich immer und immer wieder alles neu allozieren.
Man kann das auch alles kürzen und eleganter schreiben, das werd ich dir machen, wenn du mir sagst wie groß jeweils:
playerCar, fcarInfo und ahCarInfo sind.
Also wie hast du die deklariert?