mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
720 lines
26 KiB
Plaintext
720 lines
26 KiB
Plaintext
/*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, air drop">*/
|
|
/*%FSM<HEAD>*/
|
|
/*
|
|
item0[] = {"reset___checks",2,250,-175.000000,-200.000000,-75.000000,-150.000000,0.000000,"reset / checks"};
|
|
item1[] = {"air_drop",0,250,-550.000000,-75.000000,-450.000000,-25.000000,0.000000,"air drop"};
|
|
item2[] = {"no_instinct",4,218,0.000000,-150.000000,100.000000,-100.000000,80.000000,"no instinct"};
|
|
item3[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"};
|
|
item4[] = {"action",2,250,150.000000,50.000000,250.000000,100.000000,0.000000,"action"};
|
|
item5[] = {"dispose",4,218,150.000000,-325.000000,250.000000,-275.000000,90.000000,"dispose"};
|
|
item6[] = {"_",8,218,-700.000000,-75.000000,-600.000000,-25.000000,5.000000,""};
|
|
item7[] = {"complete",4,218,0.000000,50.000000,100.000000,100.000000,100.000000,"complete"};
|
|
item8[] = {"end",1,4346,400.000000,-25.000000,500.000000,25.000000,0.000000,"end"};
|
|
item9[] = {"dispose",4,218,250.000000,-25.000000,350.000000,25.000000,95.000000,"dispose"};
|
|
item10[] = {"instinct_done",4,218,150.000000,-75.000000,250.000000,-25.000000,100.000000,"instinct done"};
|
|
item11[] = {"do_instinct",4,218,0.000000,-250.000000,100.000000,-200.000000,80.000000,"do instinct"};
|
|
item12[] = {"checks",4,218,-325.000000,50.000000,-225.000000,100.000000,60.000000,"checks"};
|
|
item13[] = {"long_checks",4,218,0.000000,-50.000000,100.000000,0.000000,85.000000,"long checks"};
|
|
item14[] = {"drop",4,218,350.000000,50.000000,450.000000,100.000000,0.000000,"drop"};
|
|
item15[] = {"do_drop",2,250,350.000000,300.000000,450.000000,350.000000,0.000000,"do drop"};
|
|
item16[] = {"drop",4,218,325.000000,-325.000000,425.000000,-275.000000,85.000000,"drop"};
|
|
item17[] = {"setup",2,250,-700.000000,-200.000000,-600.000000,-150.000000,0.000000,"setup"};
|
|
item18[] = {"long_checks",2,250,-175.000000,50.000000,-75.000000,100.000000,0.000000,"long checks"};
|
|
item19[] = {"done_long_checks",4,218,-175.000000,-100.000000,-75.000000,-50.000000,100.000000,"done long checks"};
|
|
item20[] = {"find_Copter",2,250,-350.000000,-325.000000,-250.000000,-275.000000,0.000000,"find Copter"};
|
|
item21[] = {"found",4,218,-350.000000,-225.000000,-250.000000,-175.000000,20.000000,"found"};
|
|
item22[] = {"not_found",4,218,-175.000000,-275.000000,-75.000000,-225.000000,10.000000,"not found"};
|
|
item23[] = {"failed",4,218,0.000000,-325.000000,100.000000,-275.000000,30.000000,"failed"};
|
|
item24[] = {"_",8,218,-700.000000,-325.000000,-600.000000,-275.000000,5.000000,""};
|
|
item25[] = {"_",8,218,150.000000,300.000000,250.000000,350.000000,5.000000,""};
|
|
item26[] = {"hover",2,250,-550.000000,-200.000000,-450.000000,-150.000000,0.000000,"hover"};
|
|
item27[] = {"arrived",4,218,-350.000000,-150.000000,-250.000000,-100.000000,0.000000,"arrived"};
|
|
item28[] = {"wait",4,218,-550.000000,-300.000000,-450.000000,-250.000000,0.000000,"wait"};
|
|
item29[] = {"check_landing",2,250,350.000000,125.000000,450.000000,175.000000,0.000000,"check landing"};
|
|
item30[] = {"over_water",4,218,525.000000,125.000000,625.000000,175.000000,0.000000,"over water"};
|
|
item31[] = {"over_land",4,218,350.000000,200.000000,450.000000,250.000000,0.000000,"over land"};
|
|
link0[] = {0,11};
|
|
link1[] = {1,6};
|
|
link2[] = {2,0};
|
|
link3[] = {3,2};
|
|
link4[] = {3,5};
|
|
link5[] = {3,10};
|
|
link6[] = {3,13};
|
|
link7[] = {3,16};
|
|
link8[] = {4,7};
|
|
link9[] = {4,9};
|
|
link10[] = {4,14};
|
|
link11[] = {5,3};
|
|
link12[] = {6,17};
|
|
link13[] = {7,18};
|
|
link14[] = {9,8};
|
|
link15[] = {10,4};
|
|
link16[] = {11,3};
|
|
link17[] = {12,18};
|
|
link18[] = {13,18};
|
|
link19[] = {14,29};
|
|
link20[] = {15,25};
|
|
link21[] = {16,3};
|
|
link22[] = {17,24};
|
|
link23[] = {18,12};
|
|
link24[] = {18,19};
|
|
link25[] = {19,0};
|
|
link26[] = {20,21};
|
|
link27[] = {20,22};
|
|
link28[] = {20,23};
|
|
link29[] = {21,26};
|
|
link30[] = {22,20};
|
|
link31[] = {23,3};
|
|
link32[] = {24,20};
|
|
link33[] = {25,4};
|
|
link34[] = {26,27};
|
|
link35[] = {26,28};
|
|
link36[] = {27,0};
|
|
link37[] = {28,26};
|
|
link38[] = {29,30};
|
|
link39[] = {29,31};
|
|
link40[] = {30,29};
|
|
link41[] = {31,15};
|
|
globals[] = {25.000000,1,0,0,16777215,640,480,1,238,6316128,1,144.778671,832.183105,544.674927,-508.795807,584,895,1};
|
|
window[] = {2,-1,-1,-32000,-32000,600,-1205,-180,75,3,602};
|
|
*//*%FSM</HEAD>*/
|
|
class FSM
|
|
{
|
|
fsmName = "air drop";
|
|
class States
|
|
{
|
|
/*%FSM<STATE "reset___checks">*/
|
|
class reset___checks
|
|
{
|
|
name = "reset___checks";
|
|
init = /*%FSM<STATEINIT""">*/"_rnd = floor random 100;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_copterPos = getPos _axeCopter;" \n
|
|
"_floorCopterPos = _copterPos;" \n
|
|
"_floorCopterPos set [2,0];" \n
|
|
"_dropChance= _dropChanceMin;" \n
|
|
"" \n
|
|
"" \n
|
|
"//Mission (Short) Checks" \n
|
|
"if(_nearDrop && !_dropDone)then{" \n
|
|
"" \n
|
|
"" \n
|
|
"//Can See Players" \n
|
|
"if(count _nrPlyrs > 0)then{" \n
|
|
"{" \n
|
|
"if !(lineIntersects [_copterPos, eyePos _x, _x, _axeCopter])then{" \n
|
|
"_dropPos = getPos _x;" \n
|
|
"_dropChance = _dropChance + 5;" \n
|
|
"};" \n
|
|
"} forEach _nrPlyrs;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"if(_isSmoke)then{" \n
|
|
"_dropChance = _dropChance + 50;" \n
|
|
"_smokeSeen = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"//systemchat format [""Is Smoke: %1 | Chance: %2 / %4 | Fired: %3 | Drop Done: %5"",_isSmoke,_dropChance,axeFiredNear,_dropChanceCheck,_dropDone];" \n
|
|
"" \n
|
|
"" \n
|
|
"//Drop" \n
|
|
"" \n
|
|
"if(_dropChanceCheck < _dropChance)then{" \n
|
|
"_callDrop = true;" \n
|
|
"//hint format[""Dropping from %1"",_axeCopter];" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"};" \n
|
|
"" \n
|
|
"//Redirect to finish" \n
|
|
"if(!_redirectDone && (_floorCopterPos distance _dropPos) < _dropAtDist)then{" \n
|
|
"driver _axeCopter doMove _finPos;" \n
|
|
"//hint format[""Redirecting %1"",_axeCopter];" \n
|
|
"_redirectDone = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "do_instinct">*/
|
|
class do_instinct
|
|
{
|
|
priority = 80.000000;
|
|
to="instinct";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "air_drop">*/
|
|
class air_drop
|
|
{
|
|
name = "air_drop";
|
|
init = /*%FSM<STATEINIT""">*/"_missionName = ""EventAirDrop"";" \n
|
|
"" \n
|
|
"//settings" \n
|
|
"_cHeight = 120;//Chopper Height" \n
|
|
"_maxDrops = 3;//Max drops during journey" \n
|
|
"_dropChanceMin = 20;// Other factors affect this eg smoke and visible player count" \n
|
|
"_freqCheck = 1.5;//Quick check every x ticks." \n
|
|
"_longCheck = 10;//Long checks duration" \n
|
|
"_msgMaxFrequency = 30;//Only show message every x ticks." \n
|
|
"_dropAtDist = (floor (random 380)) max 220;//Pilot can spot players in the range." \n
|
|
"" \n
|
|
"//Default Vars" \n
|
|
"_plrArr = [""Epoch_Man_base_F"",""Epoch_Female_base_F""];" \n
|
|
"_doDispose = false;" \n
|
|
"_plyr = player;" \n
|
|
"_plyrPos = getPos _plyr;" \n
|
|
"_tStart = diag_tickTime;" \n
|
|
"_callDispose = false;" \n
|
|
"_m = diag_tickTime;" \n
|
|
"_axeMessage = """";" \n
|
|
"_wDiag = """";" \n
|
|
"_wDiag2 = """";" \n
|
|
"_missionTimer = diag_tickTime;" \n
|
|
"_sanityCheck = 0;" \n
|
|
"_criteria =""(false)"";" \n
|
|
"_criteriaMetAction = nil;" \n
|
|
"_actionDone = false;" \n
|
|
"_decisionMade = false;" \n
|
|
"_sWait = 0;" \n
|
|
"_lt = diag_tickTime;" \n
|
|
"_t = _lt;" \n
|
|
"axeInDropMission = true;" \n
|
|
"_startPos = [0,0,0];" \n
|
|
"_isOnWater = true;//To Do" \n
|
|
"_smokeAndLights = [""SmokeShell"",""SmokeShellRed"",""SmokeShellGreen"",""SmokeShellYellow"",""SmokeShellPurple"",""SmokeShellBlue"",""SmokeShellOrange""];" \n
|
|
"if(SunOrMoon < 1)then{" \n
|
|
"_smokeAndLights = [""Chemlight_green"",""Chemlight_red"",""Chemlight_yellow"",""Chemlight_blue""];" \n
|
|
"};" \n
|
|
"axeFiredNear = ["""",""""];" \n
|
|
"_smokeEH = _plyr addEventHandler [""FiredNear"", ""airDropHandle setFSMVariable [""""axeFiredNear"""",[_this select 3, _this select 6]];""];" \n
|
|
"_smokeCount = 0;" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 5.000000;
|
|
to="setup";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doneCheck = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "instinct">*/
|
|
class instinct
|
|
{
|
|
name = "instinct";
|
|
init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "instinct_done">*/
|
|
class instinct_done
|
|
{
|
|
priority = 100.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_decisionMade;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "dispose">*/
|
|
class dispose
|
|
{
|
|
priority = 90.000000;
|
|
to="instinct";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"!alive driver _axeCopter || _callDispose;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDispose = true;" \n
|
|
"_decisionMade = true;" \n
|
|
"_actionDone = false;" \n
|
|
"" \n
|
|
""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "long_checks">*/
|
|
class long_checks
|
|
{
|
|
priority = 85.000000;
|
|
to="long_checks";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"!_decisionMade && diag_tickTime - _lt > _longCheck;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "drop">*/
|
|
class drop
|
|
{
|
|
priority = 85.000000;
|
|
to="instinct";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_callDrop;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDrop = true;" \n
|
|
"_decisionMade = true;" \n
|
|
"" \n
|
|
""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "no_instinct">*/
|
|
class no_instinct
|
|
{
|
|
priority = 80.000000;
|
|
to="reset___checks";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"!_decisionMade && diag_tickTime - _t > _freqCheck;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "action">*/
|
|
class action
|
|
{
|
|
name = "action";
|
|
init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "complete">*/
|
|
class complete
|
|
{
|
|
priority = 100.000000;
|
|
to="long_checks";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"" \n
|
|
"if(!isNil ""_criteriaMetAction"")then{" \n
|
|
"call _criteriaMetAction;" \n
|
|
"};" \n
|
|
"" \n
|
|
"//Reset Brain Vars" \n
|
|
"_criteria =""(false)"";" \n
|
|
"_criteriaMetAction = nil;" \n
|
|
"_actionDone = false;" \n
|
|
"_decisionMade = false;" \n
|
|
"_sWait = 0;" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "dispose">*/
|
|
class dispose
|
|
{
|
|
priority = 95.000000;
|
|
to="end";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doDispose;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "drop">*/
|
|
class drop
|
|
{
|
|
priority = 0.000000;
|
|
to="check_landing";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doDrop;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDrop = false;" \n
|
|
"_callDrop = false;" \n
|
|
"_t = diag_tickTime;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "end">*/
|
|
class end
|
|
{
|
|
name = "end";
|
|
init = /*%FSM<STATEINIT""">*/"{" \n
|
|
"deleteVehicle _x;" \n
|
|
"}forEach units group _axeCopter;" \n
|
|
"" \n
|
|
"_plyr removeEventHandler [""FiredNear"", _smokeEH];" \n
|
|
"" \n
|
|
"deleteVehicle _axeCopter;" \n
|
|
"" \n
|
|
"axeInDropMission = false;" \n
|
|
"" \n
|
|
"diag_log ""Dispose"";" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "do_drop">*/
|
|
class do_drop
|
|
{
|
|
name = "do_drop";
|
|
init = /*%FSM<STATEINIT""">*/"" \n
|
|
"EPOCH_airDropCrate_PVS = [_axeCopter,_plyr,Epoch_personalToken];" \n
|
|
"publicVariableServer ""EPOCH_airDropCrate_PVS"";" \n
|
|
"" \n
|
|
"_dropDone = true;" \n
|
|
"" \n
|
|
"_sWait = 0;" \n
|
|
"_actionDone = true;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_criteria = ""(unitReady (driver _axeCopter))"";" \n
|
|
"_criteriaMetAction = compile """ \n
|
|
"driver _axeCopter doMove _finPos;" \n
|
|
""";"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 5.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doneCheck = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "setup">*/
|
|
class setup
|
|
{
|
|
name = "setup";
|
|
init = /*%FSM<STATEINIT""">*/"//Mission specific vars" \n
|
|
"" \n
|
|
"//Drop" \n
|
|
"_dropDone = false;" \n
|
|
"_nearDrop = false;" \n
|
|
"" \n
|
|
"_callDrop = false;" \n
|
|
"_doDrop = false;" \n
|
|
"_dropCount = 0;" \n
|
|
"_dropChance= _dropChanceMin;" \n
|
|
"_dropChanceCheck = 100;" \n
|
|
"_dropDone = false;" \n
|
|
"axeDropLight = objNull;" \n
|
|
"" \n
|
|
"//Players" \n
|
|
"_nrPlyrs = [];" \n
|
|
"_nrSmokes = [];" \n
|
|
"axePlyrFired = """";" \n
|
|
"_isSmoke = false;" \n
|
|
"_smokeSeen = false;" \n
|
|
"" \n
|
|
"//Move On" \n
|
|
"_callMoveOn = false;" \n
|
|
"" \n
|
|
"//Copter" \n
|
|
"axeMissionObj = objNull;" \n
|
|
"axeCopterFiredNear = [objNull,0];" \n
|
|
"axeCopterHit = [objNull,0];" \n
|
|
"_startPos = getMarkerPos ""center"";" \n
|
|
"" \n
|
|
"_redirectDone = false;" \n
|
|
"" \n
|
|
"//Debug" \n
|
|
"// _startPos = (getPosATl player) findEmptyPosition [1,75,""B_Heli_Transport_01_F""];" \n
|
|
"_finPos = [_startPos, ((_startPos distance _plyrPos) *2) max 2000, [_startPos, _plyrPos] call BIS_fnc_dirTo] call BIS_fnc_relPos;" \n
|
|
"" \n
|
|
"//Attack" \n
|
|
"_doAttack = false;" \n
|
|
"_callAttack = false;" \n
|
|
"_trgt = objNull;" \n
|
|
"" \n
|
|
"//Drop" \n
|
|
"//axeLightColours = [[0.8438, 0.1383, 0.1353],[0.2125, 0.6258, 0.4891],[0.9883, 0.8606, 0.0719],[0.4341, 0.1388, 0.4144],[0.1183, 0.1867, 1],[0.6697, 0.2275, 0.10053],[1, 0.4177, 0.7588]];" \n
|
|
"" \n
|
|
"_plyrPos = getPosATL player;" \n
|
|
"" \n
|
|
"_dropPos = _plyrPos;" \n
|
|
"" \n
|
|
"EPOCH_createAirDrop_PVS = [player,Epoch_personalToken,_startPos];" \n
|
|
"publicVariableServer ""EPOCH_createAirDrop_PVS"";" \n
|
|
"" \n
|
|
"" \n
|
|
"_axeCopter = objNull;" \n
|
|
"_copters = [];" \n
|
|
"_findTimer = diag_TickTime;" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 5.000000;
|
|
to="find_Copter";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doneCheck = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "long_checks">*/
|
|
class long_checks
|
|
{
|
|
name = "long_checks";
|
|
init = /*%FSM<STATEINIT""">*/""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "done_long_checks">*/
|
|
class done_long_checks
|
|
{
|
|
priority = 100.000000;
|
|
to="reset___checks";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_sanityCheck < 1;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_sanityCheck = 100;" \n
|
|
"_lt = diag_tickTime;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "checks">*/
|
|
class checks
|
|
{
|
|
priority = 60.000000;
|
|
to="long_checks";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_sanityCheck > 60;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_dropDistAway = _axeCopter distance _dropPos;" \n
|
|
"_dropChanceCheck = random 100;" \n
|
|
"_copterPos = getPos _axeCopter;" \n
|
|
"_floorCopterPos = _copterPos;" \n
|
|
"_floorCopterPos set [2,0];" \n
|
|
"" \n
|
|
"//Find Players" \n
|
|
"_nrPlyrs = nearestObjects[_floorCopterPos, _plrArr, (_dropAtDist * 1.8)];" \n
|
|
"if(count _nrPlyrs > 0)then{" \n
|
|
"_dropPos = getPosATL (_nrPlyrs select 0);" \n
|
|
"_nearDrop = true;" \n
|
|
"}else{" \n
|
|
"_nearDrop = false;" \n
|
|
"};" \n
|
|
"" \n
|
|
"//Find Smoke / Chemlight" \n
|
|
"if!(_isSmoke)then{" \n
|
|
"if!(isNull ((getposATL _plyr) nearestobject ""SmokeShell""))then{" \n
|
|
"_isSmoke = true;" \n
|
|
"};" \n
|
|
"};" \n
|
|
"" \n
|
|
"//Redirect to finish" \n
|
|
"if(!_redirectDone && (_floorCopterPos distance _dropPos) < _dropAtDist)then{" \n
|
|
"driver _axeCopter doMove _finPos;" \n
|
|
"_redirectDone = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"//Dispose" \n
|
|
"" \n
|
|
"if(_dropDone)then{" \n
|
|
"_nrPlyrsCS = nearestObjects[_floorCopterPos, _plrArr, 1800];" \n
|
|
"if(count _nrPlyrsCS < 1)then{" \n
|
|
"_callDispose = true;" \n
|
|
"};" \n
|
|
"};" \n
|
|
"" \n
|
|
"//Potential for players to see copter dispose.." \n
|
|
"if(_axeCopter distance _finPos < 400 || !(canMove _axeCopter))then{" \n
|
|
"_callDispose = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"//Messaging" \n
|
|
"if(_t - _m > _msgMaxFrequency)then{" \n
|
|
"" \n
|
|
"if(_wDiag != """")then{" \n
|
|
"titleText [_wDiag,""PLAIN"",6];" \n
|
|
"};" \n
|
|
"" \n
|
|
"if(_wDiag2 != """")then{" \n
|
|
"" \n
|
|
"_wDiag2 spawn {" \n
|
|
"uiSleep 6;" \n
|
|
"titleText [_this,""PLAIN"",6];" \n
|
|
"};" \n
|
|
"" \n
|
|
"};" \n
|
|
"" \n
|
|
"_wDiag = """";" \n
|
|
"_wDiag2 = """";" \n
|
|
"_m = _t;" \n
|
|
"};" \n
|
|
"" \n
|
|
"_sanityCheck = 0;" \n
|
|
"" \n
|
|
""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "find_Copter">*/
|
|
class find_Copter
|
|
{
|
|
name = "find_Copter";
|
|
init = /*%FSM<STATEINIT""">*/"_axeCopter = axeMissionObj;" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "failed">*/
|
|
class failed
|
|
{
|
|
priority = 30.000000;
|
|
to="instinct";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"isNull _axeCopter && diag_tickTime - _findTimer > 30;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDispose = true;" \n
|
|
"_decisionMade = true;" \n
|
|
"_t = diag_tickTime;" \n
|
|
""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "found">*/
|
|
class found
|
|
{
|
|
priority = 20.000000;
|
|
to="hover";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"!isNull _axeCopter;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"//systemchat format [""found: %1 / %2"",_axeCopter,axeMissionObj];" \n
|
|
"" \n
|
|
"_axeCopter flyinheight _cHeight;" \n
|
|
"_driver = driver _axeCopter;" \n
|
|
"" \n
|
|
"_grp = group _driver;" \n
|
|
"_grpCopter = _grp;" \n
|
|
"_unit = gunner _axeCopter;" \n
|
|
"" \n
|
|
"_axeCopter setVehicleLock ""LOCKEDPLAYER""; " \n
|
|
"" \n
|
|
"_grp setCombatMode ""BLUE""; "/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "not_found">*/
|
|
class not_found
|
|
{
|
|
priority = 10.000000;
|
|
to="find_Copter";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"isNull _axeCopter && diag_tickTime - _t > 0.5;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_t = diag_tickTime;" \n
|
|
"//systemchat format [""not found: %1 / %2"",_axeCopter,axeMissionObj];"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "hover">*/
|
|
class hover
|
|
{
|
|
name = "hover";
|
|
init = /*%FSM<STATEINIT""">*/"//systemchat format[""Hovering: %1"",unitReady _driver];"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "wait">*/
|
|
class wait
|
|
{
|
|
priority = 0.000000;
|
|
to="hover";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"((getPosATL _axeCopter) select 2) > (_cHeight *2);"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "arrived">*/
|
|
class arrived
|
|
{
|
|
priority = 0.000000;
|
|
to="reset___checks";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"((getPosATL _axeCopter) select 2) < (_cHeight *2);"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_driver doMove _dropPos;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "check_landing">*/
|
|
class check_landing
|
|
{
|
|
name = "check_landing";
|
|
init = /*%FSM<STATEINIT""">*/"_pos = getPosATL _axeCopter;"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "over_land">*/
|
|
class over_land
|
|
{
|
|
priority = 0.000000;
|
|
to="do_drop";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"! surfaceIsWater _pos"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "over_water">*/
|
|
class over_water
|
|
{
|
|
priority = 0.000000;
|
|
to="check_landing";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"surfaceIsWater _pos && diag_tickTime - _t > 3;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_t = diag_tickTime;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
};
|
|
initState="air_drop";
|
|
finalStates[] =
|
|
{
|
|
"end"
|
|
};
|
|
};
|
|
/*%FSM</COMPILE>*/ |