Koordinaten werden falsch übertragen?

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
  • Hat sich erledigt :)

    Spoiler anzeigen
    Heyho liebe Community :)
    Ich wollte ein Checkpoint System machen (eigene Checkpoints), jedoch habe ich nun folgendes Problem:

    Spoiler anzeigen
    Wenn ich einen Checkpoint erstellen möchte (sprich, der eigegebene Name wird gespeichert und die Koordinaten an denen der Spieler sich gerade befindet),
    ist das Problem, dass ich diese Koordinaten nicht vernünftig speichern kann.

    Spoiler anzeigen
    Habe jetzt mal ein Beispiel aus meiner server.log genommen.
    Wundert euch nicht über die ganzen Print Befehle, die waren nur für den erfolglosen Versuch
    das Problem selbst zu lösen. Ich bin mir sicher ich übersehe etwas total simples...

    Spoiler anzeigen
    Mit Code ist alles einfacher:

    Spoiler anzeigen
    if(dialogid==DIALOG_CHECKPOINTS_ERSTELLEN)
    {
    if(!response) return 1;
    new cp = GetPVarInt(playerid, "EditierterCheckpoint"), Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    new Float:pos_x, Float:pos_y, Float:pos_z; // Ebenfalls ein (sogar relativ sinnloser und) erfolgloser Test. Dachte dass hier evtl die Koords falsch ausgelesen werden oder so ^.^
    pos_x = x;
    pos_y = y;
    pos_z = z;

    printf("Hier die anderen Koords: %f, %f, %f", pos_x, pos_y, pos_z); // Ergebnis laut sever.log -> Hier die anderen Koords: 958.378295, 1343.157226, 15.374607


    format(PlayerCheckpoints[playerid][cp][cName], 64, "%s", inputtext);
    PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;
    PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
    PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;

    SendClientMessage(playerid, WEISS, "Du hast dir nun deinen Checkpoint gespeichert.");

    new str[128];
    format(str,128, "X:%f Y:%f Z:%f", x, y, z);

    printf("CP: %i", cp); // Ergebnis laut server.log -> CP: 0
    print(str); // Ergebnis laut server.log -> X:1958.378295 Y:1343.157226 Z:15.374607

    format(str,128, "X:%f Y:%f Z:%f", PlayerCheckpoints[playerid][cp][cPos_x], PlayerCheckpoints[playerid][cp][cPos_y], PlayerCheckpoints[playerid][cp][cPos_z]);
    print(str); // Ergebnis laut server.log -> X:15.374607 Y:15.374607 Z:15.374607

    return 1;

    }

    Spoiler anzeigen
    Ich habe es ausprobiert, falls ich diese Reihe vertausche

    Spoiler anzeigen

    PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;
    PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
    PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;

    Spoiler anzeigen
    Ist bei dem letzten print Befehl jedes Ergebnis das, was bei den oberen 3 das letzte ist.

    PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
    PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;
    PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;

    Spoiler anzeigen
    Hierbei wäre das Ergebnis am Ende
    X:pos_x Y:pos_x Z:pos_x

    Spoiler anzeigen
    Es muss an diesen Zeilen liegen, ich verstehe es einfach nicht wieso es nicht klappt ?(
    Hier mein enum:
    Spoiler anzeigen

    enum spielercps()
    {
    Float:cPos_x = 0.0,
    Float:cPos_y = 0.0,
    Float:cPos_z = 0.0,
    cName[64]
    }
    new PlayerCheckpoints[MAX_PLAYERS][4][spielercps];

    Spoiler anzeigen
    Spoiler anzeigen
    Habe ich auf 0 gesetzt, da ich so ermittle ob es den Checkpoint gibt oder nicht. Falls alle 3 = 0.0 sind wird er als "Nicht vorhanden" definiert.
    Werde ich noch auf nen boolean Wert ändern damit es schöner ist, tut aber denke ich hier nichts zur Sache :rolleyes: 

    Einmal editiert, zuletzt von 085zehn ()

  • Warum nutzt du nochmals eine variable fürs zwischen speichern der koordinaten wenn diese schon in den variablen x y und z drinne stehen ?

    PlayerCheckpoints[playerid][cp][cPos_x] = x;
    PlayerCheckpoints[playerid][cp][cPos_y] = y;
    PlayerCheckpoints[playerid][cp][cPos_z] = z;

  • Es war ein verzweifelter Versuch den Fehler zu finden.


    Das Ding ist ja, dass bei
    GetPlayerPos die richtigen Koordinaten herauskommen. Ist ja klar, die Funktion funktioniert einwandfrei.
    Aber das auch nur wenn ich da neue Variablen wie xyz reinhaue.



    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);


    Falls ich aber meine bestehenden Variablen einsetze funktioniert es nicht.



    GetPlayerPos(playerid, PlayerCheckpoints[playerid][cp][cPos_x], PlayerCheckpoints[playerid][cp][cPos_y], PlayerCheckpoints[playerid][cp][cPos_z]);


    Da kommen dann wieder vollkommen komische Werte bei raus.



    Aber mein Enum sieht doch eigentlich ganz normal aus?



    enum spielercps
    {
    Float:cPos_x = 0.0,
    Float:cPos_y = 0.0,
    Float:cPos_z = 0.0,
    cName[64]
    }
    new PlayerCheckpoints[MAX_PLAYERS][4][spielercps];