PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Air support script problem


KampfKiffer
30. October 2011, 21:19
Ich habe ein einfaches script für air support geschrieben, allerdings funktioniert es aus mir unbekannten Gründen nicht. Die beiden Player heißen p1 & p2 und die beiden air support Einheiten (helicopter) airsupport1 & airsupport 2. Das Script wird ausgeführ sobald jemand Radio Alpha anfunkt.
Würde mich freun wenn mit jemand helfen könnte, danke im vorraus.


p1 sidechat "Alpha 1 to HQ, requesting air support";

if(alive p1 && alive airsupport1 || alive airsupport2) then
{
[West,"HQ"] "Crossroad to Alpha 1, air support is on its way";
airsupport1 doMove (getPos p1);
airsupport2 doMove (getPos p1);
_trg=createTrigger["as1",getPos p1];
_trg setTriggerArea[100,100,0,false];
_trg setTriggerActivation["EAST","NOT PRESENT",false];
_trg setTriggerStatements["this","_nul = [] execVM "Airsupport_cancel.sqf; deleteVehicle _trg;",""];
};
else if(alive p2 && alive airsupport1 || alive airsupport2) then
{
[West,"HQ"] "Crossroad to Alpha 1, air support is on its way";
airsupport1 doMove (getPos p2);
airsupport2 doMove (getPos p2);
_trg=createTrigger["as2",getPos p2];
_trg setTriggerArea[100,100,0,false];
_trg setTriggerActivation["EAST","NOT PRESENT",false];
_trg setTriggerStatements["this","_nul = [] execVM "Airsupport_cancel.sqf; deleteVehicle _trg;",""];
};
else if(!alive airsupport1 && !alive airsupport2)
{
[West,"HQ"] "Crossroad to Alpha 1, negative, Egale 1 and 2 are down.";
};

redgun
31. October 2011, 13:44
0.
Du funkst entweder mit einer potentiell toten Einheit oder du prüfst ob eine definitiv lebende Einheit gerade lebt.
Macht jetzt nicht ganz so viel Sinn in meinen Augen.

1.
[West,"HQ"] "Crossroad to Alpha 1, air support is on its way";
ich bin mir ziemlich sicher, dass das mit "sideChat" besser funktioniert.

2.
_trg setTriggerStatements["this","_nul = [] execVM "Airsupport_cancel.sqf; deleteVehicle _trg;",""];
Meiner Meinung nach, sind hier die Quotes nicht balanciert - ich würde das so schreiben:

_trg setTriggerStatements[{this},{_nul = [] execVM "Airsupport_cancel.sqf"; deleteVehicle _trg;},{}];


3.
Deine 'else if' sehen falsch aus.

4.
Ich denke, die werden "Eagle" heißen :D


Versuchs mal so (oder so ähnlich)
_tmpP = objNull;
if (alive p2) then {_tmpP = p2; _callS = "Alpha 2"};
if (alive p1) then {_tmpP = p1; _callS = "Alpha 1"};

if isnull(_tmpP) then {exit; comment "Hier gewünschtes Verhalten einfügen, falls P1 & P2 tot sind."};

_tmpP sidechat format ["%1 to HQ, requesting air support",_callS];

if (alive airsupport1 || alive airsupport2) then
{
[West,"HQ"] sideChat format ["Crossroad to %1, air support is on its way",_callS];
airsupport1 doMove (getPos _tmpP);
airsupport2 doMove (getPos _tmpP);
_trg=createTrigger["as1",getPos _tmpP];
_trg setTriggerArea[100,100,0,false];
_trg setTriggerActivation["EAST","NOT PRESENT",false];
_trg setTriggerStatements[{this},{_nul = [] execVM "Airsupport_cancel.sqf"; deleteVehicle _trg;},{}];
}
else
{
[West,"HQ"] sideChat format ["Crossroad to %1, negative, Eagle 1 and 2 are down.",_callS];
};

KampfKiffer
4. November 2011, 20:30
Ersteinmal danke für deine schnelle antwort. Allerdings ist das mein erstes script was ich ledigtlich mit meinem Java wissen und sehr eingeschränktem sqf scripting zusamen geschustert habe.
0. Da muss ich dir Recht geben das hab ich nicht wirklich gedacht :D

1. Mein guter Freund die flüchtigkeit xD

2. Wo du Recht hast, hast du Recht

3. Das ist auf meine Java Kenntnisse zurückzuführen

4. FUCKING WINDOWS 98!

Das hört sich im nachhinein ziemich nach rechtfertigung an so isses aber nich gemeint :D. Ich bin dir für deine Hilfe wirklich dankbar

redgun
4. November 2011, 21:54
Bitte gerne. Funktioniert es?
Die "OFP-Sprache" ist leider nicht perfekt, einige gängige Programmiertechniken lassen sich nur recht umständlich umsetzen. :(

KampfKiffer
4. November 2011, 22:00
Leider funktioniert es noch nicht, eines der probleme ist, dass der Trigger der hier:
if (alive airsupport1 || alive airsupport2) then
{
[West,"HQ"] sideChat format ["Crossroad to %1, air support is on its way",_callS];
airsupport1 doMove (getPos _tmpP);
airsupport2 doMove (getPos _tmpP);
_trg=createTrigger["as1",getPos _tmpP];
_trg setTriggerArea[100,100,0,false];
_trg setTriggerActivation["EAST","NOT PRESENT",false];
_trg setTriggerStatements[{this},{_nul = [] execVM "Airsupport_cancel.sqf"; deleteVehicle _trg;},{}];
}
erzeugt wird einfach nicht funktioniert.

Ausserdem hab ich momentan das Problem das die Helicopter, nicht wie erwartet, bei der Position von _tmpP "stehenbleiben" und schießen, sondern immer wieder angriffsflüge fliegen und die gegner kaum treffen.

redgun
4. November 2011, 23:14
addWaypoint und setWaypointType (Hold) könnten das zweite Problem lösen.