Beiträge von Ap0llinaris

    Hallo.


    Ich wollte gerade eben mein XAMPP anschmeißen damit ich kurz auf die MySQL Datenbank (für SAMP) kann um etwas nachzuschauen/hinzuzufügen (Häuser System..)


    Wenn ich XAMPP starte kommen folgende Nachrichten:

    Code
    XAMPP Control Panel Version 2.5 (16. March, 2011)
    Windows 5.1 Build 2600 Platform 2 Service Pack 3
    Current Directory: c:\xampp
    Install(er) Directory: c:\xampp
    Status Check Ok


    So wenn ich bei MySql nun auf "Start" drücke erscheint folgendes:

    Code
    Busy...
    MySql started [Port 3306]


    Es erscheint dann auch eine Meldung neben MySql mit "Running" in Grün, was aber nach ca. 3 Sekunden verschwindet.


    Kann mir jemand helfen?


    //Edit


    Bei Status kommt folgendes:

    Code
    mysql State 0 Service 0 Start 0 Thread 0 0p 0 Port 3306


    Kann jemand helfen??

    Ankündigung


    Guten Tag meine lieben Zuschauer und eventuell Zuschauerinnen!


    Die Tutorial Reihe geht ab heute weiter. Mein Headset war einige Tage defekt und habe ein neues von Logitech bekommen. (Logitech ClearChat Style)


    So und das heutige Thema ist die Account Speicherung. (Endlich)


    Das Video lädt derzeit noch hoch und wird gleich erstmal noch bearbeitet also bitte geduldet euch noch ein bisschen. ;)


    //Edit
    Das Video bearbeitet nun. Mal schauen ob dies nun lange dauern wird. Hoffentlich nicht so wie letztesmal, als es locker 2-3 Stunden bearbeitet hat. :huh:


    //Edit-2


    Der Upload ist leider bei 99% stehen geblieben und es lies sich nichtsmehr machen. Nichtmal ein fortfahren des Upload.
    Das Video wird nun neu hochgeladen und ist bei 27%. Stand: 19:23


    //Edit-3


    Die neue Folge ist nun online und im ersten Beitrag zu finden.
    Viel Spaß. ;)

    Nein eigentlich nicht.


    Das mit dem Ingame oder Console ist egal.


    Entweder ich gmx'e zwei mal im spiel oder zwei mal in der console. beim zweitenmal klappts immer. ;)
    //e


    keiner ne idee?

    Hab die Funktion im Filterscript so verwendet:



    public OnRconCommand(cmd[])
    {
    if(strcmp(cmd, "gmx", true) == 0)
    {
    for(new i=0;i<GetMaxPlayers();i++)
    {
    CallRemoteFunction("SavePlayer", "%i", i);
    }
    }
    return 1;
    }


    Funktioniert trotzdem nicht.
    Nur wenn ich mich das zweite mal einlogge und dann einen GMX mache. Diesen GMX mache ich halt jetzt nur, damit ich sicher gehen kann falls der Server ausfällt dass nix passiert. ;)

    Das heißt:
    public IsPlayerLoggedIn(playerid)
    {
    if(Spieler[playerid][pLoggedIn] == 1)
    {
    return 1;
    }
    return 0;
    }
    In meinem Gamemode
    und im Filterscript muss ich dann wo CallRemoteFunction einfügen und wie? :)


    Habe noch nie damit gearbeitet. ;)

    Und wie soll ich dann abfragen ob er connected & eingeloggt ist? (Naja gut IsPlayerConnected...) aber das mit dem eingeloggt. ;)



    Normal sollte es doch alles abgespeichert werden oder nicht?
    Ich mein wenn ich gmx mache, dann wird auch OnPlayerDisconnect aufgerufen und sogleich SavePlayer.
    Aber es wird alles auf 0 gesetzt and Variablen.


    So und mir ist etwas aufgefallen:


    Ich erstelle einen Account.
    Mache einen GMX.
    Logge mich wieder ins Spiel ein (nachdem GMX)
    Muss mein Passwort eingeben und mache kurz das Tutorial durch(Wenn der Account existiert aber die Tutorial Variable auf 0 ist dann wird man ins Tutorial gebracht)
    Nachdem Tutorial nochmal GMX und alles wird gespeichert.
    Komisch!?


    Aber ich will ja dass es trotzdem klappt. Aufeinmal kommen Fehler auf bla bla, später verlieren viele ihre Statistiken undso. Das will ich halt verhindern. ;)

    Klappt nun wunderbar - Halbwegs.


    Wenn ich nun einen gmx ausführe, werden alle Werte (Integers) auf 0 gesetzt.
    Passwörter, Account-ID und Name bleibt bestehen.


    //Edit


    Ich habe bereits bei OnGameModeExit eine Schleife durch alle Spieler gehen lassen, die alle Daten abspeichert, solange der Spieler eingeloggt ist.

    Hallo.


    Ich habe mir vorhin das MySQL Tutorial hier im Forum angesehen aber habe damit ein kleines Problem.


    Die Daten werden nicht abgespeichert.
    Sprich geladen/gespeichert wird nichts.


    Ich habe bereits gedebuggt und theoretisch sollte es gehen.


    Also bei LoadPlayer und SavePlayer kam nur dass es funktioniert hat.


    Ich kann ja mal ein bisschen Code hier lassen:



    stock Connect_To_Database()
    {
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
    if(mysql_ping() == 1)
    {
    print("<-| Die Verbindung zur Datenbank wurde hergestellt. |->");
    return 1;
    }
    else
    {
    print("<-| Es konnte keine Verbindung zur Datenbank hergestellt werden. |->");
    print("<-| Versuche erneut ...");
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
    if(mysql_ping() == 1)
    {
    print("<-| Die Verbindung zur Datenbank wurde hergestellt. |->");
    return 1;
    }
    else
    {
    print("<-| Die Verbindung konnte nicht hergestellt werden. |->");
    print("<-| Server shutdown... |->");
    SendRconCommand("exit");
    return 1;
    }
    }
    }


    stock mysql_CheckAccount(playerid)
    {
    new Query[128], Name[MAX_PLAYER_NAME], count;
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    format(Query, sizeof(Query),"SELECT * FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    stock CreateAccount(playerid, pass[])
    {
    new query[256], Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    mysql_real_escape_string(pass, pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }


    stock mysql_ReturnPasswort(Name[])
    {
    new query[130], Get[130];
    mysql_real_escape_string(Name, Name);
    format(query, 128, "SELECT `passwort` FROM `accounts` WHERE `NAME` = '%s'", Name);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }



    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    stock mysql_GetString(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }


    stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_SetString(Table[], Field[], To[], Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(To, To);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_SetFloat(Table[], Field[], Float:To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }


    stock LoadPlayer(playerid)
    {
    print("Load Player");
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    print("Load Player#2");
    GetPlayerName(playerid, Spieler[playerid][pName], MAX_PLAYER_NAME);
    Spieler[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", Spieler[playerid][pLevel]);
    Spieler[playerid][pAdmin] = mysql_GetInt("accounts", "Admin", "Name", Spieler[playerid][pAdmin]);
    Spieler[playerid][pCash] = mysql_GetInt("accounts", "Geld", "Name", Spieler[playerid][pCash]);
    Spieler[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", Spieler[playerid][pKills]);
    Spieler[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", Spieler[playerid][pTode]);
    Spieler[playerid][pTut] = mysql_GetInt("accounts", "Tutorial", "Name", Spieler[playerid][pTut]);
    Spieler[playerid][pSkin] = mysql_GetInt("accounts", "Skin", "Name", Spieler[playerid][pSkin]);
    Spieler[playerid][pGeschlecht] = mysql_GetInt("accounts", "Geschlecht", "Name", Spieler[playerid][pGeschlecht]);
    Spieler[playerid][pFraktion] = mysql_GetInt("accounts", "Fraktion", "Name", Spieler[playerid][pFraktion]);
    }
    return 1;
    }


    stock SavePlayer(playerid)
    {
    print("Save Player");
    if(Spieler[playerid][pLoggedIn]== 1 && !IsPlayerNPC(playerid))
    {
    print("Save Player #2");
    mysql_SetInt("accounts", "Level", Spieler[playerid][pLevel], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Admin", Spieler[playerid][pAdmin], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Geld", Spieler[playerid][pCash], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Kills", Spieler[playerid][pKills], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Tode", Spieler[playerid][pTode], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Tutorial", Spieler[playerid][pTut], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Skin", Spieler[playerid][pSkin], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Geschlecht", Spieler[playerid][pGeschlecht], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Fraktion", Spieler[playerid][pFraktion], "Name", Spieler[playerid][pName]);
    }
    return 1;
    }


    Wenn ich mir den Log anschaue und einwenig versuche daraus etwas zu entziffern:
    [18:15:57] CMySQLHandler::Query(UPDATE `accounts` SET `Skin` = '12' WHERE `Name` = '') - Successfully executed.


    Sieht es so aus alsob er keinen "Namen" hat wo er abspeichern soll.


    Kann jemand helfen??