MySQL - Spawnposition

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 Leute,
    ich habe bereits die Suchfunktion benutzt und auch einiges gefunden - ein großer Teil hat nicht geholfen und der Rest bezog sich auf andere Fragestellungen. Ich möchte gerne die MySQL Position eines Spielers in die MySQL Account Tabelle speichern - so weit so gut, das klappt alles. Nun möchte ich, dass der Spieler nach dem Login auf die gespeicherte Position gesetzt wird.... Klappt komischerweise nicht - ich werde nicht auf die gespeicherte Position gespawnt. Stattdessen lande ich bei 0, 0 , 0. Die HP Anzahl, die auch als Float gespeichert wird, kann aber problemlos verwendet werden :wacko: Ich weiß nicht, wo das Problem liegt.


    Codeee: [Nur die wichtigsten Teile enthalten]


    Enum SpielerDaten
    enum SpielerDaten
    {
    pName[MAX_PLAYER_NAME],
    pLevel,
    pGeld,
    pKills,
    pTode,
    Float:pHealth,
    Float:PosX,
    Float:PosY,
    Float:PosZ,
    Float:PosR,
    pskinid
    }
    Nach Login
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    new PlayerName[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
    format(string, sizeof(string), "%s hat den Server betreten.", PlayerName);
    SendClientMessageToAll(system, string);
    SpawnPlayer(playerid);
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, SpielerInfo[playerid][pGeld]);
    SetPlayerHealth(playerid, SpielerInfo[playerid][pHealth]);
    SetPlayerSkin(playerid, SpielerInfo[playerid][pskinid]);
    SetPlayerPos(playerid,SpielerInfo[playerid][PosX],SpielerInfo[playerid][PosY],SpielerInfo[playerid][PosZ]);
    SetPlayerFacingAngle(playerid,SpielerInfo[playerid][PosR]);
    return 1;
    Laden Stock
    SpielerInfo[playerid][PosX] = mysql_GetFloat("Accounts","PosX","Name",SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][PosY] = mysql_GetFloat("Accounts","PosY","Name",SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][PosZ] = mysql_GetFloat("Accounts","PosZ","Name",SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][PosR] = mysql_GetFloat("Accounts","PosR","Name",SpielerInfo[playerid][pName]);
    Speichern Stock
    new Float:PosXX,Float:PosYY,Float:PosZZ,Float:PosRR;
    GetPlayerPos(playerid,PosXX,PosYY,PosZZ);
    GetPlayerFacingAngle(playerid,PosRR);
    mysql_SetFloat("accounts", "PosX", PosXX, "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosY", PosYY, "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosZ", PosZZ, "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "PosR", PosRR, "Name", SpielerInfo[playerid][pName]);
    GetFloat und SetFloat
    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);
    format(query,128, "");
    return true;
    }

    GetFloat und SetFloat
    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;
    }

    BTW erhalte ich folgende Warnung:

    Code
    C: ... Blabla .... gamemode.pwn(350) : warning 208: function with tag result used before definition, forcing reparse


    In der Zeile 350 beginnt der GetFloat Stock, genau genommen steht dort: stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])

    <3

    Einmal editiert, zuletzt von Longibotti ()

  • C: ... Blabla .... gamemode.pwn(350) : warning 208: function with tag result used before definition, forcing reparse


    Aus dieser Meldung resultiert, dass die Warningzeile 350 ist. Was der Inhalt dieser Zeile ist, schrieb ich bereits:

    Zitat

    In der Zeile 350 beginnt der GetFloat Stock, genau genommen steht dort:
    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])

    • Offizieller Beitrag

    Der Fehlererklärbär sagt zu dem Fehler folgendes: Du hast eine Funktion mit einem Tag (z.B. "stock Float:SetFloat") im Script, die aufgerufen wird, bevor sie im Script gefunden wurde.


    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Problemlösung:


    MySQL und PAWN sind beide case sensitiv.


    An der Stelle, an der die Position des Spielers, also
    beim Einloggen in die Spielervariablen gespeichert
    wurden, war eine falsche MySQL Tabelle angegeben.


    im Script: Accounts


    in MySQL: accounts



    Das funktioniert natürlich nicht.

    IMMER die Groß- und Kleinschreibung beachten!
    :thumbup:



    Übrigens, ich habe für diesen kleinen Tipp KEIN Geld entgegen genommen!