/*%FSM*/ /*%FSM*/ /* item0[] = {"init",0,250,-150.000000,-75.000000,-50.000000,-25.000000,0.000000,"init"}; item1[] = {"idle_exceeded",4,218,0.000000,225.000000,100.000000,275.000000,0.000000,"idle" \n "exceeded"}; item2[] = {"master_moved",4,218,-150.000000,300.000000,-50.000000,350.000000,0.000000,"master" \n "moved"}; item3[] = {"Moving",2,250,-150.000000,375.000000,-50.000000,425.000000,0.000000,"Moving"}; item4[] = {"close",4,4314,-275.000000,300.000000,-175.000000,350.000000,0.000000,"close"}; item5[] = {"",7,210,-229.000000,246.000000,-221.000000,254.000000,0.000000,""}; item6[] = {"Waiting",2,250,-150.000000,225.000000,-50.000000,275.000000,0.000000,"Waiting"}; item7[] = {"preloaded",4,218,-150.000000,0.000000,-50.000000,50.000000,0.000000,"preloaded"}; item8[] = {"reorientate",4,218,-150.000000,450.000000,-50.000000,500.000000,0.000000,"reorientate"}; item9[] = {"Sitting",2,250,150.000000,225.000000,250.000000,275.000000,0.000000,"Sitting"}; item10[] = {"master_moved",4,218,150.000000,300.000000,250.000000,350.000000,0.000000,"master" \n "moved"}; item11[] = {"Getting_Up",2,250,150.000000,375.000000,250.000000,425.000000,0.000000,"Getting Up"}; item12[] = {"Up",4,218,0.000000,375.000000,100.000000,425.000000,0.000000,"Up"}; item13[] = {"dead",4,218,0.000000,300.000000,100.000000,350.000000,3.000000,"dead"}; item14[] = {"End",1,250,0.000000,450.000000,100.000000,500.000000,0.000000,"End"}; item15[] = {"stay",4,218,0.000000,125.000000,100.000000,175.000000,1.000000,"stay"}; item16[] = {"",7,210,-29.000002,245.999985,-20.999998,254.000015,0.000000,""}; item17[] = {"",7,210,-29.000000,146.000000,-21.000000,153.999985,0.000000,""}; item18[] = {"Staying",2,250,150.000000,125.000000,250.000000,175.000000,0.000000,"Staying"}; item19[] = {"commanded",4,218,375.000000,175.000000,475.000000,225.000000,0.000000,"commanded"}; item20[] = {"",7,210,421.000031,146.000000,428.999969,154.000000,0.000000,""}; item21[] = {"",7,210,571.000000,146.000000,579.000000,154.000000,0.000000,""}; item22[] = {"too_long",4,218,525.000000,175.000000,625.000000,225.000000,0.000000,"too long"}; item23[] = {"Reset",2,250,450.000000,300.000000,550.000000,350.000000,0.000000,"Reset"}; item24[] = {"true",8,218,450.000000,375.000000,550.000000,425.000000,0.000000,"true"}; item25[] = {"",7,210,421.000000,321.000000,429.000000,329.000000,0.000000,""}; item26[] = {"track",4,218,0.000000,25.000000,100.000000,75.000000,0.000000,"track"}; item27[] = {"",7,210,-29.000000,46.000008,-21.000000,53.999996,0.000000,""}; item28[] = {"Tracking",2,250,275.000000,-50.000000,375.000000,0.000000,0.000000,"Tracking"}; item29[] = {"commanded",4,218,425.000000,-50.000000,525.000000,0.000000,0.000000,"commanded"}; item30[] = {"Checking",2,250,150.000000,25.000000,250.000000,75.000000,0.000000,"Checking"}; item31[] = {"has_target",4,218,150.000000,-50.000000,250.000000,0.000000,1.000000,"has target"}; item32[] = {"no_target",4,218,425.000000,25.000000,525.000000,75.000000,4.000000,"no target"}; item33[] = {"Reset_1",2,250,600.000000,25.000000,700.000000,75.000000,0.000000,"Reset"}; item34[] = {"",7,210,721.000000,46.000008,729.000000,53.999996,0.000000,""}; item35[] = {"",7,210,396.000000,46.000008,404.000000,53.999989,0.000000,""}; item36[] = {"",7,210,396.000000,-28.999994,404.000000,-21.000006,0.000000,""}; item37[] = {"",7,210,396.000000,-129.000000,404.000000,-121.000008,0.000000,""}; item38[] = {"at_target",4,218,425.000000,-150.000000,525.000000,-100.000000,0.000000,"at target"}; item39[] = {"",7,210,571.000000,-28.999992,579.000000,-21.000008,0.000000,""}; item40[] = {"",7,210,571.000000,46.000008,579.000000,53.999996,0.000000,""}; item41[] = {"Chasing",2,250,550.000000,-150.000000,650.000000,-100.000000,0.000000,"Chasing"}; item42[] = {"",7,210,721.000000,-179.000015,729.000000,-171.000000,0.000000,""}; item43[] = {"",7,210,-179.000000,-179.000000,-171.000000,-171.000000,0.000000,""}; item44[] = {"",7,210,-179.000000,171.000000,-171.000000,179.000000,0.000000,""}; item45[] = {"reorientate",4,218,225.000000,-125.000000,325.000000,-75.000000,0.000000,"reorientate"}; item46[] = {"action_init",2,250,-150.000000,75.000000,-50.000000,125.000000,0.000000,"action init"}; item47[] = {"true",8,218,-150.000000,150.000000,-50.000000,200.000000,0.000000,"true"}; item48[] = {"commanded",4,218,275.000000,300.000000,375.000000,350.000000,0.000000,"commanded"}; item49[] = {"instant",4,218,-350.000000,375.000000,-250.000000,425.000000,0.000000,"instant"}; item50[] = {"",7,210,-304.000000,246.000000,-296.000000,253.999985,0.000000,""}; item51[] = {"",7,210,-29.000000,321.000000,-21.000000,329.000000,0.000000,""}; item52[] = {"",7,210,196.000000,196.000000,204.000000,204.000000,0.000000,""}; item53[] = {"",7,210,46.000000,196.000000,54.000000,204.000000,0.000000,""}; item54[] = {"reorientate",4,218,600.000000,-75.000000,700.000000,-25.000000,0.000000,"reorientate"}; item55[] = {"",7,210,596.000000,-78.999992,604.000000,-71.000008,0.000000,""}; item56[] = {"",7,210,396.000000,-78.999992,404.000000,-71.000008,0.000000,""}; item57[] = {"",7,210,395.999969,95.999992,404.000000,104.000000,0.000000,""}; item58[] = {"",7,210,196.000000,96.000000,204.000000,104.000000,0.000000,""}; item59[] = {"",7,210,-29.000000,96.000000,-21.000000,104.000000,0.000000,""}; item60[] = {"",7,210,571.000000,321.000000,579.000000,329.000000,0.000000,""}; item61[] = {"move",4,218,0.000000,-350.000000,100.000000,-300.000000,0.000000,"move"}; item62[] = {"Get_Position",2,250,125.000000,-350.000000,225.000000,-300.000000,0.000000,"Get Position"}; item63[] = {"valid_position",4,218,125.000000,-425.000000,225.000000,-375.000000,0.000000,"valid position"}; item64[] = {"Moving_1",2,250,250.000000,-425.000000,350.000000,-375.000000,0.000000,"Moving"}; item65[] = {"no_position",4,218,125.000000,-275.000000,225.000000,-225.000000,0.000000,"no position"}; item66[] = {"Nothing",2,250,250.000000,-275.000000,350.000000,-225.000000,0.000000,"Nothing"}; item67[] = {"commanded",4,218,250.000000,-350.000000,350.000000,-300.000000,0.000000,"commanded"}; item68[] = {"",7,210,295.999969,-179.000000,304.000031,-171.000000,0.000000,""}; item69[] = {"lost",4,218,375.000000,-425.000000,475.000000,-375.000000,0.000000,"lost"}; item70[] = {"call_back",4,218,375.000000,-275.000000,475.000000,-225.000000,0.000000,"call back"}; item71[] = {"Wander",2,250,375.000000,-350.000000,475.000000,-300.000000,0.000000,"Wander"}; item72[] = {"In_Position",4,218,475.000000,-300.000000,575.000000,-250.000000,1.000000,"In Position"}; item73[] = {"",7,210,-28.999996,-329.000000,-21.000002,-321.000000,0.000000,""}; item74[] = {"",7,210,296.000000,-454.000000,304.000000,-446.000000,0.000000,""}; item75[] = {"",7,210,746.000000,-454.000000,753.999939,-446.000000,0.000000,""}; item76[] = {"",7,210,746.000000,-329.000000,754.000000,-321.000000,0.000000,""}; item77[] = {"",7,210,746.000000,446.000000,754.000000,453.999969,0.000000,""}; item78[] = {"",7,210,-29.000000,246.000000,-21.000000,254.000000,0.000000,""}; item79[] = {"",7,210,121.000000,446.000000,129.000000,454.000000,0.000000,""}; item80[] = {"",7,210,121.000000,371.000000,129.000000,379.000000,0.000000,""}; item81[] = {"",7,210,-29.000000,-404.000000,-21.000000,-396.000000,0.000000,""}; item82[] = {"player_enter__ve",8,218,-150.000000,-425.000000,-50.000000,-375.000000,2.000000,"player enter " \n "vehicle"}; item83[] = {"in_vehicle",2,250,-525.000000,-425.000000,-425.000000,-375.000000,0.000000,"in vehicle"}; item84[] = {"player_exit__veh",4,218,-525.000000,-350.000000,-425.000000,-300.000000,0.000000,"player exit " \n "vehicle"}; item85[] = {"",7,210,-228.999985,-454.000000,-221.000015,-446.000000,0.000000,""}; item86[] = {"move_to_vehicle",2,250,-275.000000,-425.000000,-175.000000,-375.000000,0.000000,"move to vehicle"}; item87[] = {"at_vehicle",4,218,-400.000000,-425.000000,-300.000000,-375.000000,0.000000,"at vehicle"}; item88[] = {"",7,210,-478.999969,-454.000000,-471.000031,-446.000000,0.000000,""}; item89[] = {"",7,210,-229.000000,-454.000000,-221.000000,-446.000000,0.000000,""}; item90[] = {"vehicle_too_far",4,218,-275.000000,-350.000000,-175.000000,-300.000000,0.000000,"vehicle too far"}; item91[] = {"Wait",2,250,-400.000000,-350.000000,-300.000000,-300.000000,0.000000,"Wait"}; item92[] = {"call_back",4,218,-400.000000,-275.000000,-300.000000,-225.000000,0.000000,"call back"}; item93[] = {"",7,210,-354.000000,246.000000,-346.000000,254.000000,0.000000,""}; item94[] = {"In_Position",4,218,-300.000000,-300.000000,-200.000000,-250.000000,1.000000,"In Position"}; item95[] = {"reorientate",4,218,-175.000000,-375.000000,-75.000000,-325.000000,0.000000,"reorientate"}; item96[] = {"",7,210,-479.000000,96.000008,-471.000000,103.999992,0.000000,""}; item97[] = {"",7,210,96.000000,96.000000,104.000000,104.000000,0.000000,""}; link0[] = {0,7}; link1[] = {1,9}; link2[] = {2,3}; link3[] = {3,4}; link4[] = {3,8}; link5[] = {3,49}; link6[] = {3,51}; link7[] = {4,5}; link8[] = {5,6}; link9[] = {6,2}; link10[] = {6,13}; link11[] = {6,16}; link12[] = {7,46}; link13[] = {8,3}; link14[] = {9,10}; link15[] = {9,13}; link16[] = {9,48}; link17[] = {9,52}; link18[] = {10,11}; link19[] = {11,12}; link20[] = {11,80}; link21[] = {12,6}; link22[] = {13,14}; link23[] = {15,18}; link24[] = {16,1}; link25[] = {16,17}; link26[] = {17,15}; link27[] = {17,59}; link28[] = {18,20}; link29[] = {18,58}; link30[] = {19,25}; link31[] = {20,19}; link32[] = {20,21}; link33[] = {21,22}; link34[] = {22,60}; link35[] = {23,24}; link36[] = {24,11}; link37[] = {25,23}; link38[] = {26,30}; link39[] = {27,26}; link40[] = {27,73}; link41[] = {28,36}; link42[] = {28,37}; link43[] = {28,45}; link44[] = {29,39}; link45[] = {30,31}; link46[] = {30,35}; link47[] = {31,28}; link48[] = {32,40}; link49[] = {33,34}; link50[] = {34,42}; link51[] = {35,32}; link52[] = {35,57}; link53[] = {36,29}; link54[] = {36,35}; link55[] = {37,38}; link56[] = {38,41}; link57[] = {39,40}; link58[] = {40,33}; link59[] = {41,54}; link60[] = {41,55}; link61[] = {42,68}; link62[] = {43,44}; link63[] = {44,47}; link64[] = {45,28}; link65[] = {46,47}; link66[] = {47,6}; link67[] = {48,11}; link68[] = {49,50}; link69[] = {50,5}; link70[] = {51,13}; link71[] = {51,78}; link72[] = {52,53}; link73[] = {53,15}; link74[] = {54,41}; link75[] = {55,56}; link76[] = {56,36}; link77[] = {57,58}; link78[] = {58,97}; link79[] = {59,27}; link80[] = {60,23}; link81[] = {61,62}; link82[] = {62,63}; link83[] = {62,65}; link84[] = {63,64}; link85[] = {64,67}; link86[] = {64,69}; link87[] = {64,74}; link88[] = {65,66}; link89[] = {66,68}; link90[] = {67,66}; link91[] = {68,43}; link92[] = {69,71}; link93[] = {70,66}; link94[] = {71,70}; link95[] = {71,72}; link96[] = {71,76}; link97[] = {72,71}; link98[] = {73,61}; link99[] = {73,81}; link100[] = {74,75}; link101[] = {75,76}; link102[] = {76,77}; link103[] = {77,79}; link104[] = {79,80}; link105[] = {80,13}; link106[] = {81,82}; link107[] = {82,86}; link108[] = {83,84}; link109[] = {83,88}; link110[] = {84,96}; link111[] = {85,74}; link112[] = {86,87}; link113[] = {86,89}; link114[] = {86,90}; link115[] = {86,95}; link116[] = {87,83}; link117[] = {88,89}; link118[] = {90,91}; link119[] = {91,89}; link120[] = {91,92}; link121[] = {91,94}; link122[] = {92,93}; link123[] = {93,50}; link124[] = {94,91}; link125[] = {95,86}; link126[] = {96,46}; link127[] = {97,13}; globals[] = {25.000000,1,0,0,0,640,480,1,260,6316128,1,-727.852478,476.612427,472.387665,-270.819122,974,601,1}; window[] = {2,-1,-1,-1,-1,824,44,1252,44,3,991}; *//*%FSM*/ class FSM { fsmName = "DayZ Dog Agent"; class States { /*%FSM*/ class init { name = "init"; init = /*%FSM*/"_dog = _this select 0;" \n "_type = _this select 1;" \n "_standing = true;" \n "_command = ""none"";" \n "_forceWalk = false;" \n "_maxSpeed = 1;" \n "_maxSpeedInit = _maxSpeed;" \n "_forceChange = false;" \n "_staySkill = 30;" \n "_senseSkill = 300; //x3 for tracking?" \n "_target = objNull;" \n "_target setVariable ['forceWalk',false];" \n "_lastPos = [0,0,0];" \n "_move = """";" \n "_movePos = [];" \n "_watchDog = true;" \n "_idleTime = 5;" \n "_coolDown = 0;" \n "" \n "_hunger = 0;" \n "_thrist = 0;" \n "_actionLieDown = -1;" \n "" \n "_character = player;" \n "" \n "_actionDir = ""\z\addons\dayz_code\actions\dog\"";" \n "" \n "_speedVal = [1,6,-1];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class preloaded { priority = 0.000000; to="action_init"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"dayz_clientPreload and (!isNil ""_handle"")"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Moving { name = "Moving"; init = /*%FSM*/"_pos = (vehicle player) modelToWorld [-1,1,0];" \n "" \n "if(_lastPos distance _pos > 1 or _forceChange) then {" \n " _lastPos = _pos;" \n " _dog doMove _pos;" \n " _dog forceSpeed (_speedVal select _maxSpeed);" \n " _forceChange = false;" \n "};" \n "_waitTime = time;" \n "" \n "if (vehicle player != player) then {" \n " diag_log format[""PLAYER IS IN: %1, str(vehicle player)];" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class instant { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!_waiting"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class reorientate { priority = 0.000000; to="Moving"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > 0.5)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class close { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(vehicle player) distance _dog < 5"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Waiting { name = "Waiting"; init = /*%FSM*/"_waitTime = time;" \n "_waiting = true;" \n "_lastpos = player modelToWorld [-1,1,0];" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class player_enter__ve { priority = 2.000000; to="move_to_vehicle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(vehicle _character != _character);"/*%FSM*/; action=/*%FSM*/"diag_log ""PLAYER ENTERED VEHICLE"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class stay { priority = 1.000000; to="Staying"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command == ""stay"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class track { priority = 0.000000; to="Checking"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command == ""track"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class move { priority = 0.000000; to="Get_Position"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command == ""move"""/*%FSM*/; action=/*%FSM*/"_command = ""none"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class idle_exceeded { priority = 0.000000; to="Sitting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > _idleTime) and _standing"/*%FSM*/; action=/*%FSM*/"_standing = false;" \n "if (!_watchDog) then {" \n " _move = ""Dog_LieDown"";" \n "} else {" \n " _move = ""Dog_SitDown"";" \n " _actionLieDown = _dog addAction [""Lie Down"", _actionDir + ""stay.sqf"",_handle, 0, true, true];" \n "};" \n "[objNull, _dog, rSwitchMove,_move] call RE;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class master_moved { priority = 0.000000; to="Moving"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(vehicle player) distance _dog > 2"/*%FSM*/; action=/*%FSM*/"_lastPos = position _dog;"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Sitting { name = "Sitting"; init = /*%FSM*/"_waitTime = time;" \n "_coolDown = (random 4) + 2;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class stay { priority = 1.000000; to="Staying"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command == ""stay"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class commanded { priority = 0.000000; to="Getting_Up"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command != ""none"""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class master_moved { priority = 0.000000; to="Getting_Up"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"player distance _dog > 2"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Getting_Up { name = "Getting_Up"; init = /*%FSM*/"_anim = animationState _dog;" \n "if (_anim == ""Dog_SitDown"") then {" \n " _move = ""Dog_SitUp"";" \n "} else {" \n " _move = ""Dog_GetUp"";" \n "};" \n "" \n "[objNull, _dog, rSwitchMove,_move] call RE;" \n "_waitTime = time;" \n "_standing = true;" \n "_dog removeAction _actionLieDown;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class Up { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > 0.5)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class End { name = "End"; init = /*%FSM*/"//qq" \n "" \n "terminate _heartbeat;" \n "" \n "_dog removeAction _actionWarn;" \n "_dog removeAction _actionStay;" \n "_dog removeAction _actionTrack;" \n "_dog removeAction _actionBark;" \n "_dog removeAction _actionFood;" \n "_dog removeAction _actionWater;" \n "" \n "player removeAction _actionMove;" \n "player removeAction _actionSpeedStealth;" \n "player removeAction _actionSpeedFree;" \n "" \n "if(!isNil ""_actionCall"") then {" \n " player removeAction _actionCall;" \n "};" \n "" \n "if(!isNil ""_actionFollow"") then {" \n " _dog removeAction _actionFollow;" \n "};" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { }; }; /*%FSM*/ /*%FSM*/ class Staying { name = "Staying"; init = /*%FSM*/"if(_standing) then {" \n " _standing = false;" \n " if (!_watchDog) then {" \n " _move = ""Dog_LieDown"";" \n " } else {" \n " _move = ""Dog_SitDown"";" \n " _actionLieDown = _dog addAction [""Lie Down"", _actionDir + ""stay.sqf"",_handle, 0, true, true];" \n " };" \n " [objNull, _dog, rSwitchMove,_move] call RE;" \n "};" \n "" \n "_dog removeAction _actionStay;" \n "" \n "_actionFollow = _dog addAction [""Follow Me"", _actionDir + ""follow.sqf"",[_handle,false], 0, true, true];" \n "_actionCall = player addAction [""Call Dog"", _actionDir + ""follow.sqf"",[_handle,true], 0, false, true];" \n "" \n "_waitTime = time;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class too_long { priority = 0.000000; to="Reset"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > _staySkill)"/*%FSM*/; action=/*%FSM*/"_command = ""none"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class commanded { priority = 0.000000; to="Reset"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command != ""stay"""/*%FSM*/; action=/*%FSM*/"if (_command == ""return"") then {" \n " if ((player distance _dog > 5) and (_watchDog)) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n " };" \n "};"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Reset { name = "Reset"; init = /*%FSM*/"_dog removeAction _actionLieDown;" \n "" \n "player removeAction _actionCall;" \n "_dog removeAction _actionFollow;" \n "" \n "_actionStay = _dog addAction [""Stay"",_actionDir + ""stay.sqf"",_handle, 5, true, true];" \n "_waiting = false;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class true { priority = 0.000000; to="Getting_Up"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/"_forceWalk = false;" \n "_dog forceSpeed -1;"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Tracking { name = "Tracking"; init = /*%FSM*/"_pos = position _target;" \n "if(_lastPos distance _pos > 1 or _forceChange) then {" \n " _lastPos = _pos;" \n " _dog doMove _pos;" \n " _dog forceSpeed (_speedVal select _maxSpeed);" \n " _forceChange = false;" \n "};" \n "" \n "_waitTime = time;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class no_target { priority = 4.000000; to="Reset_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull _target and ((time - _waitTime) > 2)"/*%FSM*/; action=/*%FSM*/"_command = ""none"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class at_target { priority = 0.000000; to="Chasing"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_dog distance _target < 10"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class commanded { priority = 0.000000; to="Reset_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command != ""track"""/*%FSM*/; action=/*%FSM*/"if (_command == ""return"") then {" \n " if ((player distance _dog > 5) and (_watchDog)) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n " };" \n "};"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class reorientate { priority = 0.000000; to="Tracking"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > 0.5)"/*%FSM*/; action=/*%FSM*/"if ((random 1) < 0.3 and (time - _coolDown > 4)) then {" \n " _dog playActionNow ""GestureSniff"";" \n " _coolDown = time;" \n "};"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Checking { name = "Checking"; init = /*%FSM*/"_dog removeAction _actionTrack;" \n "_lastPos = position _dog;" \n "" \n "_list = (position _dog) nearEntities [""Animal"",(_senseSkill * 3)];" \n "_list = _list - [_dog];" \n "" \n "if (count _list > 0) then {" \n " _target = _list select 0;" \n "} else {" \n " _target = objNull;" \n "};" \n "" \n "_dog playActionNow ""GestureSniff"";" \n "_waitTime = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class no_target { priority = 4.000000; to="Reset_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull _target and ((time - _waitTime) > 2)"/*%FSM*/; action=/*%FSM*/"_command = ""none"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class has_target { priority = 1.000000; to="Tracking"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!isNull _target and ((time - _waitTime) > 2)"/*%FSM*/; action=/*%FSM*/"_lastPos = position _dog;" \n "" \n "_actionFollow = _dog addAction [""Follow Me"", _actionDir + ""follow.sqf"",[_handle,false], 0, true, true];" \n "_actionCall = player addAction [""Call Dog"", _actionDir + ""follow.sqf"",[_handle,true], 0, false, true];"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Reset_1 { name = "Reset_1"; init = /*%FSM*/"_actionTrack = _dog addAction [""Track"",_actionDir + ""track.sqf"",_handle, 4, true, true];" \n "" \n "player removeAction _actionCall;" \n "_dog removeAction _actionFollow;" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class true { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Chasing { name = "Chasing"; init = /*%FSM*/"_pos = position _target;" \n "if(_lastPos distance _pos > 1 or _forceChange) then {" \n " _lastPos = _pos;" \n " _dog doMove _pos;" \n " _dog forceSpeed (_speedVal select _maxSpeed);" \n " _forceChange = false;" \n "};" \n "_waitTime = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class no_target { priority = 4.000000; to="Reset_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"isNull _target and ((time - _waitTime) > 2)"/*%FSM*/; action=/*%FSM*/"_command = ""none"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class commanded { priority = 0.000000; to="Reset_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command != ""track"""/*%FSM*/; action=/*%FSM*/"if (_command == ""return"") then {" \n " if ((player distance _dog > 5) and (_watchDog)) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n " };" \n "};"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class reorientate { priority = 0.000000; to="Chasing"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > 1)"/*%FSM*/; action=/*%FSM*/"if (_watchDog) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n "};"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class action_init { name = "action_init"; init = /*%FSM*/"_actionFood = _dog addAction [""Feed"",_actionDir + ""feed.sqf"",[_handle,0], 1, false, false,"""",""'FoodSteakRaw' in magazines player;""];" \n "_actionWater = _dog addAction [""Water"",_actionDir + ""feed.sqf"",[_handle,1], 1, false, false,"""",""'ItemWaterbottle' in magazines player;""];" \n "_actionStay = _dog addAction [""Stay"",_actionDir + ""stay.sqf"",_handle, 5, true, true];" \n "_actionTrack = _dog addAction [""Track"",_actionDir + ""track.sqf"",_handle, 4, true, true];" \n "_actionBark = _dog addAction [""Speak"",_actionDir + ""speak.sqf"",_handle, 3, false, false];" \n "_actionWarn = _dog addAction [""Alert"",_actionDir + ""warn.sqf"",[_handle,true], 2, false, true];" \n "" \n "_actionMove = player addAction [""Move To"", _actionDir + ""move.sqf"", _handle, 0, false, false];" \n "_actionSpeedStealth = player addAction [""Walk"", _actionDir + ""speed.sqf"",[_handle,true,true], 0, false, false, """", ""_maxSpeed == 1;""];" \n "_actionSpeedFree = player addAction [""Run"", _actionDir + ""speed.sqf"",[_handle,true,false], 0, false, false, """", ""_maxSpeed == 0;""];" \n "" \n "_heartbeat = [_dog,_handle] spawn {" \n " disableSerialization;" \n "" \n " _dog = _this select 0;" \n " _handle = _this select 1;" \n " _handle setFSMVariable [""_thirst"",0];" \n " _handle setFSMVariable [""_hunger"",0];" \n " " \n " _display = uiNamespace getVariable 'DAYZ_GUI_display';" \n " _ctrlDogFood = _display displayCtrl 1701;" \n " _ctrlDogFood ctrlShow true;" \n " _ctrlDogFoodBorder = _display displayCtrl 1501;" \n " _ctrlDogFoodBorder ctrlShow true;" \n " _ctrlDogWater = _display displayCtrl 1702;" \n " _ctrlDogWater ctrlShow true;" \n " _ctrlDogWaterBorder = _display displayCtrl 1502;" \n " _ctrlDogWaterBorder ctrlShow true;" \n " " \n " while {alive _dog} do {" \n " _vel = velocity _dog;" \n " _speed = [0,0,0] distance _vel;" \n " _thirst = _handle getFSMVariable ""_thirst"";" \n " _hunger = _handle getFSMVariable ""_hunger"";" \n " _thirst = _thirst + (0.001 * dayz_scaleLight * _speed) + 0.001;" \n " _hunger = _hunger + (0.001 * _speed) + 0.001;" \n " _foodVal = 1 - (_hunger / SleepFood);" \n " _thirstVal = 1 - (_thirst / SleepWater);" \n " " \n " _ctrlDogFood ctrlSetTextColor [(Dayz_GUI_R + (0.3 * (1-_foodVal))),(Dayz_GUI_G * _foodVal),(Dayz_GUI_B * _foodVal), 0.5];" \n " _ctrlDogWater ctrlSetTextColor [(Dayz_GUI_R + (0.3 * (1-_thirstVal))),(Dayz_GUI_G * _thirstVal),(Dayz_GUI_B * _thirstVal), 0.5];" \n " " \n " if (_foodVal < 0.2) then {" \n " _ctrlDogFood call player_guiControlFlash;" \n " };" \n " if (_thirstVal < 0.2) then {" \n " _ctrlDogWater call player_guiControlFlash;" \n " };" \n "" \n " if (_foodVal <= 0 || _thirstVal <= 0) then {" \n " _cantSee = [player, _dog] call dayz_losCheck;" \n " while {alive _dog && !(_cantSee)} do {" \n " _dog doMove [0, ((random (10000)) + 1000), 0];" \n " sleep 2;" \n " _cantSee = [player, _dog] call dayz_losCheck;" \n " };" \n " deleteVehicle _dog;" \n " }; " \n " " \n " _handle setFSMVariable [""_thirst"",_thirst];" \n " _handle setFSMVariable [""_hunger"",_hunger];" \n " sleep 0.5;" \n " };" \n "};" \n "" \n "_script = [_dog,1,2,[_handle,true]] execVM (_actionDir + ""warn.sqf"");" \n ""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class true { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Get_Position { name = "Get_Position"; init = /*%FSM*/"_movePos = screenToWorld [0.5, 0.5];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class no_position { priority = 0.000000; to="Nothing"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(count _movePos <= 0)" \n ""/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class valid_position { priority = 0.000000; to="Moving_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(count _movePos > 0)" \n ""/*%FSM*/; action=/*%FSM*/"_actionFollow = _dog addAction [""Follow Me"", _actionDir + ""follow.sqf"",[_handle,false], 0, true, true];" \n "_actionCall = player addAction [""Call Dog"", _actionDir + ""follow.sqf"",[_handle,true], 0, false, true];"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Moving_1 { name = "Moving_1"; init = /*%FSM*/"_dog doMove _movePos;" \n "_dog forceSpeed (_speedVal select _maxSpeed);" \n "_forceChange = false;" \n "" \n "_waitTime = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class lost { priority = 0.000000; to="Wander"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(((time - _waitTime) > 60)&& (player distance _dog > 100))"/*%FSM*/; action=/*%FSM*/"_pos = position _dog;"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class commanded { priority = 0.000000; to="Nothing"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command != ""none"""/*%FSM*/; action=/*%FSM*/"if (_command == ""return"") then {" \n " if ((player distance _dog > 5) and (_watchDog)) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n " };" \n "};" \n "" \n "player removeAction _actionCall;" \n "_dog removeAction _actionFollow;"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Nothing { name = "Nothing"; init = /*%FSM*/""/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class true { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"true"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Wander { name = "Wander"; init = /*%FSM*/"_pos = [(getPos _dog),10,90,4,0,5,0] call BIS_fnc_findSafePos;" \n "_dog moveTo _pos;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class dead { priority = 3.000000; to="End"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"!(alive _dog)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class In_Position { priority = 1.000000; to="Wander"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_dog distance _pos < 3"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class call_back { priority = 0.000000; to="Nothing"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command == ""return"""/*%FSM*/; action=/*%FSM*/"if ((player distance _dog > 5) and (_watchDog)) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n "};" \n "" \n "player removeAction _actionCall;" \n "_dog removeAction _actionFollow;" \n ""/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class in_vehicle { name = "in_vehicle"; init = /*%FSM*/"terminate _heartbeat;" \n "" \n "_dog removeAction _actionWarn;" \n "_dog removeAction _actionStay;" \n "_dog removeAction _actionTrack;" \n "_dog removeAction _actionBark;" \n "_dog removeAction _actionFood;" \n "_dog removeAction _actionWater;" \n "" \n "player removeAction _actionMove;" \n "player removeAction _actionSpeedStealth;" \n "player removeAction _actionSpeedFree;" \n "" \n "deleteVehicle _dog;" \n "" \n "diag_log ""DOG REMOVED"";"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class player_exit__veh { priority = 0.000000; to="action_init"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"(vehicle _character == _character)"/*%FSM*/; action=/*%FSM*/"if (isNull _dog) then {" \n " _dog = (group player) createUnit [ _type, player modelToWorld [-1,1,0], [], 0, ""FORM""];" \n " _dog disableAI ""FSM"";" \n "} ;" \n "" \n "diag_log ""DOG RECREATED"";"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class move_to_vehicle { name = "move_to_vehicle"; init = /*%FSM*/"_playerloc = getPos (vehicle player);" \n "_dog doMove _playerloc;" \n "" \n "diag_log ""DOG MOVING TO VEHICLE"";" \n "_waitTime = time;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class vehicle_too_far { priority = 0.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_dog distance (vehicle player) > 300"/*%FSM*/; action=/*%FSM*/"_actionFollow = _dog addAction [""Follow Me"", _actionDir + ""follow.sqf"",[_handle,false], 0, true, true];" \n "_actionCall = player addAction [""Call Dog"", _actionDir + ""follow.sqf"",[_handle,true], 0, false, true];" \n "" \n "diag_log ""VEHICLE TOO FAR"";"/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class reorientate { priority = 0.000000; to="move_to_vehicle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((time - _waitTime) > 0.5)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class at_vehicle { priority = 0.000000; to="in_vehicle"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_dog distance (vehicle player) <= 8"/*%FSM*/; action=/*%FSM*/"diag_log ""DOG AT VEHICLE"";"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ /*%FSM*/ class Wait { name = "Wait"; init = /*%FSM*/"_pos = [(getPos _dog),10,90,4,0,5,0] call BIS_fnc_findSafePos;" \n "_dog moveTo _pos;"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { /*%FSM*/ class In_Position { priority = 1.000000; to="Wait"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_dog distance _pos < 3"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ /*%FSM*/ class call_back { priority = 0.000000; to="Waiting"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_command == ""return"""/*%FSM*/; action=/*%FSM*/"_dog removeAction _actionFollow;" \n "player removeAction _actionCall;" \n "" \n "if ((player distance _dog > 5) and (_watchDog)) then {" \n " _dog playActionNow ""GestureBark"";" \n " [_dog,""dog_bark"",0,false] call dayz_zombieSpeak;" \n "};"/*%FSM*/; }; /*%FSM*/ }; }; /*%FSM*/ }; initState="init"; finalStates[] = { "End", }; }; /*%FSM*/