/*%FSM*/ /*%FSM*/ /* item0[] = {"looter",0,250,-316.429199,-195.383255,-226.429291,-145.383362,0.000000,"looter"}; item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""}; item2[] = {"instinct",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"instinct"}; item3[] = {"sanity_check",4,218,254.885590,-14.634194,344.885468,35.365761,110.000000,"sanity check"}; item4[] = {"action",2,250,164.446381,121.731827,254.446365,171.731903,0.000000,"action"}; item5[] = {"dispose",4,218,110.636703,-324.560150,200.636765,-274.560181,90.000000,"dispose"}; item6[] = {"_",8,218,182.964218,311.201538,234.916306,339.606750,0.000000,""}; item7[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"}; item8[] = {"_",8,218,-150.031967,-184.788101,-98.079796,-156.382797,0.000000,""}; item9[] = {"complete",4,218,-57.972878,-94.263466,32.027390,-44.263451,100.000000,"complete"}; item10[] = {"move",4,218,-0.342163,180.396515,89.657806,230.396545,20.000000,"move"}; item11[] = {"end",1,250,-241.719803,14.907898,-151.719772,64.907913,0.000000,"end"}; item12[] = {"dispose",4,218,-59.072083,14.028580,30.927921,64.028580,95.000000,"dispose"}; item13[] = {"do_move",2,250,-0.039097,298.845337,89.960938,348.845337,0.000000,"do move"}; item14[] = {"no_decision",4,218,38.858673,-279.436768,128.858643,-229.436798,95.000000,"no decision"}; item15[] = {"instinct_done",4,218,165.528030,-96.910675,255.527969,-46.910683,100.000000,"instinct done"}; item16[] = {"move",4,218,352.282043,-238.919754,442.282043,-188.919662,50.000000,"move"}; item17[] = {"feeling",2,250,472.400177,-15.063545,562.400085,34.936440,0.000000,"feeling"}; item18[] = {"seen_target",4,218,329.395966,-64.330688,419.395996,-14.330631,90.000000,"seen target"}; item19[] = {"checked",4,218,404.902252,83.974167,494.902252,133.974197,10.000000,"checked"}; item20[] = {"done",4,218,306.785492,15.474709,396.785431,65.474731,100.000000,"done"}; item21[] = {"map",4,218,193.335922,-354.356598,283.335938,-304.356598,80.000000,"map"}; item22[] = {"create_map",2,250,416.776306,-354.331238,506.776428,-304.331238,0.000000,"create map"}; item23[] = {"_",8,218,435.308929,-185.990021,487.261078,-157.584717,0.000000,""}; item24[] = {"health_check",4,218,405.445160,-104.903877,495.445251,-54.903847,80.000000,"health check"}; item25[] = {"near_entities",4,218,495.029236,-123.028557,585.029114,-73.028694,70.000000,"near entities"}; item26[] = {"stuck",4,218,517.684387,96.920174,607.683960,146.920197,20.000000,"stuck"}; item27[] = {"attack",4,218,402.979858,195.707932,492.979828,245.708084,30.000000,"attack"}; item28[] = {"approach_target",2,250,402.044464,298.770935,492.044525,348.771057,0.000000,"approach target"}; item29[] = {"close_to_target",4,218,403.431458,380.984894,493.431427,430.984894,20.000000,"close to target"}; item30[] = {"do_attack",2,4346,267.780060,380.324005,357.780273,430.324005,0.000000,"do attack"}; item31[] = {"not_close",4,218,269.156097,298.637848,359.156128,348.637695,10.000000,"not close"}; item32[] = {"attack",4,218,255.443695,-315.317230,345.443695,-265.317230,70.000000,"attack"}; item33[] = {"hide",4,218,314.806854,-279.385742,404.806854,-229.385834,60.000000,"hide"}; item34[] = {"hide",4,218,-137.562561,121.185471,-47.562569,171.185471,30.000000,"hide"}; item35[] = {"find_spot",2,250,-136.411499,303.054138,-46.411499,353.054138,0.000000,"find spot"}; item36[] = {"not_safe",4,218,-282.597107,303.054138,-192.597046,353.054138,10.000000,"not safe"}; item37[] = {"is_safe",4,218,-135.260468,380.175629,-45.260445,430.175629,5.000000,"is safe"}; item38[] = {"do_hide",2,250,-0.585583,379.024567,89.414429,429.024567,0.000000,"do hide"}; item39[] = {"gun_fire",4,218,577.061523,-89.227417,667.061523,-39.227440,60.000000,"gun fire"}; item40[] = {"calm_down",4,218,616.574707,-39.288197,706.574707,10.711815,50.000000,"calm down"}; item41[] = {"interrupt",4,218,58.118843,-94.064064,148.118866,-44.064060,90.000000,"interrupt"}; item42[] = {"armed___unarmed",4,218,610.712585,28.498322,700.712585,78.498322,40.000000,"armed / unarmed"}; link0[] = {0,8}; link1[] = {1,2}; link2[] = {2,5}; link3[] = {2,14}; link4[] = {2,15}; link5[] = {2,16}; link6[] = {2,21}; link7[] = {2,32}; link8[] = {2,33}; link9[] = {3,17}; link10[] = {4,3}; link11[] = {4,9}; link12[] = {4,10}; link13[] = {4,12}; link14[] = {4,27}; link15[] = {4,34}; link16[] = {4,41}; link17[] = {5,2}; link18[] = {6,4}; link19[] = {7,1}; link20[] = {8,7}; link21[] = {9,7}; link22[] = {10,13}; link23[] = {12,11}; link24[] = {13,6}; link25[] = {14,2}; link26[] = {15,4}; link27[] = {16,2}; link28[] = {17,18}; link29[] = {17,19}; link30[] = {17,20}; link31[] = {17,24}; link32[] = {17,25}; link33[] = {17,26}; link34[] = {17,39}; link35[] = {17,40}; link36[] = {17,42}; link37[] = {18,17}; link38[] = {19,17}; link39[] = {20,4}; link40[] = {21,22}; link41[] = {22,23}; link42[] = {23,2}; link43[] = {24,17}; link44[] = {25,17}; link45[] = {26,17}; link46[] = {27,28}; link47[] = {28,29}; link48[] = {28,31}; link49[] = {29,30}; link50[] = {30,6}; link51[] = {31,4}; link52[] = {32,2}; link53[] = {33,2}; link54[] = {34,35}; link55[] = {35,36}; link56[] = {35,37}; link57[] = {36,35}; link58[] = {37,38}; link59[] = {38,6}; link60[] = {39,17}; link61[] = {40,17}; link62[] = {41,7}; link63[] = {42,17}; globals[] = {0.000000,0,0,0,16777215,640,480,1,149,6316128,1,-188.069107,608.596313,708.185913,-337.291473,682,895,1}; window[] = {2,-1,-1,-32000,-32000,550,-1255,-230,25,3,700}; *//*%FSM*/ class FSM { fsmName = "looter"; class States { /*%FSM*/ class looter { name = "looter"; init = /*%FSM*/"_looter = _this select 0;" \n "_trgt = player;" \n "" \n "_looter setBehaviour ""COMBAT"";" \n "" \n "_looterNames=[""Jaws"",""Angel"",""Bull"",""Blue"",""Cookie"",""Coral"",""Dusky"",""White"",""Hammer"",""Mako"",""Smalltooth""];" \n "_looterName = _looterNames select (floor(random count _looterNames));" \n "" \n "_entsArr = [""Epoch_Male_F"",""Epoch_Female_F"",""Epoch_Sapper_F"",""Fin_random_EPOCH"",""Alsatian_Random_EPOCH"",""Epoch_cloak_F"",""b_survivor_F"",""Epoch_Female_Camo_F""];" \n "_plyArr = [""Epoch_Male_F"",""Epoch_Female_F"",""b_survivor_F"",""Epoch_Female_Camo_F""];" \n "_vehArray = [""Car""];" \n "_tRange = 20;" \n "_sRange = 200;" \n "_vRange = 50;" \n "_maxTravelTime = 480;" \n "_trgtZ = 0;" \n "_t = diag_tickTime;" \n "_d = _t;" \n "_u = _d;" \n "_a = _u;" \n "_h = _a;" \n "_c = _h;" \n "_dirTo = 0;" \n "_lDist = 0;" \n "" \n "_looterPos=[0,0,0];" \n "_trgtPos=[0,0,0];" \n "_hidePos = [0,0,0];" \n "_nrPlyrs = [];" \n "" \n "//Behaviour" \n "_fearTrigger = 12;" \n "_angerTrigger = 24;" \n "_lAnger = 0;" \n "_lFear = 0;" \n "_lBrave = 0;" \n "" \n "//Looter Vars" \n "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n "_skipBuild = false;" \n "_nrBuild = nearestBuilding _looter;" \n "_inBuild = objNull;" \n "_bCheckedCount = 0;" \n "_doMove = false;" \n "_bldMap = [];" \n "_sanityCheckDone = false;" \n "_arrGarr = [];" \n "_arrGarrCount = [];" \n "_canSee = false;" \n "_sanityCheck = 0;" \n "_lLastPos = [0,0,0];" \n "_sanityPos = [0,0,0];" \n "_sanityEnts = [];" \n "_attackPos =[0,0,0];" \n "_attackDir = 0;" \n "_doHide = false;" \n "_doAttack = false;" \n "_firedNear = 0;" \n "_closestBld = objNull;" \n "_lootVar = 0;" \n "" \n "" \n "//DEBUG" \n "_doDebug = false;" \n "_count = 0;" \n "_debugDo = ""INIT"";" \n "_mkrName = """";" \n "_dWait = 0;" \n "_strDebug = """";" \n "_looterFeels = ""STARTING"";" \n "axeCount = 0;" \n "_strMoveTo = """";" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="reset_vars"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class instinct { name = "instinct"; init = /*%FSM*/"_looterPos = getPos _looter;" \n "_nrEnts = _looterPos nearEntities [_entsArr, _sRange];" \n "_dist = _trgt distance _looter;" \n "_t = diag_tickTime;" \n "" \n "if (_doDebug) then {" \n "systemChat format [""Instinct:%1"",diag_tickTime];" \n "};" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class instinct_done { priority = 100.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_decisionMade;"/*%FSM*/; action=/*%FSM*/"_t = diag_tickTime;" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class no_decision { priority = 95.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dispose { priority = 90.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((_trgt distance _looter) > (_sRange * 2)) || !(alive _looter);"/*%FSM*/; action=/*%FSM*/"_doDispose = true;" \n "_decisionMade = true;" \n "_actionDone = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class map { priority = 80.000000; to="create_map"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _bldMap < 1;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class attack { priority = 70.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_lAnger > _angerTrigger;"/*%FSM*/; action=/*%FSM*/"_doAttack = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class hide { priority = 60.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_lFear > _fearTrigger;"/*%FSM*/; action=/*%FSM*/"_doHide = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class move { priority = 50.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"count _bldMap > 0;"/*%FSM*/; action=/*%FSM*/"_doMove = true;" \n "_decisionMade = true;"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class action { name = "action"; init = /*%FSM*/"" \n "" \n "if (_doDebug) then {" \n "systemChat format [""Action:%1"",diag_tickTime];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class sanity_check { priority = 110.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_actionDone && diag_tickTime > _u + 4;"/*%FSM*/; action=/*%FSM*/"_sanityCheck = 100;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class complete { priority = 100.000000; to="reset_vars"; precondition = /*%FSM*/"if (_doDebug) then {" \n "" \n "//deleteMarkerLocal ""lootePos"";" \n "//_mkrName = ""lootePos"";" \n "//_mkr = createMarkerLocal [_mkrName, getPos _looter];" \n "//_mkrName setMarkerShapeLocal ""ICON"";" \n "//_mkrName setMarkerTypeLocal ""mil_dot"";" \n "//_mkrName setMarkerColorLocal ""COLORGREEN"";" \n "//hint format [""%1\nMove To:%2\nWait:%3 / %5\nDistance:%4\nFeels: %6\nMoveCount: %7\nDamage: %8"",_debugDo,_strMoveTo,_sWait,_looter distance _moveTo,_sWait - (floor diag_tickTime - _dWait),_looterFeels,axeCount, damage _looter];" \n "};"/*%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 "if (_doDebug) then {" \n "//call compile format[""deleteMarkerLocal """"%1"""""",_moveTo];" \n "hint format [""%1\nMove To:%2\nWait:%3 / %5\nDistance:%4\nFeels: %6\nMoveCount: %7"",_debugDo,_strMoveTo,_sWait,_looter distance _moveTo,_sWait - (floor diag_tickTime - _dWait),_looterFeels,axeCount];" \n "systemChat format [""Complete:%1"",diag_tickTime];" \n "};" \n "" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dispose { priority = 95.000000; to="end"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_doDispose || !(alive _looter)) && (diag_tickTime - _t) > 120;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class interrupt { priority = 90.000000; to="reset_vars"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_allowInterrupt && (call compile _interruptReason));"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class hide { priority = 30.000000; to="find_spot"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doHide;"/*%FSM*/; action=/*%FSM*/"_doHide = false;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class attack { priority = 30.000000; to="approach_target"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doAttack;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class move { priority = 20.000000; to="do_move"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_doMove;"/*%FSM*/; action=/*%FSM*/"_doMove = false;"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class reset_vars { name = "reset_vars"; init = /*%FSM*/"//Default Vars" \n "_rnd = 0;" \n "_actionDone = false;" \n "_decisionMade = false;" \n "_sWait = 0;" \n "_doDispose = false;" \n "_chooseTarget = false;" \n "_criteria = Nil;" \n "_criteriaMet = false;" \n "_allowInterrupt = false;" \n "_interruptReason = ""(false)"";" \n "" \n "_moveTo = [0,0,0];" \n "" \n "//Brain Vars" \n "_override = false;" \n "_criteria =""(false)"";" \n "_criteriaMetAction = nil;" \n "" \n "//Feeling Vars" \n "_nrTrgts = [];" \n "_isThreatened = false;" \n "_isSafe = false;" \n "_isFriendly = false;" \n "_isLonely = false;" \n "_feelingDone = false;" \n "" \n "" \n "" \n "//Looter Vars" \n "_findBuilding = false;" \n "_arrGarr = [];" \n "_sortBuilds = [];" \n "" \n "" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class end { name = "end"; init = /*%FSM*/"deleteVehicle _looter;" \n "" \n "if (_doDebug) then {" \n "axeDo = Format[""Dispose | Alive:%1 | Distance: %2"",alive _looter,player distance _looter];" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class do_move { name = "do_move"; init = /*%FSM*/"_looter forceSpeed 7;" \n "_lootperPos = getPos _looter;" \n "" \n "{" \n "_closestBld = _bldMap select 0;" \n "{if (( _x distance _lootperPos) < (_closestBld distance _lootperPos)) then {_closestBld = _x}} forEach _bldMap;" \n "_sortBuilds = _sortBuilds + [_closestBld];" \n "_bldMap = _bldMap - [_closestBld];" \n "} forEach _bldMap;" \n "" \n "_bldMap = [] + _sortBuilds;" \n "_moveTo = _sortBuilds select 0;" \n "_bldMap set [0,""byebye""];" \n "_bldMap = _bldMap - [""byebye""];" \n "_looter doMove _moveTo;" \n "_sWait = (_looter distance _moveTo) max 18;;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""((_looter distance _moveTo) < 2)"";" \n "" \n "_interruptReason = ""((_lFear > _fearTrigger) || (_lAnger > _angerTrigger))"";" \n "_allowInterrupt = true;" \n "" \n "//Session Vars" \n "_inBuild = _nrBuild;" \n "_bCheckedCount = _bCheckedCount + 1;" \n "" \n "if (_doDebug) then {" \n "axeCount = axeCount + 1;" \n "_dWait = _t;" \n "_strMoveTo = str(_moveTo);" \n "_debugDo = ""Move"";" \n "};"/*%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 feeling { name = "feeling"; init = /*%FSM*/"_nrTrgts = _looter nearEntities [_entsArr, _sRange];" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class done { priority = 100.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck < 1;"/*%FSM*/; action=/*%FSM*/"_u = diag_tickTime;" \n "" \n "if (_doDebug) then {" \n "systemChat format [""Feeling:%1"",diag_tickTime];" \n "};"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class seen_target { priority = 90.000000; to="feeling"; precondition = /*%FSM*/"_canSee = (!lineIntersects [aimPos _trgt, eyePos _looter, _looter, _trgt]);" \n "" \n ""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 90;"/*%FSM*/; action=/*%FSM*/"if (_doDebug) then {" \n "" \n "if (_canSee) then {" \n "_looterFeels = ""Can See"";" \n "if (_looter distance _trgt < 3) then {" \n "" \n " if (!_doAttack) then {" \n " _lAnger = _lAnger + 2;" \n " };" \n "" \n "}else" \n "{" \n "_lAnger = _lAnger + 1;" \n "}" \n "}else{" \n "_looterFeels = ""Can Not See"";" \n "_lAnger = (_lAnger - 4) max 0;" \n "};" \n "" \n "" \n "};" \n "" \n "_sanityCheck = 90;" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class health_check { priority = 80.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 80;"/*%FSM*/; action=/*%FSM*/"if (damage _looter > 0.4) then {" \n "_looter setDamage 0.4;" \n "};" \n "" \n "" \n "_sanityCheck = 80;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class near_entities { priority = 70.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 70;"/*%FSM*/; action=/*%FSM*/"_sanityEnts = _looter nearEntities [_entsArr, 30];" \n "if ((count _sanityEnts) > 2) then {" \n "_looterFeels = _looterFeels + "" | High Targets"";" \n "_lFear = _lFear + 1;" \n "};" \n "_sanityCheck = 70;" \n "" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class gun_fire { priority = 60.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 60;"/*%FSM*/; action=/*%FSM*/"_lootVar = _looter getVariable [""firedNear"",0];" \n "" \n "if (_lootVar > 0) then {" \n "_lFear = _lFear + ((count _sanityEnts) * 3);" \n "_looterFeels = ""Scared"";" \n " if (_lootVar < 10) then {" \n " _lAnger = _lAnger + 2;" \n " };" \n "" \n "_looter setVariable [""firedNear"", 0];" \n "};" \n "" \n "if ((_looter getVariable [""looterHit"",false])) then {" \n "_lAnger = _lAnger + (_angerTrigger + 6);" \n "_looter setVariable [""looterHit"", false];" \n "};" \n "" \n "_sanityCheck = 60;" \n "" \n "" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class calm_down { priority = 50.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 50 && (diag_tickTime - _u) > 40;"/*%FSM*/; action=/*%FSM*/"" \n "_lFear = (_lFear - 1) max 0;" \n "_lAnger = (_lAnger - 1) max 0;" \n "" \n "_looterFeels = ""Calming"";" \n "_u = diag_tickTime;" \n "_sanityCheck = 50;" \n "" \n "" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class armed___unarmed { priority = 40.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 40;"/*%FSM*/; action=/*%FSM*/"{" \n "" \n " if ((typeof _x) in _plyArr) then {" \n "" \n " if ((currentWeapon _x) == """") then {" \n "" \n " _lBrave = (_lBrave + 1) min 100;" \n "" \n " };" \n "" \n " };" \n "" \n "}forEach _nrEnts;" \n "" \n "_sanityCheck = 40;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class stuck { priority = 20.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 20;"/*%FSM*/; action=/*%FSM*/"_sanityPos = getPos _looter;" \n "" \n "if (_sanityPos distance _lLastPos < 1) then {" \n "_looterFeels = _looterFeels + "" | Stuck"";" \n "}else{" \n "_looterFeels = _looterFeels + "" | Moving"";" \n "};" \n "" \n "" \n "_lLastPos = [] + _sanityPos;" \n "_sanityCheck = 20;" \n ""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class checked { priority = 10.000000; to="feeling"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/; action=/*%FSM*/"_sanityCheck = 0 ;" \n "_lAnger = _lAnger min 100;" \n "_lFear = _lFear min 100;" \n "_lBrave = _lBrave min 100;" \n "" \n "if (_doDebug) then {" \n "_looterFeels = _looterFeels + format [""\nAnger: %1 | Fear: %2 | Brave: %3"",_lAnger,_lFear,_lBrave];" \n "};"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class create_map { name = "create_map"; init = /*%FSM*/"_nrBuilds = nearestObjects [getPosATL _looter,[""house""],50];" \n "" \n "_strDebug = _strDebug + format [""Found %1 Buildings\n"",count _nrBuilds];" \n "" \n "" \n "{" \n "" \n "if (!((typeOf _x) in _filterBuilds)) then {" \n "" \n " _garrCount = 0;" \n "" \n " while {format [""%1"", _x buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n " _garrCount = _garrCount + 1;" \n " };" \n "" \n " if (_garrCount > 0) then {" \n " _arrGarr pushBack [_x,_garrCount];" \n " };" \n "" \n "};" \n "" \n "}forEach _nrBuilds;" \n "" \n "_strDebug = _strDebug + format [""Garrison Points: %1\n%2"", _arrGarr,_arrGarrCount];" \n "" \n "if (count _arrGarr > 0) then {" \n "" \n " {" \n " _garrPos = (_x select 0) buildingPos (floor random (_x select 1));" \n " _bldMap pushBack _garrPos;" \n "" \n " }forEach _arrGarr;" \n "" \n "};" \n "" \n "" \n "if (_doDebug) then {" \n "" \n "_mkrName2 = """";" \n "{" \n "" \n "//call compile format[""_mkrName2 = """"%1"""""",_x];" \n "//_mkr = createMarkerLocal [_mkrName2, _x];" \n "//_mkrName2 setMarkerShapeLocal ""ICON"";" \n "//_mkrName2 setMarkerTypeLocal ""mil_dot"";" \n "//_mkrName2 setMarkerColorLocal ""COLORBLUE"";" \n "_debugDo = ""Mapping"";" \n "" \n "}forEach _bldMap;" \n "" \n "" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="instinct"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class approach_target { name = "approach_target"; init = /*%FSM*/"_a = diag_tickTime;" \n "" \n "if (_doDebug) then {" \n "_debugDo = ""Approach"";" \n "};" \n "" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class close_to_target { priority = 20.000000; to="do_attack"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(_trgt distance _looter < 3) && (diag_tickTime > _a + 0.5);"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class not_close { priority = 10.000000; to="action"; precondition = /*%FSM*/"_lDist = _looter distance _trgt ;"/*%FSM*/; condition=/*%FSM*/"(_lDist > 3) && (diag_tickTime > _a + 0.9) ;"/*%FSM*/; action=/*%FSM*/"" \n "_dirTo = [_looter, getPos _trgt] call BIS_fnc_dirTo;" \n "_attackPos = [_looter, _lDist - 2,_dirTo] call BIS_fnc_relPos;" \n "" \n "_looter forceSpeed 6;" \n "_looter doMove _attackPos;" \n "" \n "if (_doDebug) then {" \n "_strMoveTo = str(_attackPos);" \n "_debugDo = ""Not Close"";" \n "};" \n ""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class do_attack { name = "do_attack"; init = /*%FSM*/"" \n "" \n "_attackDir = [(getPos _looter),(getPos _trgt)] call BIS_fnc_dirTo;" \n "" \n "_looter setDir _attackDir;" \n "" \n "doStop _looter;" \n "_looter forceSpeed 0;" \n "" \n "_gesture = [""GestureSwing0"", ""GestureSwing1"", ""GestureSwing2""] select (floor(random 3));" \n "_looter playActionNow _gesture; " \n "_looter call EPOCH_client_bitePlayer;" \n "" \n "_sWait = 1.5;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""(false)"";" \n "_doAttack = false;" \n "" \n "_criteriaMetAction= {" \n "_lAnger = (_lAnger - 4) max 0;" \n "_debugDo = ""Attack Criteria Met"";" \n "};" \n "" \n "" \n "if (_doDebug) then {" \n "_debugDo = format[""Attack | Dir:%1"",_attackDir];" \n "};"/*%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_spot { name = "find_spot"; init = /*%FSM*/"_h = diag_tickTime;" \n "_hidePos = [(getPosATL _looter), (floor (random 20) + 12), floor random 360] call BIS_fnc_relPos;" \n "_posSafe = true;" \n "" \n "{" \n " if (!lineIntersects [aimPos _x, eyePos _looter, _x, _looter]) then {" \n "_posSafe = false;" \n "};" \n "} forEach _nrEnts;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class not_safe { priority = 10.000000; to="find_spot"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_posSafe && diag_tickTime - _h > 1;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class is_safe { priority = 5.000000; to="do_hide"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_posSafe;"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class do_hide { name = "do_hide"; init = /*%FSM*/"_looter forceSpeed 7;" \n "" \n "" \n "_looter doMove _hidePos;" \n "_sWait = _lFear;" \n "_actionDone = true;" \n "_t = diag_tickTime;" \n "_criteria = ""((_looter distance _hidePos) < 2)"";" \n "_lFear = (_lFear - 1) max 0;" \n "//Session Vars" \n "" \n "if (_doDebug) then {" \n "axeCount = axeCount + 1;" \n "_dWait = _t;" \n "_strMoveTo = str(_hidePos);" \n "_debugDo = ""Hide"";" \n "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class _ { priority = 0.000000; to="action"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="looter"; finalStates[] = { "end" }; }; /*%FSM*/