wie ich sehe liegt an der streamer
Richtig, also füge das streamer Plugin ein.
Desweiteren stimmt das MySQL Plugin nicht mit deiner MySQL Include überein, das auch mal checken ![]()
wie ich sehe liegt an der streamer
Richtig, also füge das streamer Plugin ein.
Desweiteren stimmt das MySQL Plugin nicht mit deiner MySQL Include überein, das auch mal checken ![]()
Das kann so nicht direkt zugewiesen werden.Mache es so:
strcat(PlayerInfo[pID][pReason], reason, 40);
Das stimmt nicht, hier könnte es jetzt zu einem Fehler kommen.
Wie hast du denn im enum pReason definiert?
Es müsste eigentlich mit pReason[40] im enum stehen, dann kannst du es auch direkt zuweisen.
Wenn aber nur Beispielsweise pReason da steht, kommt genau der Fehler, den du jetzt auch hast. Da hilft dir auch kein strcat, dann ist zwar der Fehler weg, aber es wird halt nur der erste Buchstabe vom Wort in die Variable gepackt...
und das bringt dir halt auch wenig ![]()
Wieso hast du es nicht so gemacht, wie ich es gezeigt hatte?
kommt eine Fehlermeldung, dass der Befehl nicht existiert.
Lade sowas am Besten auf ein leeres Skript.
Ansonsten könnten da die CMD-Prozessoren sich gegenseitig in den Weg kommen ![]()
Wenn es notwendig ist, dass es auf dem main Skript lädt, dann kommste nicht drum herum, als dir anzuschauen, wer was wo blockiert ![]()
Wäre es bei meiner anderen Methode zwar auch nicht, aber dann schreib es so:
PS: Jetzt solltest du es außerhalb von einer Funktion schreiben, ansonsten würde es immer und immer wieder aufgerufen werden:
Aber dein Code funktioniert nicht
Doch er funktioniert aber player ist nicht definiert.
setInterval((player) => mp.trigger('playerAutoSave', player), 8000, HIERMUSS_PLAYERID_REIN);
Da muss halt eine Spielerid rein.
Das heißt du kannst Beispielsweise setInterval unter OnPlayerConnect (bzw dem GTA V äquivalent) packen und dann für den Spieler laufen lassen und unter OnPlayerDisconnect clearInterval nutzen um den Timer wieder zu löschen.
Oder du loopst durch alle Spieler.
Weiß ja nicht genau, was du vor hast ![]()
Natürlich kannst du aber das nicht irgendwo random hinpacken, da dann player nicht definiert ist.
Nein...
Also schau mal, du lässt das so:
mp.events.add("playerAutoSave", (player) => {
player.loggedInAs = "";
gm.mysql.handle.query("UPDATE `account` SET money = ?, posX = ?, posY = ?, posZ = ? WHERE `username` = ?", [player.money, player.position.x, player.position.y, player.position.z, player.name], function(err,res){
if(!err){
console.log(`Account saved: ${player.name}`)
} else (
console.log("ERROR: " + err)
)
});
});
Und dann machst du sowas:
setInterval((player) => mp.trigger('playerAutoSave', player), 8000, player);
Du musst das ja dann für den Spieler aufrufen.
Hab aber noch nie was für GTA V programmiert, ist jetzt reine Code-Logik.
Jetzt addest du alle 8 Sekunden das Event "playerQuit".
Das willst du ja nicht, du willst ja den Spieler speichern oder?
Die Lambda Notation bringt dich glaube ich etwas durcheinander.
Aber (player) => ist eigentlich nichts anderes als:
function (player) {
Und nur die, willst du im Interval glaube ich aufrufen.
Wie hast es denn eingebaut? ![]()
Brauche dann den Waffennamen von der ID 24 (ist die Deagle)
Bittschön: [wiki]GetWeaponName[/wiki]
Die Funktion heißt: https://www.w3schools.com/jsref/met_win_setinterval.asp
Ja, die gibt es auch bei Server-seitigem JS
Hab's geschafft
Okay, jup aber dort wird kein Query angezeigt, das bedeutet es wird keins verschickt...
Setz mal ein print über das Query und schau, ob das ausgeführt wird.
Oder sollte das query jetzt schon ausgeführt werden oder hast du mir nur den Log nach dem Server Start gegeben?! ![]()
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]`