Ich habe ein Problem mit meinem move Command um Tore zu öffnen.
Und zwar habe ich diesen Command:
ocmd:move(playerid,params[])
{
if(IsPlayerInRangeOfPoint(playerid,5, 1587.0999755859, -1638.4000244141, 14.0))
{
if(Spieler[playerid][Torstatus] == 0)
{
Spieler[playerid][Torstatus] = 1;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 9.0, 5);
return 1;
}
if(Spieler[playerid][Torstatus] == 1)
{
Spieler[playerid][Torstatus] = 0;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 14.0, 5);
return 1;
}
}
return 1;
}
Das Problem ist wenn ich jetzt ein zweites Tor einfüge und auch wieder mit Torstatus arbeite könnte es passieren wenn bei gleichzeitig auf machen oder ein Tor ist offen und das andere zu kommt es zu Fehlern. Meine Frage wie kann ich es am besten Lösen das keine Fehler kommen?
Tor Problem
- KABOOM
- Geschlossen
- Erledigt
-
-
Das macht man am besten mit else if:
ocmd:move(playerid,params[])
{
if(IsPlayerInRangeOfPoint(playerid,5, 1587.0999755859, -1638.4000244141, 14.0))
{
if(Spieler[playerid][Torstatus] == 0)
{
Spieler[playerid][Torstatus] = 1;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 9.0, 5);
}
else if(Spieler[playerid][Torstatus] == 1)
{
Spieler[playerid][Torstatus] = 0;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 14.0, 5);
}
}
return 1;
}mfg.
-
Wieso hängt denn der Tor Status mit dem Spieler zusammen. Macht für mich keinen Sinn.
Spieler[playerid][Torstatus]
Ein Tor hat doch nichts mit einem Spieler zu tun. -
Wenn ich es jetzt aber so habe:
ocmd:move(playerid,params[])
{
if(IsPlayerInRangeOfPoint(playerid,5, 1587.0999755859, -1638.4000244141, 14.0))
{
if(Spieler[playerid][Torstatus] == 0)
{
Spieler[playerid][Torstatus] = 1;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 9.0, 5);
return 1;
}
else if(Spieler[playerid][Torstatus] == 1)
{
Spieler[playerid][Torstatus] = 0;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 14.0, 5);
return 1;
}
if(IsPlayerInRangeOfPoint(playerid,5, x, y, z))
{
if(Spieler[playerid][Torstatus] == 0)
{
Spieler[playerid][Torstatus] = 1;
MoveObject(pdtor1,x, y, z, 5);
return 1;
}
if(Spieler[playerid][Torstatus] == 1)
{
Spieler[playerid][Torstatus] = 0;
MoveObject(pdtor1,x, y, z, 5);
return 1;
}
}
}
return 1;
}
und die Tore werden das eine Aufgemacht und das andere dann auch dan gibt es Probleme mit dem Torstatus.Goldkiller ich habe Torstatus beim enum Spieler definiert. ist doch egal oder?
edit://cords geändert
-
Schreibe es so, ich beziehe mal Goldkillers Post mit ein:
//oben in dein Script
new m, m1;ocmd:move(playerid,params[])
{
if(IsPlayerInRangeOfPoint(playerid,5, 1587.0999755859, -1638.4000244141, 14.0))
{
if(!m)
{
m = 1;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 9.0, 5);
}
else if(m)
{
m = 0;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 14.0, 5);
}
}
else if(IsPlayerInRangeOfPoint(playerid,5, 1587.0999755859, -1638.4000244141, 14.0))
{
if(!m1)
{
m1 = 1;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 9.0, 5);//hier musste die objectid noch ändern !
}
else if(m1)
{
m1 = 0;
MoveObject(pdtor1,1587.0999755859, -1638.4000244141, 14.0, 5);//hier musste die objectid noch ändern !
}
}
return 1;
}mfg.
//edit:
ups ja, habe das eine else vergessen gehabt -
Kann man es auch so machen
new tor[2];
und dann mit Tor[1] und Tor[2] machen, oder ist das nicht möglich? -
Zeile 26 müsste dann aber ein "else if" sein. Sonst wird nach Zeile 22 und "m1 = 1" die zweite if-Bedingung auch wahr sein.
Jain. Natürlich kannst du Tor[2] nehmen. Die Indexe sind aber 0 und 1,nicht 1 und 2.
-
Ok, danke
-
breadfish.de
Hat das Thema geschlossen.