Koordinaten speichern und auslesen

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
  • Hallo Community, ich habe mal versucht bei einem Selfmade Script das bisher nur eine MySQL Login und Register Funktion etwas rumzuversuchen.
    Ich wollte das wenn man sich ausloggt, Koordinaten gespeichert werden, und beim Einloggen wieder ausgelesen werden damit man da halt wieder spawnt.
    Problem jetzt, die Koordinaten speichern sich nicht und lesen sich nicht aus :D
    hier mein Code, bitte nicht so streng das war das erste mal seit 3 Jahren wo ich wieder etwas versucht habe...


    enum Position
    {
    Float: XPos,
    Float: YPos,
    Float: ZPos
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    if(GetPVarInt(playerid, "Eingeloggt") == 1)
    {
    mysql_SetInt("spieler", "Geld", GetPlayerMoney(playerid), "Name", PlayerName[playerid]);
    mysql_SetInt("spieler", "Morde", GetPVarInt(playerid, "Morde"), "Name", PlayerName[playerid]);
    mysql_SetInt("spieler", "Tode", GetPVarInt(playerid, "Tode"), "Name", PlayerName[playerid]);
    mysql_SetInt("spieler", "Admin", GetPVarInt(playerid, "Admin"), "Name", PlayerName[playerid]);
    mysql_SetInt("spieler", "XPos", GetPVarInt(playerid, "XPos"), "Name", PlayerName[playerid]);
    mysql_SetInt("spieler", "YPos", GetPVarInt(playerid, "YPos"), "Name", PlayerName[playerid]);
    mysql_SetInt("spieler", "ZPos", GetPVarInt(playerid, "ZPos"), "Name", PlayerName[playerid]);
    }
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {


    case 0:
    {
    if(!inputtext[0])
    {
    SendClientMessage(playerid, Color_White, "Info: Bitte gebe ein Passwort ein");
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Anmelden", "Wilkommen auf Real Secondlife.\nDu kannst dich nun anmelden", "Anmelden", "Abrechen");
    return true;
    }
    if(strcmp(inputtext, mysql_GetString("spieler", "Passwort", "Name", PlayerName[playerid]), true) == 0)
    {
    SetPVarInt(playerid, "Eingeloggt", 1);
    GivePlayerMoney(playerid, mysql_GetInt("spieler", "Geld", "Name", PlayerName[playerid]));
    SetPVarInt(playerid, "Morde", mysql_GetInt("spieler", "Morde", "Name", PlayerName[playerid]));
    SetPVarInt(playerid, "Tode", mysql_GetInt("spieler", "Tode", "Name", PlayerName[playerid]));
    SetPVarInt(playerid, "Admin", mysql_GetInt("spieler", "Admin", "Name", PlayerName[playerid]));
    SetPVarInt(playerid, "XPos", mysql_GetInt("spieler", "XPos", "Name", PlayerName[playerid]));
    SetPVarInt(playerid, "YPos", mysql_GetInt("spieler", "YPos", "Name", PlayerName[playerid]));
    SetPVarInt(playerid, "ZPos", mysql_GetInt("spieler", "ZPos", "Name", PlayerName[playerid]));
    SendClientMessage(playerid, Color_Green, "Info: Wilkommen auf Real Secondlife");
    SpawnPlayer(playerid);
    SetPlayerPos(playerid, XPos, YPos, ZPos); // warning 213: tag mismatc und das 3mal
    return true;
    }
    else
    {
    SetPVarInt(playerid, "PWFalsch", GetPVarInt(playerid, "PWFalsch")+1);
    if(GetPVarInt(playerid, "PWFalsch") < Max_Player_Login_Attemps)
    {
    SendClientMessage(playerid, Color_Red, "Info: Solltest du dein Passwort 3 mal falsch eingeben, wirst du vom Server gekickt.");
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Anmelden", "Wilkommen auf Real Secondlife.\nDu kannst dich nun Anmelden", "Anmelden", "Abrechen");
    return true;
    }
    if(GetPVarInt(playerid, "PWFalsch") == Max_Player_Login_Attemps)
    {
    SendClientMessage(playerid, Color_Red, "Info: Da du dein Passwort wiederholt falsch eingegeben hast, wurdest du vom Server gekickt.");
    Kick(playerid);
    return true;
    }
    }
    }
    case 1:
    {
    if(!inputtext[0])
    {
    SendClientMessage(playerid, Color_Red, "Info: Passwort zu kurz");
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Regestrieren", "Wilkommen auf Real Secondlife.\nWie ich sehe bist du neu hier\nDu kannst dich nun Regestrieren", "Regestrieren", "Abrechen");
    return 1;
    }
    SetPVarInt(playerid, "Eingeloggt", 1);
    CreatePlayerAccount(PlayerName[playerid], inputtext);
    mysql_SetString("spieler", "Passwort", inputtext, "Name", PlayerName[playerid]);
    SendClientMessage(playerid, Color_Green, "Info: Du hast dich erfolgreich auf Real Secondlife Regestriert.");
    SpawnPlayer(playerid);
    SetPlayerPos(playerid,XPos,YPos,ZPos);// warning 213: tag mismatc und das 3mal
    return true;
    }


    }
    return 1;
    }


    Und in meiner Datenbank hab ich 3 neue Spalten erstellt mit XPos YPos ZPos also mit Float wird das dann gespeichert...
    Help me please



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Achte auf folgende Dinge:


    1. Spalteneigenschaft auf Float gestellt bei den 3 Spalten
    2. Verwende GetPVarFloat anstatt GetPVarInt da es Floats sind und keine integer
    3. Es gibt soweit ich mir ihrgend wie erinnern kann auch mysql_SetFloat und mysql_GetFloat dies benutzt du dafür anstatt mysql_SetInt und mysql_GetInt
    4. SetPlayerPos(playerid, XPos, YPos, ZPos); ist falsch entweder


    SetPlayerPos(playerid, GetPVarFloat(playerid, "XPos"), GetPVarFloat(playerid, "YPos"), GetPVarFloat(playerid, "ZPos"));
    oder
    SetPlayerPos(playerid, mysql_GetFloat("spieler", "XPos", "Name", PlayerName[playerid]), mysql_GetFloat("spieler", "YPos", "Name", PlayerName[playerid]), mysql_GetFloat("spieler", "ZPos", "Name", PlayerName[playerid]));


    oder du benutzt das enum als index für ein array und machst es damit.


    5. Zu dem solltest du mit GetPlayerPos die position des spielers auslesen wenn er disconnectet sonst bleiben die werte 0.0

  • Hey, erstmal danke für die schnelle Antwort. Also ich habe es mal so versucht wie du meintest also GetFloat und SetFloat aber da kam direkt ein Error damit es nicht Definiert wurde. Ich habe alle Includes und Plugins also wird es die Funktion wohl nicht geben... wie soll ich es denn nun machen? Wäre lieb wenn du noch einmal antwortest.


    MfG



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Hey, erstmal danke für die schnelle Antwort. Also ich habe es mal so versucht wie du meintest also GetFloat und SetFloat aber da kam direkt ein Error damit es nicht Definiert wurde. Ich habe alle Includes und Plugins also wird es die Funktion wohl nicht geben... wie soll ich es denn nun machen? Wäre lieb wenn du noch einmal antwortest.


    MfG


    Da du ja die grundlage von dem MySQL Tutorial von Maddin nutzt und seine funktionen welche er dazu geschrieben hatte bin ich mal ausgegeangen davon das du diese funktionen besitzt.
    Jedoch wäre es besser wenn du dich mal mit MySQL richtig auseinander setzt und selbst mit den SQL Befehlen arbeitest und den funktionen von den mysql plugins.

    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 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;
    }