Hallo Brotfische,
Ich habe noch langer Zeit mal wieder ein Problem welches ich mir selber nicht erklären kann. Mit dem Befehl '/open' sollte eigentlich das nächste Garagentor geöffnet werden.
Leider wird mir dann aber "Du bist nicht in der Nähe eines Garagentors" angezeigt, obwohl ich mich direkt davor befinde. Das bedeutet das in der Funktion GetNearestGarage immer der Wert -1 ausgiebt wird. Ich habe den Code mehrmals überprüft aber habe den Fehler leider nicht gefunden. Ich hoffe es kann mir jemand von euch helfen
C
enum ENUM_GATE{
Float:mg_x,
Float:mg_y,
Float:mg_z,
Float:mg_rx,
Float:mg_ry,
Float:mg_rz
};
new MoveGates[4][ENUM_GATE] = {
{99.28530, -272.32660, 3.84660, 0.00000, 0.00000, 89.54280},
{103.39063, -272.67712, 3.84664, 0.00000, 0.00000, 89.64275},
{86.60210, -272.50259, 3.84660, 0.00000, 0.00000, 89.64280},
{11.75300, -272.13409, 3.84660, 0.00000, 0.00000, 89.54280}
};
new GarageObject[sizeof MoveGates];
Alles anzeigen
Erstellen der Tore:
C
for(i = 0; i < sizeof MoveGates; i++)
{
GarageObject[i] = CreateDynamicObject(3037,MoveGates[i][mg_x],MoveGates[i][mg_y],MoveGates[i][mg_z],MoveGates[i][mg_rx],MoveGates[i][mg_ry],MoveGates[i][mg_rz]);
}
Befehl & Co
C
ocmd:open(playerid)
{
new id = GetNearestGarage(playerid,20.0),str[128];
if(id == -1)return SendClientMessage(playerid, 0xFF0000FF, "Du bist nicht in der Nähe einer Garage!");
if(PlayerOpenGarage[playerid] == false)
{
MoveObject(GarageObject[id],MoveGates[id][mg_x],MoveGates[id][mg_y],7.82609,3.0);
format(str,sizeof str,"Du hast Garagentor '%d' geöffnet!",id);
SendClientMessage(playerid,-1,str);
return PlayerOpenGarage[playerid] = true;
}
if(PlayerOpenGarage[playerid] == true)
{
MoveObject(GarageObject[id],MoveGates[id][mg_x],MoveGates[id][mg_y],MoveGates[id][mg_z],3.0);
format(str,sizeof str,"Du hast Garagentor '%d' geschlossen!",id);
SendClientMessage(playerid,-1,str);
return PlayerOpenGarage[playerid] = false;
}
return 1;
}
stock GetNearestGarage(playerid, Float:dist)
{
new Float:x, Float:y, Float:z, Float:smallest = 9999999.9, id = -1, Float:tmp;
for(new i=0; i<sizeof(MoveGates); i++)
{
GetObjectPos(GarageObject[i], x, y, z);
tmp = GetPlayerDistanceFromPoint(playerid, x, y, z);
if(tmp <= dist && tmp < smallest)
{
smallest = tmp;
id = i;
}
}
return id;
}
Alles anzeigen
MfG