/*%FSM*/ /*%FSM*/ /* item0[] = {"ai_leader",0,250,319.059235,-127.649353,409.059235,-77.649399,0.000000,"ai leader"}; item1[] = {"_",8,218,338.523376,-10.716812,390.475464,17.688435,0.000000,""}; item2[] = {"update",2,250,319.499451,93.657814,409.499451,143.657806,0.000000,"update"}; item3[] = {"near_destination",4,218,408.573456,158.579071,498.573456,208.579102,100.000000,"near" \n "destination"}; item4[] = {"player_in_sight",4,218,502.524200,39.617886,592.524170,89.617889,40.000000,"player" \n "in sight"}; item5[] = {"player_hidden",4,218,445.323975,-4.438395,535.323608,45.561600,30.000000,"player" \n "hidden"}; item6[] = {"dest_copter",2,250,583.815979,-26.369762,673.815979,23.630268,0.000000,"dest copter"}; item7[] = {"dest_player",2,250,706.111816,0.834900,796.111816,50.834904,0.000000,"dest player"}; item8[] = {"_",8,218,724.422119,104.861000,776.374146,133.266235,0.000000,""}; item9[] = {"wait_start",2,250,584.072021,93.724655,674.072021,143.724655,0.000000,"wait start"}; item10[] = {"wait",4,218,468.203522,93.278336,558.203247,143.278381,1.000000,"wait"}; item11[] = {"new_position",2,250,584.680847,298.649109,674.680847,348.649109,0.000000,"new position"}; item12[] = {"target_lost",4,218,18.489220,94.627281,108.489197,144.627258,50.000000,"target lost"}; item13[] = {"nearest_house",2,250,17.506531,-5.606630,107.506561,44.393475,0.000000,"nearest house"}; item14[] = {"end",1,250,314.447540,-310.915253,404.447571,-260.915253,0.000000,"end"}; item15[] = {"leader_dead",4,218,319.214050,212.361969,409.214050,262.361969,60.000000,"leader dead"}; item16[] = {"promotion",2,4346,319.214050,300.148834,409.214355,350.148834,0.000000,"promotion"}; item17[] = {"player_gone",4,218,198.134048,272.603302,288.134033,322.603271,45.000000,"player gone"}; item18[] = {"no_room",4,218,158.053757,-5.606592,248.053741,44.393425,1.000000,"no room"}; item19[] = {"next_house",2,250,158.030380,-96.996155,248.030426,-46.996162,0.000000,"next house"}; item20[] = {"new_player",2,250,319.869293,412.538513,409.869354,462.538452,0.000000,"new player"}; item21[] = {"_",8,218,36.839310,-86.383507,88.791382,-57.978252,0.000000,""}; item22[] = {"garrison",2,250,17.812634,-164.813538,107.812653,-114.813522,0.000000,"garrison"}; item23[] = {"no_room",4,218,158.053757,-180.290115,248.053741,-130.290115,1.000000,"no room"}; item24[] = {"Wait_240sec",4,218,151.791382,-310.784332,241.791382,-260.784332,0.000000,"Wait" \n "240sec"}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,3}; link3[] = {2,4}; link4[] = {2,5}; link5[] = {2,12}; link6[] = {2,15}; link7[] = {2,17}; link8[] = {3,11}; link9[] = {4,7}; link10[] = {5,6}; link11[] = {6,8}; link12[] = {7,8}; link13[] = {8,9}; link14[] = {9,10}; link15[] = {10,2}; link16[] = {11,8}; link17[] = {12,13}; link18[] = {13,18}; link19[] = {13,21}; link20[] = {15,16}; link21[] = {16,8}; link22[] = {17,20}; link23[] = {18,19}; link24[] = {19,21}; link25[] = {19,23}; link26[] = {20,8}; link27[] = {21,22}; link28[] = {22,24}; link29[] = {23,19}; link30[] = {24,14}; globals[] = {0.000000,0,0,0,0,640,480,1,41,6316128,1,-74.395943,883.356445,550.082520,-244.601898,881,731,1}; window[] = {2,-1,-1,-1,-1,853,125,1163,125,3,899}; *//*%FSM*/ class FSM { fsmName = "ai leader"; class States { /*%FSM*/ class ai_leader { name = "ai_leader"; init = /*%FSM*/"_leaderMoveTo = _this select 0;" \n "_copter = _this select 1;" \n "_plyr = _this select 2;" \n "_leader = _this select 3;" \n "_grp = group _leader;" \n "_lastSeen = time;" \n "axeAIGarrison = false;" \n "" \n "_trgt = _copter;" \n "_trgtPos = getPos _trgt;" \n "" \n "_leaderMinDist = 20;" \n "_leaderMaxDist = 60;" \n "" \n "//debug" \n "if (isNil ""axeDebug"") then {axeDebug = false;};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="update"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class update { name = "update"; init = /*%FSM*/"_leaderPosActual = getPosATL _leader;" \n "_canSeePlyr = (!lineIntersects [aimPos _plyr, eyePos _leader, _plyr, _leader]);" \n "_2dDistPlyr = _plyr distance2D (getPos _leader);" \n "_2DDistCopter = _copter distance2D (getPos _leader);" \n "_nrPlayers = _leaderPosActual nearEntities[[""Epoch_Male_F"", ""Epoch_Female_F""], 250];" \n "" \n "//debug" \n "if (axeDebug) then {" \n "axePositionFind = 0;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class near_destination { priority = 100.000000; to="new_position"; precondition = /*%FSM*/"_2dDistMove = _leaderMoveTo distance2D (getPos _leader);"/*%FSM*/; condition=/*%FSM*/"_2dDistMove < 12;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class leader_dead { priority = 60.000000; to="promotion"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!alive _leader;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class target_lost { priority = 50.000000; to="nearest_house"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_2dDistPlyr > 250) || (axeDebug && axeAIGarrison);"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class player_gone { priority = 45.000000; to="new_player"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_2dDistPlyr > 800) && (count _nrPlayers > 0) && ((time -_lastSeen) > 480 );"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class player_in_sight { priority = 40.000000; to="dest_player"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_canSeePlyr;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class player_hidden { priority = 30.000000; to="dest_copter"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_canSeePlyr;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class dest_copter { name = "dest_copter"; init = /*%FSM*/"_trgt =_copter;" \n "_trgtPos = getPos _copter;" \n "_leaderMinDist = 10;" \n "_leaderMaxDist = 60;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="wait_start"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class dest_player { name = "dest_player"; init = /*%FSM*/"_trgt = _plyr;" \n "_trgtPos = getPos _plyr;" \n "_leaderMinDist = 20;" \n "_leaderMaxDist = 80;" \n "_lastSeen = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="wait_start"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class wait_start { name = "wait_start"; init = /*%FSM*/"_t = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class wait { priority = 1.000000; to="update"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"time > _t + (1 + random 1);"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class new_position { name = "new_position"; init = /*%FSM*/"_leaderMoveTo = [_trgtPos,_leaderMinDist,_leaderMaxDist,5,0,5,0] call BIS_fnc_findSafePos;" \n "_leaderLastPos = getPosATL _leader;" \n "" \n "" \n "{" \n "_x doMove _leaderMoveTo;" \n "}forEach units _grp;" \n "" \n "//debug" \n "if (axeDebug) then {" \n "axePositionFind = axePositionFind +1;" \n "hint ""Leader Moving"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="wait_start"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class nearest_house { name = "nearest_house"; init = /*%FSM*/"_nrBuild = nearestBuilding _leader;" \n "_garrisonPos = getPos _nrBuild;" \n "" \n "" \n "" \n "_arrGarr = [];" \n "_garrCount = 0;" \n "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n "_arrGarr pushBack _garrCount;" \n "_garrCount = _garrCount + 1;" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class no_room { priority = 1.000000; to="next_house"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(count _arrGarr) <= ({alive _x} count (units _grp));"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class _ { priority = 0.000000; to="garrison"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class end { name = "end"; init = /*%FSM*/"{" \n "deleteVehicle _x;" \n "}forEach units _grp;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class promotion { name = "promotion"; init = /*%FSM*/"{" \n " if (alive _x)exitWith{ _leader = _x;_x enableAI ""AUTOTARGET"";};" \n "}forEach units _grp;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="wait_start"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class next_house { name = "next_house"; init = /*%FSM*/"_nrBuilds = nearestObjects [_leaderPosActual,[""house""],250];" \n "_nrBuild = _nrBuilds select (floor(random (count _nrBuilds)));" \n "" \n "" \n "_arrGarr = [];" \n "_garrCount = 0;" \n "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n "_arrGarr pushBack _garrCount;" \n "_garrCount = _garrCount + 1;" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class no_room { priority = 1.000000; to="next_house"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(count _arrGarr) <= ({alive _x} count (units _grp));"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class _ { priority = 0.000000; to="garrison"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class new_player { name = "new_player"; init = /*%FSM*/"_trgt = _nrPlayers select (floor(random (count _nrPlayers)));" \n "_plyr = _trgt;" \n "" \n "//debug" \n "if (axeDebug) then {" \n "axeDebugProcedure=""select new target"";" \n "axeNewTargets = axeNewTargets + 1;" \n "};" \n "" \n "//" \n "// A GOOD PLACE TO DEAL WITH OWNERSHIP TRANSFER.. (TODO: EPOCH_server_changeOwner;)" \n "// New Owner from _nrPlayers" \n "//"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="wait_start"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class garrison { name = "garrison"; init = /*%FSM*/"_grp setBehaviour ""CARELESS "";" \n "_grp setCombatMode ""GREEN"";" \n "_garrIndex = 0;" \n "{" \n "_garrPos = (_nrBuild buildingPos (_arrGarr select _garrIndex));" \n "_x doMove _garrPos;" \n "_garrIndex = _garrIndex + 1;" \n "}forEach units _grp;" \n "" \n "_t = diag_tickTime;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class Wait_240sec { priority = 0.000000; to="end"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(diag_tickTime - _t) > 240;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="ai_leader"; finalStates[] = { "end" }; }; /*%FSM*/