/*%FSM*/ /*%FSM*/ /* item0[] = {"vip",0,250,-50.000000,-475.000000,50.000000,-425.000000,0.000000,"vip"}; item1[] = {"no_instinct",4,218,50.000000,-150.000000,150.000000,-100.000000,80.000000,"no instinct"}; item2[] = {"instinct",2,250,150.000000,-200.000000,250.000000,-150.000000,0.000000,"instinct"}; item3[] = {"action",2,250,150.000000,25.000000,250.000000,75.000000,0.000000,"action"}; item4[] = {"dispose",4,218,75.000000,-325.000000,175.000000,-275.000000,90.000000,"dispose"}; item5[] = {"_",8,218,175.000000,275.000000,225.000000,300.000000,0.000000,""}; item6[] = {"reset___checks",2,250,-50.000000,-200.000000,50.000000,-150.000000,0.000000,"reset / checks"}; item7[] = {"_",8,218,-25.000000,-400.000000,25.000000,-375.000000,0.000000,""}; item8[] = {"complete",4,218,-100.000000,-100.000000,0.000000,-50.000000,100.000000,"complete"}; item9[] = {"end",1,250,400.000000,-125.000000,500.000000,-75.000000,0.000000,"end"}; item10[] = {"dispose",4,218,275.000000,-125.000000,375.000000,-75.000000,95.000000,"dispose"}; item11[] = {"instinct_done",4,218,150.000000,-125.000000,250.000000,-75.000000,100.000000,"instinct done"}; item12[] = {"follow",4,218,150.000000,-350.000000,250.000000,-300.000000,70.000000,"follow"}; item13[] = {"do_instinct",4,218,50.000000,-250.000000,150.000000,-200.000000,80.000000,"do instinct"}; item14[] = {"follow",4,218,325.000000,75.000000,425.000000,125.000000,0.000000,"follow"}; item15[] = {"do_follow",2,250,325.000000,250.000000,425.000000,300.000000,0.000000,"do follow"}; item16[] = {"get_in",4,218,225.000000,-375.000000,325.000000,-325.000000,60.000000,"get in"}; item17[] = {"get_in",4,218,-25.000000,75.000000,75.000000,125.000000,0.000000,"get in"}; item18[] = {"do_get_in",2,250,-25.000000,250.000000,75.000000,300.000000,0.000000,"do get in"}; item19[] = {"get_out",4,218,350.000000,-375.000000,450.000000,-325.000000,50.000000,"get out"}; item20[] = {"get_out",4,218,-100.000000,25.000000,0.000000,75.000000,0.000000,"get out"}; item21[] = {"do_get_out",2,250,-100.000000,325.000000,0.000000,375.000000,0.000000,"do get out"}; item22[] = {"drive_follow",4,218,400.000000,-325.000000,500.000000,-275.000000,40.000000,"drive follow"}; item23[] = {"drive_follow",4,218,225.000000,100.000000,325.000000,150.000000,0.000000,"drive follow"}; item24[] = {"drive_transport",2,250,225.000000,175.000000,325.000000,225.000000,0.000000,"drive transport"}; item25[] = {"scoot_over",4,218,425.000000,-275.000000,525.000000,-225.000000,30.000000,"scoot over"}; item26[] = {"scoot",4,218,75.000000,100.000000,175.000000,150.000000,0.000000,"scoot"}; item27[] = {"scoot_over",2,250,75.000000,175.000000,175.000000,225.000000,0.000000,"scoot over"}; item28[] = {"vehicle_damaged",4,218,400.000000,-225.000000,500.000000,-175.000000,20.000000,"vehicle damaged"}; item29[] = {"abandon_vehicle",4,218,400.000000,25.000000,500.000000,75.000000,0.000000,"abandon vehicle"}; item30[] = {"do_abandon",2,250,400.000000,325.000000,500.000000,375.000000,0.000000,"do abandon"}; item31[] = {"accomplished",4,218,325.000000,-175.000000,425.000000,-125.000000,80.000000,"accomplished"}; item32[] = {"accomplished",4,218,500.000000,-25.000000,600.000000,25.000000,0.000000,"accomplished"}; item33[] = {"mission_accompli",2,250,500.000000,425.000000,600.000000,475.000000,0.000000,"mission" \n "accomplished"}; item34[] = {"intro",2,4346,-50.000000,-350.000000,50.000000,-300.000000,0.000000,"intro"}; item35[] = {"_",8,218,-25.000000,-275.000000,25.000000,-250.000000,0.000000,""}; item36[] = {"long_checks",2,250,-275.000000,-100.000000,-175.000000,-50.000000,0.000000,"long checks"}; item37[] = {"done_long_checks",4,218,-275.000000,-200.000000,-175.000000,-150.000000,100.000000,"done long checks"}; item38[] = {"not_complete",4,218,75.000000,-75.000000,175.000000,-25.000000,0.000000,"not complete"}; item39[] = {"spawn_general",4,218,-200.000000,-25.000000,-100.000000,25.000000,0.000000,"spawn general"}; item40[] = {"spawn_general_and",2,250,-200.000000,425.000000,-100.000000,475.000000,0.000000,"spawn general" \n "and crew"}; item41[] = {"find_boat",2,250,-200.000000,150.000000,-100.000000,200.000000,0.000000,"find boat"}; item42[] = {"not_found",4,218,-375.000000,150.000000,-275.000000,200.000000,10.000000,"not found"}; item43[] = {"found",4,218,-200.000000,275.000000,-100.000000,325.000000,20.000000,"found"}; link0[] = {0,7}; link1[] = {1,6}; link2[] = {2,1}; link3[] = {2,4}; link4[] = {2,11}; link5[] = {2,12}; link6[] = {2,16}; link7[] = {2,19}; link8[] = {2,22}; link9[] = {2,25}; link10[] = {2,28}; link11[] = {2,31}; link12[] = {3,8}; link13[] = {3,10}; link14[] = {3,14}; link15[] = {3,17}; link16[] = {3,20}; link17[] = {3,23}; link18[] = {3,26}; link19[] = {3,29}; link20[] = {3,32}; link21[] = {3,38}; link22[] = {3,39}; link23[] = {4,2}; link24[] = {5,3}; link25[] = {6,13}; link26[] = {7,34}; link27[] = {8,36}; link28[] = {10,9}; link29[] = {11,3}; link30[] = {12,2}; link31[] = {13,2}; link32[] = {14,15}; link33[] = {15,5}; link34[] = {16,2}; link35[] = {17,18}; link36[] = {18,5}; link37[] = {19,2}; link38[] = {20,21}; link39[] = {21,5}; link40[] = {22,2}; link41[] = {23,24}; link42[] = {24,5}; link43[] = {25,2}; link44[] = {26,27}; link45[] = {27,5}; link46[] = {28,2}; link47[] = {29,30}; link48[] = {30,5}; link49[] = {31,2}; link50[] = {32,33}; link51[] = {33,5}; link52[] = {34,35}; link53[] = {35,6}; link54[] = {36,37}; link55[] = {37,6}; link56[] = {38,3}; link57[] = {39,41}; link58[] = {40,5}; link59[] = {41,42}; link60[] = {41,43}; link61[] = {42,41}; link62[] = {43,40}; globals[] = {25.000000,1,0,0,16777215,640,480,1,215,6316128,1,-396.858002,689.865723,568.440063,-450.015076,780,731,1}; window[] = {2,-1,-1,-1,-1,625,100,1125,100,3,798}; *//*%FSM*/ class FSM { fsmName = "vip"; class States { /*%FSM*/ class vip { name = "vip"; init = /*%FSM*/"_plyr = player;" \n "_missionName = ""MissionDriver"";" \n "" \n "//settings" \n "axeVIPLife = 3360;" \n "_freqCheck = 1.5;//Check every x ticks." \n "_msgMaxFrequency = 30;//Only show message every x ticks." \n "" \n "//vars" \n "_doDispose = false;" \n "_plyr = player;" \n "_plyrVeh = vehicle _plyr;" \n "this = objNull;" \n "_inHouse = false;" \n "_tStart = diag_tickTime;" \n "_callDispose = false;" \n "_house = objNull;" \n "_dist = 0;" \n "_doCOmplete = false;" \n "_completeDone = false;" \n "_m = diag_tickTime;" \n "_axeMessage = """";" \n "_wDiag = """";" \n "_wDiag2 = """";" \n "_missionTimer = diag_tickTime;" \n "_sanityCheck = 0;" \n "" \n "//Brain Vars" \n "_criteria =""(false)"";" \n "_criteriaMetAction = nil;" \n "_actionDone = false;" \n "_decisionMade = false;" \n "_sWait = 0;" \n "_nc = _missionTimer;" \n "" \n "//Follow" \n "_doFollow = false;" \n "_moveTo = [0,0,0];" \n "_driveFollow = false;" \n "" \n "//Vehicle" \n "_transport = objNull;" \n "_plyrInVeh = false;" \n "_vipInVeh = false;" \n "_plyrIsDriver = false;" \n "_vipIsDriver = false;" \n "_vipOut = false;" \n "_vipIn = false;" \n "_vehRunning = false;" \n "_doScoot = false;" \n "_abandonVeh = false;" \n "" \n "//The General" \n "_doGeneralSpawn = false;" \n "_generalSpawned = false;" \n "_generalsBoat = objNull;" \n "_grpGeneral = grpNull;" \n "_generalsInfo = [_generalsBoat, _grpGeneral];" \n "_warnCount = 0;" \n "_warnStarted = false;" \n "_reOrderEmbark = false;" \n "_generalLeft = 0;" \n "axeGeneralsBoat = objNull;" \n "axeGeneralsPosArr = [[22650.2,6868.35,0.00152194],[9289.64,22814.5,0.677413],[3564.18,13976.6,1.01361],[28065.1,23761,0.00155544]];" \n "axeGeneralBoatPosArr = [[22664.8,6840.91,-0.939753],[9362.45,22783,-0.938808],[3492.48,13964.6,-0.943063],[28023.1,23801.9,-0.919816]];" \n "axeGeneralBoatFinArr = [[25248.5,3968.91,0],[17251.7,28554.2,0],[733.202,16893.8,0],[30364.1,26509.3,0]];" \n "axeGeneralPosIndex = floor random count axeGeneralsPosArr;" \n "" \n "axeGeneralBoatPos = axeGeneralBoatPosArr select axeGeneralPosIndex;" \n "axeGeneralPos = axeGeneralsPosArr select axeGeneralPosIndex; " \n "_genPosX = [axeGeneralsPosArr select axeGeneralPosIndex select 0,2] call EPOCH_fnc_stringLeft;" \n "_genPosY = [axeGeneralsPosArr select axeGeneralPosIndex select 1,3] call EPOCH_fnc_stringLeft;" \n "_endAlert = 0;" \n "//Setup" \n "" \n "" \n "_nickName = ""Son"";" \n "" \n "if (_plyr iskindof ""Epoch_Female_base_F"") then {" \n "_nickName = ""Young Lady"";" \n "};" \n "" \n "//In Mission Events" \n "_doMission1 = false;" \n "_doMission2 = false;" \n "_doMission3 = false;" \n "_imCondition1 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission1"" >> ""condition"");" \n "_imCondition2 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission2"" >> ""condition"");" \n "_imCondition3 = getText ( configFile >> ""TraderMissions"" >> _missionName >> ""inmission3"" >> ""condition"");" \n "" \n "" \n " EPOCH_VIP_Mission_Accomplished = {" \n "" \n " [axeVIP] join group axeGeneral;" \n " {" \n " _x assignAsCargo axeGeneralsBoat;" \n " }forEach units grpVIPGeneral;" \n "" \n " axeGeneral assignAsCommander axeGeneralsBoat;" \n " axeGBoatDriver = units grpVIPGeneral select 1;" \n " axeGBoatDriver assignAsDriver axeGeneralsBoat;" \n " units grpVIPGeneral orderGetIn true;" \n "" \n " };" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="intro"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class instinct { name = "instinct"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class instinct_done { priority = 100.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_decisionMade;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dispose { priority = 90.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!alive _plyr || _callDispose;"/*%FSM*/; action=/*%FSM*/"_doDispose = true;" \n "_decisionMade = true;" \n "_actionDone = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class no_instinct { priority = 80.000000; to="reset___checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > _freqCheck;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class accomplished { priority = 80.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_completeDist < 10 && !_doCOmplete;"/*%FSM*/; action=/*%FSM*/"_doCOmplete = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class follow { priority = 70.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_vipInVeh && _dist > 4 && !_plyrInVeh && !_completeDone;" \n ""/*%FSM*/; action=/*%FSM*/"_doFollow = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class get_in { priority = 60.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_plyrInVeh && _plyrIsDriver && !_vipInVeh && !_completeDone;" \n ""/*%FSM*/; action=/*%FSM*/"_vipIn = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class get_out { priority = 50.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_plyrInVeh && !_vehRunning && _vipInVeh && !_completeDone;"/*%FSM*/; action=/*%FSM*/"_vipOut = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class drive_follow { priority = 40.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_dist > 50 && _vipInVeh && _vehRunning && !_completeDone;"/*%FSM*/; action=/*%FSM*/"_driveFollow = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class scoot_over { priority = 30.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_vipIsDriver && _dist < 6;"/*%FSM*/; action=/*%FSM*/"_doScoot = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class vehicle_damaged { priority = 20.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_transportDisabled && _vehDist < 42;"/*%FSM*/; action=/*%FSM*/"_abandonVeh = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class action { name = "action"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class complete { priority = 100.000000; to="long_checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/; action=/*%FSM*/"" \n "if (!isNil ""_criteriaMetAction"") then {" \n "call _criteriaMetAction;" \n "};" \n "" \n "//Brain Vars" \n "_criteria =""(false)"";" \n "_criteriaMetAction = nil;" \n "_actionDone = false;" \n "_decisionMade = false;" \n "_sWait = 0;" \n "" \n "_sanityCheck > 0;" \n "" \n "" \n "" \n "" \n "" \n "" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dispose { priority = 95.000000; to="end"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doDispose;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class get_in { priority = 0.000000; to="do_get_in"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_vipIn;"/*%FSM*/; action=/*%FSM*/"_vipIn = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class get_out { priority = 0.000000; to="do_get_out"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_vipOut;"/*%FSM*/; action=/*%FSM*/"_vipOut = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class follow { priority = 0.000000; to="do_follow"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doFollow;"/*%FSM*/; action=/*%FSM*/"_doFollow = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class drive_follow { priority = 0.000000; to="drive_transport"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_driveFollow;"/*%FSM*/; action=/*%FSM*/"_driveFollow = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class scoot { priority = 0.000000; to="scoot_over"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doScoot;"/*%FSM*/; action=/*%FSM*/"_doScoot = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class abandon_vehicle { priority = 0.000000; to="do_abandon"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_abandonVeh"/*%FSM*/; action=/*%FSM*/"_abandonVeh = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class accomplished { priority = 0.000000; to="mission_accompli"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doCOmplete && !_completeDone;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class not_complete { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"diag_tickTime - _nc > 3;"/*%FSM*/; action=/*%FSM*/"_nc = diag_tickTime;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class spawn_general { priority = 0.000000; to="find_boat"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doGeneralSpawn;"/*%FSM*/; action=/*%FSM*/"_doGeneralSpawn = false;" \n "_boats = [];" \n "_findTimer = diag_TickTime;" \n "" \n "EPOCH_createObject_PVS = [player,Epoch_personalToken,""I_Boat_Armed_01_minigun_F"",true,axeGeneralBoatPos,""CAN_COLLIDE"","""","""","""","""",true];" \n "publicVariableServer ""EPOCH_createObject_PVS"";" \n "" \n "" \n ""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class reset___checks { name = "reset___checks"; init = /*%FSM*/"_rnd = floor random 100;" \n "_dist = axeVIP distance _plyr;" \n "_plyrVeh = vehicle _plyr;" \n "_plyrInVeh = vehicle player != player;" \n "_vipInVeh = vehicle axeVIP != axeVIP;" \n "_plyrIsDriver = (driver vehicle player == player) && _plyrInVeh;" \n "_vehRunning = (_vipInVeh && isEngineOn vehicle axeVIP);" \n "_vipIsDriver = (driver vehicle axeVIP == axeVIP) &&_vipInVeh;" \n "_completeDist = axeVIP distance axeGeneralPos;" \n "_transportDisabled = (!canmove _transport);" \n "_vehDist = axeVIP distance _transport;" \n "_t = diag_tickTime;" \n "" \n "if!(_generalSpawned) then {" \n "" \n " if (axeGeneralPos distance _plyr < 500) then {" \n " _doGeneralSpawn = true;" \n " _decisionMade = true;" \n " };" \n "" \n "};" \n "" \n "if (_completeDone) then {" \n "" \n " if (_plyr distance axeGeneralsBoat > 500) then {" \n " _callDispose = true;" \n " };" \n " " \n " if (count crew axegeneralsboat >= ({alive _x} count units grpVIPGeneral) && _generalLeft < 1) then {" \n " _generalLeft = _generalLeft + 1;" \n " [] spawn {" \n " uiSleep 30;" \n " (driver axeGeneralsBoat) doMove (axeGeneralBoatFinArr select axeGeneralPosIndex);" \n " };" \n " };" \n " };" \n "" \n "" \n "" \n "if (_plyr in (crew axeGeneralsBoat)) then {" \n "playSound3D [""A3\Sounds_F\sfx\alarm.wss"", _plyr];" \n "" \n "if!(_warnStarted) then {" \n "_leaveMsgs = [""Leave the transport immediately !"",format[""%1, I suggest you leave that boat..\nRight Now !"",_nickName],format[""If you value your life %1 disembark.\nRight Now !"",_nickName]];" \n "_leaveMsg = _leaveMsgs select floor (random (count _leaveMsgs));" \n "titleText [_leaveMsg,""PLAIN"",3];" \n "_warnStarted = true;" \n "};" \n "_warnCount = _warnCount + 1;" \n "if (_warnCount > 3) then {" \n "_plyr action [""Eject"", vehicle _plyr];" \n "_warnStarted = false;" \n "_reOrderEmbark = true;" \n "};" \n "};" \n "" \n "//Redoing stuff the player breaks" \n "" \n "if (_reOrderEmbark) then {" \n "[] spawn EPOCH_VIP_Mission_Accomplished;" \n "_reOrderEmbark = false;" \n "};" \n "" \n "" \n "" \n "//Messaging" \n "" \n "//Player out of running vehicle message" \n "//Maybe move to long checks - if they work.." \n "" \n "if (!_plyrInVeh && _vehRunning && _vipInVeh && !_completeDone) then {" \n "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""gotout"" >> ""dialogue"");" \n "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""gotout"" >> ""dialogue2"");" \n "" \n "_rndWChoice = floor (random (count _wInDiag));" \n "" \n " _wDiag = _wInDiag select _rndWChoice;" \n " _wDiag2 = _wInDiag2 select _rndWChoice;" \n "};" \n "" \n "" \n "" \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 ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class do_instinct { priority = 80.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class end { name = "end"; init = /*%FSM*/"{" \n "deleteVehicle _x;" \n "}forEach units grpVIPGeneral;" \n "" \n "deleteVehicle axeGeneralsBoat;" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class do_follow { name = "do_follow"; init = /*%FSM*/"if (behaviour axeVIP !=""AWARE"") then {" \n "_grp setBehaviour ""AWARE"";" \n "};" \n "_moveTo = [getPosATL _plyr, 3, floor (random 360)] call BIS_fnc_relPos;" \n "axeVIP doMove _moveTo;" \n "" \n "_sWait = axeVIP distance _moveTo;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""((axeVIP distance _moveTo < 2) || (axeVIP distance _plyr < 4))"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class do_get_in { name = "do_get_in"; init = /*%FSM*/"if (isNull _transport) then {" \n "_transport = vehicle player;" \n "};" \n "" \n "axeVIP assignAsCargo vehicle player;" \n "[axeVIP] orderGetIn true;" \n "" \n "_sWait = 1.5;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class do_get_out { name = "do_get_out"; init = /*%FSM*/"axeVIP action [""Eject"", vehicle axeVIP];" \n "unassignVehicle axeVIP;" \n "" \n "_sWait = 1.5;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class drive_transport { name = "drive_transport"; init = /*%FSM*/"_nrRoads = getPos _plyr nearRoads _dist; " \n "if (count _nrRoads > 0) then {" \n "" \n "if (behaviour axeVIP !=""SAFE"") then {" \n "_grp setBehaviour ""SAFE"";" \n "};" \n "axeVIP assignAsDriver vehicle axeVIP;" \n "axeVIP moveInDriver vehicle axeVIP;" \n "_nrstRoads = [_nrRoads, getPosATL _plyr] call Epoch_SortArrayByDistance;" \n "_moveTo = getPosATL (_nrstRoads select 0);" \n "axeVIP doMove _moveTo;" \n "};" \n "" \n "_sWait = axeVIP distance _moveTo;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""((axeVIP distance _moveTo < 12) || (axeVIP distance _plyr < 12))"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class scoot_over { name = "scoot_over"; init = /*%FSM*/"axeVIP assignAsCargo vehicle axeVIP;" \n "axeVIP moveInCargo vehicle axeVIP;" \n "" \n "_sWait = 1.5;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class do_abandon { name = "do_abandon"; init = /*%FSM*/"unassignVehicle axeVIP;" \n "_transport = objNull;" \n "" \n "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""vehlost"" >> ""dialogue"");" \n "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""missioncheck"" >> ""vehlost"" >> ""dialogue2"");" \n "" \n "_rndWChoice = floor (random (count _wInDiag));" \n "" \n " _wDiag = _wInDiag select _rndWChoice;" \n " _wDiag2 = _wInDiag2 select _rndWChoice;" \n "" \n "_sWait = 1.5;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class mission_accompli { name = "mission_accompli"; init = /*%FSM*/"[] spawn EPOCH_VIP_Mission_Accomplished;" \n "_completeDone = true;" \n "" \n "{" \n "if (_x != axeGeneral && _x != axeVIP) then {" \n "_x setBehaviour ""AWARE"";" \n "};" \n "}forEach units group axeGeneral;" \n "" \n "_wInDiag = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue"");" \n "_wInDiag2 = getArray ( configFile >> ""TraderMissions"" >> _missionName >> ""completed"" >> ""dialogue2"");" \n "" \n "_rndWChoice = floor (random (count _wInDiag));" \n "" \n " _wDiag = _wInDiag select _rndWChoice;" \n " _wDiag2 = _wInDiag2 select _rndWChoice;" \n "" \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 "" \n "EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,axeGeneralsBoat,false,25];" \n "publicVariableServer ""EPOCH_FillContainer_PVS"";" \n "" \n "_sWait = 1.5;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class intro { name = "intro"; init = /*%FSM*/"" \n "" \n "_pos = (getPosATL player) findEmptyPosition [25,100,""Epoch_Female_CamoRed_F""];" \n "if (_pos isEqualTo []) then {" \n "_pos = getPosATL player;" \n "};" \n "_grp = createGroup (side _plyr);" \n "axeVIP = _grp createUnit [""Epoch_Female_CamoRed_F"",_pos,[],0,""FORM""];" \n "" \n "if !(isNull axeVIP) then {" \n " EPOCH_TEMPOBJ_PVS = axeVIP;" \n " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n "};" \n "" \n "_grp setCombatMode ""BLUE"";" \n "_grp setBehaviour ""AWARE"";" \n "axeVIP setUnitPos ""UP"";" \n "" \n "axeVIP setSkill [""endurance"", 1];" \n "axeVIP setSkill [""spotDistance"", 1];" \n "axeVIP setSkill [""spotTime"", 1];" \n "axeVIP setSkill [""courage"", 0.9];" \n "axeVIP setSkill [""general"", 1];" \n "" \n "" \n "_item=""H_Cap_red"";" \n "axeVIP addItemToVest _item;" \n "axeVIP assignItem _item;" \n "" \n "_item=""G_Tactical_Black"";" \n "axeVIP addItemToVest _item;" \n "axeVIP assignItem _item;" \n "" \n "_wInDiag = getArray ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""dialogue"");" \n "_wInDiag2 = getArray ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""dialogue2"");" \n "_wInItem = getArray ( configFile >> ""traderMissions"" >> _missionName >> ""welcome"" >> ""item"");" \n "" \n "_rndWChoice = floor (random (count _wInDiag));" \n "" \n " _wDiag = _wInDiag select _rndWChoice;" \n " _wDiag2 = _wInDiag2 select _rndWChoice;" \n "" \n "titleText [_wDiag,""PLAIN"",6];" \n "if (_wDiag2 != """") then {" \n "_wDiag2 spawn {" \n "uiSleep 6;" \n "titleText [_this,""PLAIN"",3];" \n "};" \n "" \n "};" \n "" \n "//Give player end location" \n "[_genPosX,_genPosY] spawn {" \n "uiSleep 12;" \n "_endPosY = format[""0%1"",_this select 0];" \n "titleText [format[""**IMPORTANT**\nThe pickup is at map location %1 - %2"", _endPosY,_this select 1],""PLAIN"",6];" \n "" \n "};" \n "" \n "_wDiag = """";" \n "_wDiag2 = """";" \n "" \n "_wItem = _wInItem select _rndWChoice;" \n "if!(_wItem in assignedItems _plyr) then {" \n "_plyr addItemToVest _wItem;" \n "_plyr assignItem _wItem;" \n "};" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="reset___checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class long_checks { name = "long_checks"; init = /*%FSM*/"if (diag_tickTime - _missionTimer > 1200) then {" \n "titleText [""Are you lost ?\nI will check the drop off point for you, wait one."",""PLAIN"",3];" \n "" \n "[_genPosX,_genPosY] spawn {" \n "uiSleep 12;" \n "_endPosY = format[""0%1"",_this select 0];" \n "titleText [format[""**IMPORTANT**\nThe pickup is at map location %1 - %2"", _endPosY,_this select 1],""PLAIN"",6];" \n "" \n "};" \n "" \n "_missionTimer = diag_tickTime;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class done_long_checks { priority = 100.000000; to="reset___checks"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class spawn_general_and { name = "spawn_general_and"; init = /*%FSM*/"" \n "" \n " grpVIPGeneral = createGroup RESISTANCE;" \n "" \n " axeGeneral = grpVIPGeneral createUnit [""I_Soldier_EPOCH"", axeGeneralPos, [], 1, ""CAN_COLLIDE""];" \n " axeGeneral setUnitPos ""UP"";" \n " axeGeneralsBoat setDir ([axeGeneral, axeGeneralsBoat] call BIS_fnc_dirTo);" \n " axeGeneral addEventHandler [""FiredNear"", ""group (_this select 0) setVariable[""""shotsFired"""",[(_this select 1),(_this select 2)]]""];" \n " axeGeneral addEventHandler [""Killed"", ""group (_this select 0) setVariable[""""killer"""",_this select 1]""];" \n " removeAllWeapons axeGeneral;" \n "" \n "if !(isNull axeGeneral) then {" \n " EPOCH_TEMPOBJ_PVS = axeGeneral;" \n " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n "};" \n "" \n " for ""_i"" from 1 to 3 step 1 do" \n " { " \n " _startPos = getPosATL axeGeneral; " \n " " \n " _unit = grpVIPGeneral createUnit [""I_Soldier_EPOCH"", _startPos, [], 20, ""CAN_COLLIDE""];" \n " _unit setBehaviour ""COMBAT"";" \n " _unit addEventHandler [""FiredNear"", ""group (_this select 0) setVariable[""""shotsFired"""",[(_this select 1),(_this select 2)]]""];" \n " _unit addEventHandler [""Killed"", ""group (_this select 0) setVariable[""""killer"""",_this select 1]""];" \n " if !(isNull _unit) then {" \n " EPOCH_TEMPOBJ_PVS = _unit;" \n " publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n " };" \n " [_unit,axeGeneral] execFSM ""\x\addons\a3_epoch_code\System\Mission_VIP_Militia.fsm"";" \n "" \n " };" \n "" \n "grpVIPGeneral setCombatMode ""BLUE""; " \n "" \n "_generalSpawned = true;" \n "_sWait = 0;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class find_boat { name = "find_boat"; init = /*%FSM*/"_boats = nearestObjects [axeGeneralBoatPos, [""I_Boat_Armed_01_minigun_F""], 250];" \n "if (count _boats > 0) then {" \n "axeGeneralsBoat = _boats select 0;" \n "};" \n "" \n "if!(isNull axeGeneralsBoat) then {" \n "axeGeneralsBoat setVehicleLock ""LOCKEDPLAYER""; " \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class found { priority = 20.000000; to="spawn_general_and"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(isNull axeGeneralsBoat);"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class not_found { priority = 10.000000; to="find_boat"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull axeGeneralsBoat || diag_tickTime - _findTimer > 0.5;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="vip"; finalStates[] = { "end" }; }; /*%FSM*/