Hat sich erledigt
Heyho liebe Community
Ich wollte ein Checkpoint System machen (eigene Checkpoints), jedoch habe ich nun folgendes Problem:
Ich wollte ein Checkpoint System machen (eigene Checkpoints), jedoch habe ich nun folgendes Problem:
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.
ist das Problem, dass ich diese Koordinaten nicht vernünftig speichern kann.
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...
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...
Mit Code ist alles einfacher:
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;
}
{
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;
}
Ich habe es ausprobiert, falls ich diese Reihe vertausche
PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;
PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;
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;
PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;
PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;
Hierbei wäre das Ergebnis am Ende
X:pos_x Y:pos_x Z:pos_x
X:pos_x Y:pos_x Z:pos_x
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];
Hier mein enum:
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];
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
Werde ich noch auf nen boolean Wert ändern damit es schöner ist, tut aber denke ich hier nichts zur Sache