[jTuT] MySQL R41-4 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Bei OnGameModeExit habe ich nur das mysql_close, nichts weiter.


    Und die einzige weitere SafeFunktion bzw Mysql Funktion, die nicht von dir ist, ist hier vorzufinden.


    Jedoch hat diese Funktion nichts damit zu tun dass es nicht funktioniert, meine Überlegung war, dass die Sae Funktion nicht richtig funktioniert, je mehr Dinge du nachher übergibst.
    Weil wenn der Server alles speichern soll, macht er das ja nicht, aber laden, check usw funktioniert ja. Daher wundert mich das.


    lg

  • Setze bitte mal nach dem Query in der Speicher-Funktion einen "print" hin und lass dir das Query ausgeben.
    print(query);
    Poste diesen Print dann bitte mal.


    Zwecks der Warnung:
    Das sieht so aus als wird der Server vorher beendet (mysql_close) und erst danach will das Plugin das Query ausführen. Du gibst ja in dem Befehl die Millisekunden an. Gebe da mal 5000 an.


  • [13:27:31] [WARNING] CMySQLConnection::Disconnect - no connection available
    [13:27:31] [WARNING] CMySQLConnection::Disconnect - no connection available

  • Code
    [13:39:22] Number of vehicle models: 0
    [13:39:41] [connection] 127.0.0.1:64618 requests connection cookie.
    [13:39:42] [connection] incoming connection: 127.0.0.1:64618 id: 0
    [13:39:43] [join] KazutoSensei has joined the server (0:127.0.0.1)
    [13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'
    [13:40:24] Server wird beendet.
    [13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'
    [13:40:36] <-| [MySQL] Verbindungsaufbau...
    [13:40:36] <-| [MYSQL] Verbindung zur Datenbank wurde erfolgreich hergestellt!
    [13:40:36]

    Er speichert 2 mal, aber warum?

  • Versuche es so:
    ocmd:restart(playerid, params[]){
    new str[128], ms, second, minute;
    if(pData[playerid][pAdminLevel] < 4) return SendClientMessage(playerid, COLOR_RED, "Du darfst diesen Befehl nicht nutzen!");
    if(sscanf(params, "i", ms)) return SendClientMessage(playerid, COLOR_LGREY, "Nutze: /changepw [Zeit in Minuten(60000 = 1 Minute)]");
    minute = (ms / 1000)/60; second = ms / 1000;
    format(str, sizeof(str), "Der Server wird in %i Minuten und %i Sekunden neugestartet. Außerdem werden alle eure Daten gespeichert.", minute, second);
    SendClientMessageToAll(COLOR_ORANGE, str);
    for(new i = 0; i < MAX_PLAYERS; i++){
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    Save_Player_Data(i);
    }
    printf("Starte Server in %d ms neu.", ms);
    SetTimerEx("Server_Restart", ms, false, "i", playerid);
    return 1;
    }


    Bitte gebe bei dem Befehl "5000" ein. Laut dem Log wurde "Server_Restart" sofort ausgeführt.

  • Also den Fehler fürs speichern habe ich gefunden.
    Warum er jedoch 2 mal speichert, dafür könnte es nur eine Erklärung geben.
    Bei restart werden alles disconnected, dementsprechen speichert er vorher wegen der for-Schleife
    und danach wegen dem Disconnect.


    Das Warning kann ich mir nicht erklären, dass bleibt auch weiterhin vorhanden.
    Aber das speichern funktioniert jetzt, der Fehler lag am Befehl /setmoney ^^.


    Sollten nochmal Probleme auftreten melde ich mich Konversation bei dir.
    Um das Warning wegzubekommen, habe ich aber noch keine Lösung.


    MfG

  • Warum er jedoch 2 mal speichert, dafür könnte es nur eine Erklärung geben.
    Bei restart werden alles disconnected, dementsprechen speichert er vorher wegen der for-Schleife

    Ja, der GMX ruft OnPlayerDisconnect für alle Spieler auf.
    Prinzipiell würde ich mich daran aber nicht stören lassen, besser es speichert doppelt, als gar nicht.



    Um das Warning wegzubekommen, habe ich aber noch keine Lösung.

    Poste bitte den Server Log mit dem Print den ich dir noch in den Befehl eingebaut habe.
    Da der GMX sofort ausgefürt wurde als der Befehl eingegeben wurde kommt die Warnung, da keine Verbindung mehr vorhanden war.

  • Ja, der GMX ruft OnPlayerDisconnect für alle Spieler auf.Prinzipiell würde ich mich daran aber nicht stören lassen, besser es speichert doppelt, als gar nicht.



    Poste bitte den Server Log mit dem Print den ich dir noch in den Befehl eingebaut habe.Da der GMX sofort ausgefürt wurde als der Befehl eingegeben wurde kommt die Warnung, da keine Verbindung mehr vorhanden war.

    GMX wird nicht sofort ausgeführt, ich gebe nur recht wenig ms ein, wenn ich 60000 mache dauert das wirklich 1 Minute ^^.
    Nur ums schnell zu testen habe ich immer 10000 genommen oder 5000.

  • Laut dem Log wurde es sofort ausgeführt:

    Zitat

    [13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'
    [13:40:24] Server wird beendet.
    [13:40:24] UPDATE accounts SET level = '1', money = '10000', adminlevel = '4', banned = '0' WHERE id = '1'


    Die erste Zeile ist die Speicherung vom Befehl.
    Die zweite Zeile ist der Print aus dem public, das der Timer aufruft (keine Sekunde vergangen).
    Die dritte Zeile ist die Speicherung durch den GMX (OnPlayerDisconnect).


    Zwischen 1 und 2 muss etwas mehr Zeit liegen, damit das erste Query ausgeführt werden kann => Keine Warnung mehr (1. Warnung).
    Dann musst du bei dem public Server_Restart eine globale Variable auf "true" setzen, und diese fragst du dann bei OnPlayerDisconnect ab:
    if(serverInRestart == true) return 1;
    Das verhindert dann, dass doppelt gespeichert wird und somit, dass die zweite Warnung auftritt.

  • Beitrag von KazutoSensei ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Ich versuche erstmal weiter und melde mich zu einen späteren Zeitpunkt per PN nochmal. ().
  • hInfo[h][hi_x] = 13.3828;


    mysql_format(handle,query,sizeof(query),"INSERT INTO häuser (BesitzerID, Besitzer, X, Y, Z, A, Interior, Preis, Level, iX) VALUES ('%d', '%s', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%f')",hInfo[h][h_ownid],hInfo[h][hOwner],hInfo[h][h_x],hInfo[h][h_y],hInfo[h][h_z],hInfo[h][h_a],hInfo[h][h_int],price,level,hInfo[h][hLock],hInfo[h][hi_x]);mysql_pquery(handle,query);


    Wird so in der Tabelle gespeichert: 1,4013E-45
    MySQL Log:
    [02:34:27] [DEBUG] mysql_format - connection: 1, len: 1200, format: "INSERT INTO häuser (BesitzerID, Besitzer, X, Y, Z, A, Interior, Preis, Level, iX) VALUES ('%d', '%s', '%f', '%f', '%f', '%f', '%..."[02:34:27] [DEBUG] mysql_pquery - connection: 1, query: "INSERT INTO häuser (BesitzerID, Besitzer, X, Y, Z, A, Interior, ", callback: "(null)", format: "(null)"[02:34:27] [DEBUG] CMySQLQuery::Execute[] - starting query execution[02:34:27] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 50.642 milliseconds[02:34:27] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving


    es geht nur um die letzte Koordiante


    Tabellen Typ ist float

  • Ich bin schon ein gutes Stück weiter, und habe nur noch ein Problem.
    Die Floated werden beim speichern gerundet, so dass sich die Koordinaten leicht verfälschen...
    Wie behebe ich das?

  • Also da viele das gleiche Problem haben, unter anderem auch ich, habe ich jetzt herausgefunden, dass bei UPDATE problematische fehler drin sind!


    Code
    format(Query, sizeof(Query), "UPDATE interior SET Erstellt=%b, Aktiv=%b, Name='%s' WHERE ID=%i",
    		Interior[interiorid][iErstellt], Interior[interiorid][iAktiv], Interior[interiorid][iName],
    		interiorid);
    	mysql_function_query(MySQL_DB, Query, false, "", "");

    Wichtig dabei ist, dass NUR strings mit den ' ' abgespeichert werden. Bei allen anderen arten von variablen hat es bei mir Fehler verursacht...

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen