diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server.pbo index 1dc625d2..2bcd92a8 100644 Binary files a/Server_Install_Pack/@epochhive/addons/epoch_server.pbo and b/Server_Install_Pack/@epochhive/addons/epoch_server.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo index ae44b882..223cf61b 100644 Binary files a/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo and b/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo index f7102b80..87fba2be 100644 Binary files a/Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo and b/Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Altis.pbo b/Server_Install_Pack/mpmissions/epoch.Altis.pbo index c9ac2aff..d92ed9bb 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Altis.pbo and b/Server_Install_Pack/mpmissions/epoch.Altis.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Australia.pbo b/Server_Install_Pack/mpmissions/epoch.Australia.pbo index 6581433f..7c9d83de 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Australia.pbo and b/Server_Install_Pack/mpmissions/epoch.Australia.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo b/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo index 67aaadac..f75b2532 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo and b/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo b/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo index 2b264fb2..b4cfa4fe 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo and b/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo b/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo index 7fc39d4b..e85fb762 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo and b/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo b/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo index 15feaf2c..c559982c 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo and b/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo b/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo index 781299df..81010653 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo and b/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Esseker.pbo b/Server_Install_Pack/mpmissions/epoch.Esseker.pbo index e3ff27df..5d0c0ded 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Esseker.pbo and b/Server_Install_Pack/mpmissions/epoch.Esseker.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo b/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo index b189d411..512f38c1 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo and b/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Napf.pbo b/Server_Install_Pack/mpmissions/epoch.Napf.pbo index 0e240fa4..2891ffbc 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Napf.pbo and b/Server_Install_Pack/mpmissions/epoch.Napf.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Porto.pbo b/Server_Install_Pack/mpmissions/epoch.Porto.pbo index c6f538b2..49b6411f 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Porto.pbo and b/Server_Install_Pack/mpmissions/epoch.Porto.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo b/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo index 9db899dd..7398af92 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo and b/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Sara.pbo b/Server_Install_Pack/mpmissions/epoch.Sara.pbo index cb87c139..414ff127 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Sara.pbo and b/Server_Install_Pack/mpmissions/epoch.Sara.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo b/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo index 9ffc0d95..9129d8d3 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo and b/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo b/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo index 44e166f0..0a6cc4b8 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo and b/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo b/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo index b2e378c8..ddcd0679 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo and b/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Stratis.pbo b/Server_Install_Pack/mpmissions/epoch.Stratis.pbo index e21b1eb9..44aa7d59 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Stratis.pbo and b/Server_Install_Pack/mpmissions/epoch.Stratis.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Takistan.pbo b/Server_Install_Pack/mpmissions/epoch.Takistan.pbo index 4aa1fc5b..3a9fe513 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Takistan.pbo and b/Server_Install_Pack/mpmissions/epoch.Takistan.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo b/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo index 060af12c..6e81116e 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo and b/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.VR.pbo b/Server_Install_Pack/mpmissions/epoch.VR.pbo index de97f435..aaf34c6b 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.VR.pbo and b/Server_Install_Pack/mpmissions/epoch.VR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo b/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo index a736633b..d091001f 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo and b/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo b/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo index 2b10718d..b654d449 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo and b/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.utes.pbo b/Server_Install_Pack/mpmissions/epoch.utes.pbo index 590f7995..34e30244 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.utes.pbo and b/Server_Install_Pack/mpmissions/epoch.utes.pbo differ diff --git a/Sources/epoch_code/System/EPOCH_zombie_brain.fsm b/Sources/epoch_code/System/EPOCH_zombie_brain.fsm index e83c7c2b..8ae184e4 100644 --- a/Sources/epoch_code/System/EPOCH_zombie_brain.fsm +++ b/Sources/epoch_code/System/EPOCH_zombie_brain.fsm @@ -1,7 +1,7 @@ -/*%FSM*/ +/*%FSM*/ /*%FSM*/ /* -item0[] = {"brainz",0,250,-25.000000,75.000000,75.000000,125.000000,0.000000,"brainz"}; +item0[] = {"brainz",0,4346,-25.000000,75.000000,75.000000,125.000000,0.000000,"brainz"}; item1[] = {"_",8,218,125.000000,-175.000000,225.000000,-125.000000,0.000000,""}; item2[] = {"instinct",2,250,125.000000,-250.000000,225.000000,-200.000000,0.000000,"instinct"}; item3[] = {"check",4,218,275.000000,-250.000000,375.000000,-200.000000,5.000000,"check"}; @@ -14,7 +14,7 @@ item9[] = {"dispose",4,218,-75.000000,-200.000000,25.000000,-150.000000,200.0000 item10[] = {"imaginary_target",4,218,600.000000,-150.000000,700.000000,-100.000000,70.000000,"imaginary" \n "target"}; item11[] = {"move",4,218,375.000000,-375.000000,475.000000,-325.000000,60.000000,"move"}; item12[] = {"checking_status",2,250,400.000000,-175.000000,500.000000,-125.000000,0.000000,"checking status"}; -item13[] = {"smell",4,4314,475.000000,-325.000000,575.000000,-275.000000,90.000000,"smell"}; +item13[] = {"smell",4,218,475.000000,-325.000000,575.000000,-275.000000,90.000000,"smell"}; item14[] = {"final_checks___r",4,218,375.000000,-75.000000,475.000000,-25.000000,10.000000,"final" \n "checks / resets"}; item15[] = {"done",4,218,275.000000,-100.000000,375.000000,-50.000000,100.000000,"done"}; item16[] = {"moan",4,218,300.000000,-400.000000,400.000000,-350.000000,70.000000,"moan"}; @@ -28,7 +28,7 @@ item23[] = {"hearing___target",4,218,600.000000,-225.000000,700.000000,-175.0000 item24[] = {"spin",2,250,-50.000000,-425.000000,50.000000,-375.000000,0.000000,"spin"}; item25[] = {"wait",4,218,75.000000,-425.000000,175.000000,-375.000000,0.000000,"wait"}; item26[] = {"scream",4,218,200.000000,-425.000000,300.000000,-375.000000,80.000000,"scream"}; -item27[] = {"____FAKE____",9,328,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"}; +item27[] = {"____FAKE____",9,0,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"}; link0[] = {0,17}; link1[] = {1,2}; link2[] = {2,3}; @@ -70,784 +70,812 @@ link37[] = {24,25}; link38[] = {25,2}; link39[] = {26,2}; link40[] = {27,10}; -globals[] = {0.000000,0,0,0,0,640,480,1,267,6316128,1,-268.969421,732.515686,320.848328,-611.003845,978,884,1}; -window[] = {2,-1,-1,-1,-1,603,78,1103,78,3,996}; +globals[] = {0.000000,0,0,0,0,640,480,1,267,6316128,1,-268.969421,732.515686,320.848328,-611.003845,978,854,1}; +window[] = {2,-1,-1,-32000,-32000,551,26,1051,26,3,996}; *//*%FSM*/ class FSM { - fsmName = "zombie"; - class States - { - /*%FSM*/ - class brainz - { - name = "brainz"; - init = /*%FSM*/"_zombie = _this select 0;" \n - "_sBomb = _this select 1;" \n - "_head = objNull;" \n - "_lastAlert = diag_tickTime;" \n - "_trgt = player;" \n - "" \n - "//Defaults" \n - "_fsmPath = ""epoch_code\system"";" \n - "_zombie setBehaviour ""CARELESS"";" \n - "_zombie setUnitPos ""UP""; " \n - "_trgtArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n - "_vehArray = [""Car""];" \n - "_trgt = player;" \n - "_t = diag_tickTime;" \n - "_zedPos = getPosATL _zombie;" \n - "" \n - "//Behaviour Vars" \n - "_attackDist = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""attackDist"");" \n - "_groanTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""groanTrig"");" \n - "_zDisposeRange = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""disposeRange"");" \n - "_sHideTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""hideLevel""); " \n - "_moveTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""chargeLevel""); " \n - "_sHardness = floor (random 6) max 1;" \n - "_checkFreq = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""reflexSpeed"");" \n - "_welcomeWait = random 4;" \n - "_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n - "_jammerRange = getNumber(_config >> ""buildingJammerRange"");" \n - "_zSmell = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""smell"");" \n - "_zSight = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""sight"");" \n - "_zHear = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""hearing"");" \n - "_zMem = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""memory"");" \n - "_zMoans = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""moans"");" \n - "_zScreams = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""screams"");" \n - "" \n - "//Smell" \n - "_smellDist = _zSmell select 0;" \n - "_smellCoeff = _zSmell select 1;" \n - "" \n - "//Sight" \n - "_sightDist = _zSight select 0;" \n - "_sightCoeff = _zSight select 1;" \n - "_sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt];" \n - "" \n - "//Hearing" \n - "_hearDist = _zHear select 0;" \n - "_hearCoeff = _zHear select 1;" \n - "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n - "_shotDist = 0;" \n - "" \n - "//Memory" \n - "_memTime = _zMem select 0;" \n - "_memCoeff = _zMem select 1;" \n - "_m = _t;" \n - "_spottedPos = [0,0,0];" \n - "" \n - "//Moving" \n - "_moveTo = [0,0,0];" \n - "" \n - "//Init moveTo" \n - "_zombie moveTo _zedPos;" \n - "" \n - "//Attack" \n - "_lastAttack = _t;" \n - "_doAttack = false;" \n - "" \n - "//Sounds" \n - "_doMoan = false;" \n - "_doScream = false;" \n - "_lastMoan = _t;" \n - "" \n - "//Missions" \n - "_traderDispose = false;" \n - "" \n - "//FSM" \n - "_walkHandle = -1;" \n - "" \n - "_requestDispose = false;" \n - "_nrstTrgt = objNull;" \n - "_lowDist = 0;" \n - "_currDist = 0;" \n - "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n - "" \n - "_u = _t;" \n - "_c = _u;" \n - "_f = _c;" \n - "_h = _f;" \n - "_d2 = _h;" \n - "" \n - "" \n - "" \n - "_dirTo = 0;" \n - "_lDist = 0;" \n - "_checkEntry = """";" \n - "" \n - "_decisionMade = false;" \n - "_actionDone = false;" \n - "_zombiePos=[0,0,0];" \n - "_moveTo=[0,0,0];" \n - "_trgtPos=[0,0,0];" \n - "_hidePos = [0,0,0];" \n - "_nrPlyrs = [];" \n - "_circlePos = [0,0,0];" \n - "_behindPos = [0,0,0];" \n - "_sSide = 90;" \n - "" \n - "_vectTot = [0,0,0];" \n - "" \n - "_lastAction = """";" \n - "_maxStalkDist = 48;" \n - "_maxStalkDistPerm = 48;" \n - "_minStalkDist = 12;" \n - "_minStalkDistPerm = 12;" \n - "_doWander = false;" \n - "_callHide = false;" \n - "_callMove = false;" \n - "_callGroan = false;" \n - "" \n - "//Feeling vars" \n - "_sAnger = 50;" \n - "_sFear = 50;" \n - "_threateLevel = 0;" \n - "_addThreat = 0;" \n - "_sHit = [objNull, 0];" \n - "" \n - "_angerCoeff = random 1;" \n - "_calmAngerCoeff = 1 - _angerCoeff;" \n - "_fearCoeff = random 1;" \n - "_calmFearCoeff = 1 - _fearCoeff;" \n - "" \n - "_stuckCount = 0;" \n - "" \n - "_traderDispose = false;" \n - "" \n - "_doMove = false;" \n - "_sanityCheckDone = false;" \n - "_canSee = ([_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt] >= 0.5);" \n - "_nrTrgts = [];" \n - "_threatLevel = 0;" \n - "_trgtDist = _trgt distance _zombie;" \n - "_sanityCheck = 0;" \n - "_doHide = false;" \n - "_doAttack = false;" \n - "_firedNear = 0;" \n - "" \n - "" \n - "" \n - "" \n - "//Debug - Uncomment Sounds for live" \n - "_randomGroan = {" \n - "/*" \n - "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n - "_sound = selectRandom _sounds;" \n - "" \n - "_zombie say3D _sound;" \n - "_say3D_PVS = [player, _zombie,(EPOCH_sounds find _sound), Epoch_personalToken];" \n - "_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n - "*/" \n - "};" \n - "" \n - "_doInterrupt = {" \n - "_actionDone = true;" \n - "_criteria = ""(true)"";" \n - "};" \n - "" \n - "//DEBUG" \n - "_doDebug = false;" \n - "axeDebug = _doDebug ;" \n - "if(_doDebug)then{" \n - "axeDebug = true;" \n - "_jammerRange = 75;" \n - "axeZed = _zombie;" \n - "_debugDo = ""START"";" \n - "_mkrName = """";" \n - "};" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Wait_random + fsmName = "zombie"; + class States { - priority = 10.000000; - to="reset_vars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM*/; - action=/*%FSM*/"call _randomGroan;"/*%FSM*/; + /*%FSM*/ + class brainz + { + name = "brainz"; + itemno = 0; + init = /*%FSM*/"_zombie = _this select 0;" \n + "_sBomb = _this select 1;" \n + "_head = objNull;" \n + "_lastAlert = diag_tickTime;" \n + "_trgt = player;" \n + "" \n + "//Defaults" \n + "_fsmPath = ""epoch_code\system"";" \n + "_zombie setBehaviour ""CARELESS"";" \n + "_zombie setUnitPos ""UP""; " \n + "_trgtArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n + "_vehArray = [""Car""];" \n + "_trgt = player;" \n + "_t = diag_tickTime;" \n + "_zedPos = getPosATL _zombie;" \n + "" \n + "//Behaviour Vars" \n + "_attackDist = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""attackDist"");" \n + "_groanTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""groanTrig"");" \n + "_zDisposeRange = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""disposeRange"");" \n + "_sHideTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""hideLevel""); " \n + "_moveTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""chargeLevel""); " \n + "_sHardness = floor (random 6) max 1;" \n + "_checkFreq = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""reflexSpeed"");" \n + "_welcomeWait = random 4;" \n + "_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n + "_jammerRange = getNumber(_config >> ""buildingJammerRange"");" \n + "_zSmell = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""smell"");" \n + "_zSight = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""sight"");" \n + "_zHear = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""hearing"");" \n + "_zMem = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""memory"");" \n + "_zMoans = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""moans"");" \n + "_zScreams = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""screams"");" \n + "" \n + "//Smell" \n + "_smellDist = _zSmell select 0;" \n + "_smellCoeff = _zSmell select 1;" \n + "" \n + "//Sight" \n + "_sightDist = _zSight select 0;" \n + "_sightCoeff = _zSight select 1;" \n + "_sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt];" \n + "" \n + "//Hearing" \n + "_hearDist = _zHear select 0;" \n + "_hearCoeff = _zHear select 1;" \n + "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n + "_shotDist = 0;" \n + "" \n + "//Memory" \n + "_memTime = _zMem select 0;" \n + "_memCoeff = _zMem select 1;" \n + "_m = _t;" \n + "_spottedPos = [0,0,0];" \n + "" \n + "//Moving" \n + "_moveTo = [0,0,0];" \n + "" \n + "//Init moveTo" \n + "_zombie moveTo _zedPos;" \n + "" \n + "//Attack" \n + "_lastAttack = _t;" \n + "_doAttack = false;" \n + "" \n + "//Sounds" \n + "_doMoan = false;" \n + "_doScream = false;" \n + "_lastMoan = _t;" \n + "" \n + "//Missions" \n + "_traderDispose = false;" \n + "" \n + "//FSM" \n + "_walkHandle = -1;" \n + "" \n + "_requestDispose = false;" \n + "_nrstTrgt = objNull;" \n + "_lowDist = 0;" \n + "_currDist = 0;" \n + "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n + "" \n + "_u = _t;" \n + "_c = _u;" \n + "_f = _c;" \n + "_h = _f;" \n + "_d2 = _h;" \n + "" \n + "" \n + "" \n + "_dirTo = 0;" \n + "_lDist = 0;" \n + "_checkEntry = """";" \n + "" \n + "_decisionMade = false;" \n + "_actionDone = false;" \n + "_zombiePos=[0,0,0];" \n + "_moveTo=[0,0,0];" \n + "_trgtPos=[0,0,0];" \n + "_hidePos = [0,0,0];" \n + "_nrPlyrs = [];" \n + "_circlePos = [0,0,0];" \n + "_behindPos = [0,0,0];" \n + "_sSide = 90;" \n + "" \n + "_vectTot = [0,0,0];" \n + "" \n + "_lastAction = """";" \n + "_maxStalkDist = 48;" \n + "_maxStalkDistPerm = 48;" \n + "_minStalkDist = 12;" \n + "_minStalkDistPerm = 12;" \n + "_doWander = false;" \n + "_callHide = false;" \n + "_callMove = false;" \n + "_callGroan = false;" \n + "" \n + "//Feeling vars" \n + "_sAnger = 50;" \n + "_sFear = 50;" \n + "_threateLevel = 0;" \n + "_addThreat = 0;" \n + "_sHit = [objNull, 0];" \n + "" \n + "_angerCoeff = random 1;" \n + "_calmAngerCoeff = 1 - _angerCoeff;" \n + "_fearCoeff = random 1;" \n + "_calmFearCoeff = 1 - _fearCoeff;" \n + "" \n + "_stuckCount = 0;" \n + "" \n + "_traderDispose = false;" \n + "" \n + "_doMove = false;" \n + "_sanityCheckDone = false;" \n + "_canSee = ([_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt] >= 0.5);" \n + "_nrTrgts = [];" \n + "_threatLevel = 0;" \n + "_trgtDist = _trgt distance _zombie;" \n + "_sanityCheck = 0;" \n + "_doHide = false;" \n + "_doAttack = false;" \n + "_firedNear = 0;" \n + "" \n + "" \n + "" \n + "" \n + "//Debug - Uncomment Sounds for live" \n + "_randomGroan = {" \n + "/*" \n + "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n + "_sound = selectRandom _sounds;" \n + "" \n + "_zombie say3D _sound;" \n + "[player, _zombie, _sound, Epoch_personalToken] remoteExec [""EPOCH_server_handle_say3D"",2];" \n + "*/" \n + "};" \n + "" \n + "_doInterrupt = {" \n + "_actionDone = true;" \n + "_criteria = ""(true)"";" \n + "};" \n + "" \n + "//DEBUG" \n + "_doDebug = false;" \n + "axeDebug = _doDebug ;" \n + "if(_doDebug)then{" \n + "axeDebug = true;" \n + "_jammerRange = 75;" \n + "axeZed = _zombie;" \n + "_debugDo = ""START"";" \n + "_mkrName = """";" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait_random + { + itemno = 17; + priority = 10.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM*/; + action=/*%FSM*/"call _randomGroan;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class instinct + { + name = "instinct"; + itemno = 2; + init = /*%FSM*/"//systemchat format[""I %1"",diag_tickTime];" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = 9; + priority = 200.000000; + to="pre_dispose"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle setFSMVariable [""_callDispose"", true];" \n + "};" \n + "_zombie removeAllEventHandlers ""Hit"";" \n + "_zombie removeAllEventHandlers ""FiredNear"";" \n + "//[] call EPOCH_zombieSpawn;" \n + "" \n + "_t = diag_tickTime;" \n + "" \n + "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose_1 + { + itemno = 5; + priority = 100.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(alive _zombie) || _traderDispose || _trgtDist > _zDisposeRange;"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class attack + { + itemno = 19; + priority = 90.000000; + to="spin"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doAttack"/*%FSM*/; + action=/*%FSM*/"_zombie moveTo _zedPos;" \n + "_aslPos = ATLToASL _zedPos;" \n + "_trgtPos = getPosASLVisual _trgt;" \n + "_unitV = velocity _zombie;" \n + "_unitvDir = vectorDir _zombie;" \n + "_vDir = _aslPos vectorFromTo _trgtPos;" \n + "_unitvUp = vectorUp _trgt;" \n + "_lastAttack = _t;" \n + "_doAttack = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class scream + { + itemno = 26; + priority = 80.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doScream"/*%FSM*/; + action=/*%FSM*/"_random = selectRandom _zScreams;" \n + "playSound format [""%1"",_random];" \n + "_doScream = false;" \n + "_debugDo = ""SCREAM"";" \n + "//systemChat ""Scream"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class moan + { + itemno = 16; + priority = 70.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doMoan && diag_tickTime - _lastMoan > 8"/*%FSM*/; + action=/*%FSM*/"_random = selectRandom _zMoans;" \n + "playSound format [""%1"",_random];" \n + "_doMoan = false;" \n + "_lastMoan = _t;" \n + "_debugDo = ""SOUNDS"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = 11; + priority = 60.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_moveTo isEqualTo [0,0,0]) && moveToCompleted _zombie"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle = [""EPOCH_zombie_walking"",_fsmPath,[_zombie]] call EPOCH_fnc_dynamicFSM;" \n + "};" \n + "_walkHandle setFSMVariable [""_nextPos"", _moveTo];" \n + "_walkHandle setFSMVariable [""_deadTrgts"", _deadTrgts];" \n + "_moveTo = [0,0,0];" \n + "_debugDo = ""MOVE"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class check + { + itemno = 3; + priority = 5.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime > _u + _checkFreq"/*%FSM*/; + action=/*%FSM*/"_sanityCheck = 100;" \n + "_debugDo = ""CHECK"";" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class pre_dispose + { + name = "pre_dispose"; + itemno = 4; + init = /*%FSM*/"_nrTrgts = _zedPos nearEntities [_trgtArr, 480];" \n + "_canSee = [];" \n + "{" \n + " if !(lineIntersects [eyePos _trgt, eyePos _zombie, _zombie, _trgt]) then{" \n + " _canSee pushBack _x;" \n + " };" \n + "}forEach _nrTrgts;" \n + "if (count _canSee < 1)then{" \n + "deleteVehicle _zombie;" \n + "_t = _t + 480;" \n + "}else{" \n + "_zombie setdamage 1;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait_dispose + { + itemno = 6; + priority = 0.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _t > 480;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset_vars + { + name = "reset_vars"; + itemno = 7; + init = /*%FSM*/"//System Vars" \n + "_t = diag_tickTime;" \n + "_u = _t;" \n + "" \n + "_doLoiter = false;" \n + "_loiterType = 0;" \n + "" \n + "_doMove = false;" \n + "_moving = false;" \n + "_moveCount = 0;" \n + "_attempts = 0;" \n + "" \n + "_doGroan = false;" \n + "" \n + "" \n + "_rnd = 0;" \n + "_sWait = 0;" \n + "_doDispose = false;" \n + "_chooseTarget = false;" \n + "" \n + "_nrTrgts=[];" \n + "_doHide = false;" \n + "" \n + "//Moving" \n + "_moving = false;" \n + "" \n + "//Sight" \n + "//_spottedPos = [0,0,0];" \n + "" \n + "//Safezones" \n + "_inSafe = false;" \n + "" \n + "//Dispose" \n + "" \n + "//FSM" \n + "" \n + "" \n + "//Brain Vars" \n + "_override = false;" \n + "_criteria =""(false)"";" \n + "_criteriaMet = false;" \n + "_criteriaMetAction = nil;" \n + "_allowInterrupt = false;" \n + "_interruptReason = ""(false)"";" \n + "" \n + "_debugDo = ""RESET"";" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = 9; + priority = 200.000000; + to="pre_dispose"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle setFSMVariable [""_callDispose"", true];" \n + "};" \n + "_zombie removeAllEventHandlers ""Hit"";" \n + "_zombie removeAllEventHandlers ""FiredNear"";" \n + "//[] call EPOCH_zombieSpawn;" \n + "" \n + "_t = diag_tickTime;" \n + "" \n + "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 1; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class checking_status + { + name = "checking_status"; + itemno = 12; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class done + { + itemno = 15; + priority = 100.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck < 1" \n + ""/*%FSM*/; + action=/*%FSM*/"_debugDo = ""CHECKED"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class pre_vars___check + { + itemno = 21; + priority = 95.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 95;"/*%FSM*/; + action=/*%FSM*/"//Zed" \n + "_zedPos = getPosATL _zombie;" \n + "_zedSpeed = speed _zombie;" \n + "" \n + "//Target" \n + "_trgtDist = _trgt distance _zombie;" \n + "_trgtPos = getPosATL _trgt;" \n + "_deadTrgts = [];" \n + "" \n + "//Smell" \n + "_smellVect = [0,0,0];" \n + "_smellPos = [0,0,0];" \n + "_canSmellCount = 0;" \n + "" \n + "//Sight" \n + "_canSee = false;" \n + "_visTrgts = [];" \n + "_sightVect = [0,0,0];" \n + "_spottedVect = [0,0,0];" \n + "" \n + "//Attack" \n + "_sight = 0;" \n + "" \n + "" \n + "//Hearing" \n + "_hearVect = [0,0,0];" \n + "" \n + "//Target" \n + "_spottedVect = [0,0,0];" \n + "" \n + "//Wander - Imaginary Target" \n + "_wanderVect = [0,0,0];" \n + "" \n + "_vectTot = [0,0,0];" \n + "_vectDiv = 0;" \n + "" \n + "//EH" \n + "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n + "_shotDist = _zFiredNear select 1;" \n + "" \n + "//Memory" \n + "if(diag_tickTime - _m > _memTime)then{" \n + "_spottedPos = [0,0,0];" \n + "};" \n + "" \n + "//Safe Zones" \n + "" \n + "_restricted = nearestObjects [player, [""ProtectionZone_Invisible_F""], 30];" \n + "if !(_restricted isEqualTo []) then {" \n + "_inSafe = true;" \n + "};" \n + "" \n + "_sanityCheck = 95;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class smell + { + itemno = 13; + priority = 90.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 90 && !_moving && _smellCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_nrstTrgt = objNull;" \n + "//_nrTrgts = _zedPos nearEntities [_trgtArr, _smellDist];" \n + "_nrTrgts = nearestObjects [_zedPos, _trgtArr, _smellDist];" \n + "_avPos = [0,0,0];" \n + "_upwindPos = [0,0,0];" \n + "_smellTrgtPos = [];" \n + "" \n + "{" \n + " if(alive _x)then{" \n + " _upwindPos = [_x, _smellDist, winddir] call BIS_fnc_relPos;" \n + " if(_zombie distance _upwindPos < _smellDist + 1)exitWith{" \n + " _smellTrgtPos = getPosATL _x;" \n + " _canSmellCount =_canSmellCount + 1;" \n + " };" \n + " }else{" \n + " _deadTrgts pushBack _x;" \n + " };" \n + "} forEach _nrTrgts;" \n + "" \n + "" \n + "if(_canSmellCount > 0)then{" \n + "_smellVect = _zedPos vectorDiff _smellTrgtPos;" \n + "_vectDiv = _vectDiv + 1;" \n + "};" \n + "" \n + "" \n + "_sanityCheck = 90;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sight___target + { + itemno = 22; + priority = 85.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 85 && _sightCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"//_nrTrgts = _zedPos nearEntities [_trgtArr, _sightDist];" \n + "_nrTrgts = nearestObjects [_zedPos, _trgtArr, _sightDist];" \n + "_sightPos = [0,0,0];" \n + "_avPos = [0,0,0];" \n + "" \n + "_trgtCount = count _nrTrgts;" \n + "_visTrgts = [];" \n + "" \n + "if(_trgtCount > 0)then{" \n + "" \n + "" \n + "" \n + " {" \n + " _sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _x];" \n + " if(alive _x)then{" \n + " if(_sight >= 0.62)then{" \n + " _thisPos = getPosATL _x;" \n + " _relDir = _zombie getRelDir _thisPos;" \n + " if(_relDir < 42 || _relDir > 318)then{" \n + " _visTrgts pushBack _x;" \n + " _avPos = _avPos vectorAdd _thisPos;" \n + " };" \n + " };" \n + " }else{" \n + " _deadTrgts pushBack _x;" \n + " };" \n + " } forEach _nrTrgts;" \n + "" \n + " if(count _visTrgts > 0)then{" \n + " _spottedPos = getPosATL (_visTrgts select 0);" \n + " //_sightVect = _zedPos vectorDiff ([_avPos,_trgtCount,false] call EPOCH_fnc_vectorDivide);" \n + " _sightVect = _zedPos vectorDiff _spottedPos;" \n + " _sightVect = [_sightVect,_sightCoeff] call BIS_fnc_vectorMultiply;" \n + " _vectDiv = _vectDiv + 1;" \n + " _canSee = true;" \n + " }; " \n + "" \n + "};" \n + "_sanityCheck = 85;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class hearing___target + { + itemno = 23; + priority = 80.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 80 && !_moving && (_shotDist > 0 && _shotDist < _hearDist) && _hearCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_trgt = (_zFiredNear select 0);" \n + "_hearTrgtPos = getPosATL _trgt;" \n + "_hearVect = _zedPos vectorDiff _hearTrgtPos;" \n + "_hearVect = [_hearVect,_hearCoeff] call BIS_fnc_vectorMultiply;" \n + "_vectDiv = _vectDiv + 1;" \n + "_zombie setVariable [""zFiredNear"", nil];" \n + "_sanityCheck = 80;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class do_attack + { + itemno = 8; + priority = 60.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 60 && _sight > 0.6 && _trgtDist < _attackDist && diag_tickTime - _lastAttack > 3 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_doAttack = true;" \n + "_doScream = true;" \n + "_sanityCheck = 60;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class stuck + { + itemno = 20; + priority = 30.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 30 && _moving && _attempts > 6 && _zedSpeed < 0.4" \n + "" \n + "" \n + ""/*%FSM*/; + action=/*%FSM*/"" \n + " if (!(_moveTo isEqualTo [0,0,0])) then {" \n + "" \n + "// _moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n + " _zombie moveTo _zedPos;" \n + " _attempts = 0;" \n + " //systemChat format[""UnSticking: %1"", diag_tickTime];" \n + " };" \n + "" \n + "_sanityCheck = 30;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class final_checks___r + { + itemno = 14; + priority = 10.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/; + action=/*%FSM*/"" \n + "_sAnger =_sAnger min 100 max 0;" \n + "_sFear =_sFear min 100 max 0;" \n + "" \n + "if(_vectDiv > 0)then{" \n + "_vectTot = _smellVect vectorAdd _sightVect vectorAdd _hearVect vectorAdd _spottedVect vectorAdd _wanderVect;" \n + "_moveTo = _zedPos vectorDiff ([_vectTot,_vectDiv,false] call EPOCH_fnc_vectorDivide);" \n + "_doMoan = true;" \n + "//_moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n + "};" \n + "" \n + "" \n + "if(_zedPos distance _spottedPos < 3)then{" \n + "_spottedPos = [0,0,0];" \n + "};" \n + "" \n + "if(_zombie getVariable [""EPOCH_callGroan"",false])then{_zombie setVariable [""EPOCH_callGroan"",false];_callGroan = true; _doGroan = true;};" \n + "if(_zombie getVariable [""EPOCH_callBoom"",false])then{_zombie setVariable [""EPOCH_callBoom"",false];_callBoom = true; _doBoom = true;};" \n + "" \n + "" \n + "if(_doDebug)then{" \n + "_plyrVel = velocity player;" \n + "_plyrVelSpeed = (_plyrVel select 0) + (_plyrVel select 1);" \n + "_plyRelDir = (player getRelDir _zedPos) - 180; " \n + "hintSilent format [""ZOMBIE (%4)\nStalk: %1 / %2\nDist To Move: %3 | Plyr:%6\nSee: %5 (%20)\nAnger: %7\nFear: %8\nHit: %9\nNear: %10\nSmell: %11\nMoved(ing):%12(%17)\nAttempts: %15\nPlyr Vel: %13\nRDir: %14\nSpeed: %16\nVectors: %18\nFPS: %19"",_minStalkDist,_maxStalkDist,_moveTo distance _zombie,_debugDo, _canSee,_zombie distance _trgt,_sAnger,_sFear,_sHit,_zFiredNear,_canSmellCount,moveToCompleted _zombie, _plyrVelSpeed,_plyRelDir,_attempts,_zedSpeed,_moving,_vectDiv,diag_FPS,_sight];" \n + "[_zombie,_zedPos,wind,""Sign_Arrow_Direction_Pink_F""] call EPOCH_fncHordeMemberVelPointer;" \n + "[""target"",0.8,_moveTo]call EPOCH_fnc_DebugMarker;" \n + "[""zed"",0.8,_zedPos]call EPOCH_fnc_DebugMarker;" \n + "};" \n + "" \n + "_sHit = [objNull, 0];" \n + "_zFiredNear = [objNull, 0];" \n + "_sanityCheck = 0;" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 18; + init = /*%FSM*/"if (!isNull _zombie) then {" \n + "deleteVehicle _zombie;//Move to cleanup" \n + "};" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class spin + { + name = "spin"; + itemno = 24; + init = /*%FSM*/"_t = diag_tickTime;" \n + "_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait + { + itemno = 25; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _t > 0.6;"/*%FSM*/; + action=/*%FSM*/"[_zombie,_trgt] call EPOCH_client_bitePlayer;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ____FAKE____ + { + name = "____FAKE____"; + itemno = 27; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class imaginary_target + { + itemno = 10; + priority = 70.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 70 && _vectDiv < 1"/*%FSM*/; + action=/*%FSM*/"_rndPos = [_zedPos, random 360, ((random 4) max 1)] call BIS_fnc_relPos;" \n + "_wanderVect = _zedPos vectorDiff _rndPos;" \n + "_vectDiv = _vectDiv + 1;" \n + "_sanityCheck = 70;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class instinct - { - name = "instinct"; - init = /*%FSM*/"//systemchat format[""I %1"",diag_tickTime];" \n - "" \n - "" \n - "" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class dispose + initState="brainz"; + finalStates[] = { - priority = 200.000000; - to="pre_dispose"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; - action=/*%FSM*/"if(_walkHandle < 0)then{" \n - "_walkHandle setFSMVariable [""_callDispose"", true];" \n - "};" \n - "_zombie removeAllEventHandlers ""Hit"";" \n - "_zombie removeAllEventHandlers ""FiredNear"";" \n - "//[] call EPOCH_zombieSpawn;" \n - "" \n - "_t = diag_tickTime;" \n - "" \n - "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + "end", }; - /*%FSM*/ - /*%FSM*/ - class dispose_1 - { - priority = 100.000000; - to="instinct"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(alive _zombie) || _traderDispose || _trgtDist > _zDisposeRange;"/*%FSM*/; - action=/*%FSM*/"_doDispose = true;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class attack - { - priority = 90.000000; - to="spin"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_doAttack"/*%FSM*/; - action=/*%FSM*/"_zombie moveTo _zedPos;" \n - "_aslPos = ATLToASL _zedPos;" \n - "_trgtPos = getPosASLVisual _trgt;" \n - "_unitV = velocity _zombie;" \n - "_unitvDir = vectorDir _zombie;" \n - "_vDir = _aslPos vectorFromTo _trgtPos;" \n - "_unitvUp = vectorUp _trgt;" \n - "_lastAttack = _t;" \n - "_doAttack = false;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class scream - { - priority = 80.000000; - to="instinct"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_doScream"/*%FSM*/; - action=/*%FSM*/"_random = selectRandom _zScreams;" \n - "playSound format [""%1"",_random];" \n - "_doScream = false;" \n - "_debugDo = ""SCREAM"";" \n - "//systemChat ""Scream"";"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class moan - { - priority = 70.000000; - to="instinct"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_doMoan && diag_tickTime - _lastMoan > 8"/*%FSM*/; - action=/*%FSM*/"_random = selectRandom _zMoans;" \n - "playSound format [""%1"",_random];" \n - "_doMoan = false;" \n - "_lastMoan = _t;" \n - "_debugDo = ""SOUNDS"";"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class move - { - priority = 60.000000; - to="instinct"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(_moveTo isEqualTo [0,0,0]) && moveToCompleted _zombie"/*%FSM*/; - action=/*%FSM*/"if(_walkHandle < 0)then{" \n - "_walkHandle = [""EPOCH_zombie_walking"",_fsmPath,[_zombie]] call EPOCH_fnc_dynamicFSM;" \n - "};" \n - "_walkHandle setFSMVariable [""_nextPos"", _moveTo];" \n - "_walkHandle setFSMVariable [""_deadTrgts"", _deadTrgts];" \n - "_moveTo = [0,0,0];" \n - "_debugDo = ""MOVE"";"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class check - { - priority = 5.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"diag_tickTime > _u + _checkFreq"/*%FSM*/; - action=/*%FSM*/"_sanityCheck = 100;" \n - "_debugDo = ""CHECK"";" \n - "" \n - ""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class pre_dispose - { - name = "pre_dispose"; - init = /*%FSM*/"_nrTrgts = _zedPos nearEntities [_trgtArr, 480];" \n - "_canSee = [];" \n - "{" \n - " if !(lineIntersects [eyePos _trgt, eyePos _zombie, _zombie, _trgt]) then{" \n - " _canSee pushBack _x;" \n - " };" \n - "}forEach _nrTrgts;" \n - "if (count _canSee < 1)then{" \n - "deleteVehicle _zombie;" \n - "_t = _t + 480;" \n - "}else{" \n - "_zombie setdamage 1;" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class wait_dispose - { - priority = 0.000000; - to="end"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"diag_tickTime - _t > 480;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class reset_vars - { - name = "reset_vars"; - init = /*%FSM*/"//System Vars" \n - "_t = diag_tickTime;" \n - "_u = _t;" \n - "" \n - "_doLoiter = false;" \n - "_loiterType = 0;" \n - "" \n - "_doMove = false;" \n - "_moving = false;" \n - "_moveCount = 0;" \n - "_attempts = 0;" \n - "" \n - "_doGroan = false;" \n - "" \n - "" \n - "_rnd = 0;" \n - "_sWait = 0;" \n - "_doDispose = false;" \n - "_chooseTarget = false;" \n - "" \n - "_nrTrgts=[];" \n - "_doHide = false;" \n - "" \n - "//Moving" \n - "_moving = false;" \n - "" \n - "//Sight" \n - "//_spottedPos = [0,0,0];" \n - "" \n - "//Safezones" \n - "_inSafe = false;" \n - "" \n - "//Dispose" \n - "" \n - "//FSM" \n - "" \n - "" \n - "//Brain Vars" \n - "_override = false;" \n - "_criteria =""(false)"";" \n - "_criteriaMet = false;" \n - "_criteriaMetAction = nil;" \n - "_allowInterrupt = false;" \n - "_interruptReason = ""(false)"";" \n - "" \n - "_debugDo = ""RESET"";" \n - "" \n - "" \n - "" \n - "" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class dispose - { - priority = 200.000000; - to="pre_dispose"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; - action=/*%FSM*/"if(_walkHandle < 0)then{" \n - "_walkHandle setFSMVariable [""_callDispose"", true];" \n - "};" \n - "_zombie removeAllEventHandlers ""Hit"";" \n - "_zombie removeAllEventHandlers ""FiredNear"";" \n - "//[] call EPOCH_zombieSpawn;" \n - "" \n - "_t = diag_tickTime;" \n - "" \n - "//systemChat ""Dispose/Respawn"";"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class _ - { - priority = 0.000000; - to="instinct"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class checking_status - { - name = "checking_status"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class done - { - priority = 100.000000; - to="reset_vars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck < 1" \n - ""/*%FSM*/; - action=/*%FSM*/"_debugDo = ""CHECKED"";"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class pre_vars___check - { - priority = 95.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 95;"/*%FSM*/; - action=/*%FSM*/"//Zed" \n - "_zedPos = getPosATL _zombie;" \n - "_zedSpeed = speed _zombie;" \n - "" \n - "//Target" \n - "_trgtDist = _trgt distance _zombie;" \n - "_trgtPos = getPosATL _trgt;" \n - "_deadTrgts = [];" \n - "" \n - "//Smell" \n - "_smellVect = [0,0,0];" \n - "_smellPos = [0,0,0];" \n - "_canSmellCount = 0;" \n - "" \n - "//Sight" \n - "_canSee = false;" \n - "_visTrgts = [];" \n - "_sightVect = [0,0,0];" \n - "_spottedVect = [0,0,0];" \n - "" \n - "//Attack" \n - "_sight = 0;" \n - "" \n - "" \n - "//Hearing" \n - "_hearVect = [0,0,0];" \n - "" \n - "//Target" \n - "_spottedVect = [0,0,0];" \n - "" \n - "//Wander - Imaginary Target" \n - "_wanderVect = [0,0,0];" \n - "" \n - "_vectTot = [0,0,0];" \n - "_vectDiv = 0;" \n - "" \n - "//EH" \n - "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n - "_shotDist = _zFiredNear select 1;" \n - "" \n - "//Memory" \n - "if(diag_tickTime - _m > _memTime)then{" \n - "_spottedPos = [0,0,0];" \n - "};" \n - "" \n - "//Safe Zones" \n - "" \n - "_restricted = nearestObjects [player, [""ProtectionZone_Invisible_F""], 30];" \n - "if !(_restricted isEqualTo []) then {" \n - "_inSafe = true;" \n - "};" \n - "" \n - "_sanityCheck = 95;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class smell - { - priority = 90.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 90 && !_moving && _smellCoeff > 0 && !_inSafe"/*%FSM*/; - action=/*%FSM*/"_nrstTrgt = objNull;" \n - "//_nrTrgts = _zedPos nearEntities [_trgtArr, _smellDist];" \n - "_nrTrgts = nearestObjects [_zedPos, _trgtArr, _smellDist];" \n - "_avPos = [0,0,0];" \n - "_upwindPos = [0,0,0];" \n - "_smellTrgtPos = [];" \n - "" \n - "{" \n - " if(alive _x)then{" \n - " _upwindPos = [_x, _smellDist, winddir] call BIS_fnc_relPos;" \n - " if(_zombie distance _upwindPos < _smellDist + 1)exitWith{" \n - " _smellTrgtPos = getPosATL _x;" \n - " _canSmellCount =_canSmellCount + 1;" \n - " };" \n - " }else{" \n - " _deadTrgts pushBack _x;" \n - " };" \n - "} forEach _nrTrgts;" \n - "" \n - "" \n - "if(_canSmellCount > 0)then{" \n - "_smellVect = _zedPos vectorDiff _smellTrgtPos;" \n - "_vectDiv = _vectDiv + 1;" \n - "};" \n - "" \n - "" \n - "_sanityCheck = 90;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class sight___target - { - priority = 85.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 85 && _sightCoeff > 0 && !_inSafe"/*%FSM*/; - action=/*%FSM*/"//_nrTrgts = _zedPos nearEntities [_trgtArr, _sightDist];" \n - "_nrTrgts = nearestObjects [_zedPos, _trgtArr, _sightDist];" \n - "_sightPos = [0,0,0];" \n - "_avPos = [0,0,0];" \n - "" \n - "_trgtCount = count _nrTrgts;" \n - "_visTrgts = [];" \n - "" \n - "if(_trgtCount > 0)then{" \n - "" \n - "" \n - "" \n - " {" \n - " _sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _x];" \n - " if(alive _x)then{" \n - " if(_sight >= 0.62)then{" \n - " _thisPos = getPosATL _x;" \n - " _relDir = _zombie getRelDir _thisPos;" \n - " if(_relDir < 42 || _relDir > 318)then{" \n - " _visTrgts pushBack _x;" \n - " _avPos = _avPos vectorAdd _thisPos;" \n - " };" \n - " };" \n - " }else{" \n - " _deadTrgts pushBack _x;" \n - " };" \n - " } forEach _nrTrgts;" \n - "" \n - " if(count _visTrgts > 0)then{" \n - " _spottedPos = getPosATL (_visTrgts select 0);" \n - " //_sightVect = _zedPos vectorDiff ([_avPos,_trgtCount,false] call EPOCH_fnc_vectorDivide);" \n - " _sightVect = _zedPos vectorDiff _spottedPos;" \n - " _sightVect = [_sightVect,_sightCoeff] call BIS_fnc_vectorMultiply;" \n - " _vectDiv = _vectDiv + 1;" \n - " _canSee = true;" \n - " }; " \n - "" \n - "};" \n - "_sanityCheck = 85;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class hearing___target - { - priority = 80.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 80 && !_moving && (_shotDist > 0 && _shotDist < _hearDist) && _hearCoeff > 0 && !_inSafe"/*%FSM*/; - action=/*%FSM*/"_trgt = (_zFiredNear select 0);" \n - "_hearTrgtPos = getPosATL _trgt;" \n - "_hearVect = _zedPos vectorDiff _hearTrgtPos;" \n - "_hearVect = [_hearVect,_hearCoeff] call BIS_fnc_vectorMultiply;" \n - "_vectDiv = _vectDiv + 1;" \n - "_zombie setVariable [""zFiredNear"", nil];" \n - "_sanityCheck = 80;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class do_attack - { - priority = 60.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 60 && _sight > 0.6 && _trgtDist < _attackDist && diag_tickTime - _lastAttack > 3 && !_inSafe"/*%FSM*/; - action=/*%FSM*/"_doAttack = true;" \n - "_doScream = true;" \n - "_sanityCheck = 60;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class stuck - { - priority = 30.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 30 && _moving && _attempts > 6 && _zedSpeed < 0.4" \n - "" \n - "" \n - ""/*%FSM*/; - action=/*%FSM*/"" \n - " if (!(_moveTo isEqualTo [0,0,0])) then {" \n - "" \n - "// _moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n - " _zombie moveTo _zedPos;" \n - " _attempts = 0;" \n - " //systemChat format[""UnSticking: %1"", diag_tickTime];" \n - " };" \n - "" \n - "_sanityCheck = 30;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class final_checks___r - { - priority = 10.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/; - action=/*%FSM*/"" \n - "_sAnger =_sAnger min 100 max 0;" \n - "_sFear =_sFear min 100 max 0;" \n - "" \n - "if(_vectDiv > 0)then{" \n - "_vectTot = _smellVect vectorAdd _sightVect vectorAdd _hearVect vectorAdd _spottedVect vectorAdd _wanderVect;" \n - "_moveTo = _zedPos vectorDiff ([_vectTot,_vectDiv,false] call EPOCH_fnc_vectorDivide);" \n - "_doMoan = true;" \n - "//_moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n - "};" \n - "" \n - "" \n - "if(_zedPos distance _spottedPos < 3)then{" \n - "_spottedPos = [0,0,0];" \n - "};" \n - "" \n - "if(_zombie getVariable [""EPOCH_callGroan"",false])then{_zombie setVariable [""EPOCH_callGroan"",false];_callGroan = true; _doGroan = true;};" \n - "if(_zombie getVariable [""EPOCH_callBoom"",false])then{_zombie setVariable [""EPOCH_callBoom"",false];_callBoom = true; _doBoom = true;};" \n - "" \n - "" \n - "if(_doDebug)then{" \n - "_plyrVel = velocity player;" \n - "_plyrVelSpeed = (_plyrVel select 0) + (_plyrVel select 1);" \n - "_plyRelDir = (player getRelDir _zedPos) - 180; " \n - "hintSilent format [""ZOMBIE (%4)\nStalk: %1 / %2\nDist To Move: %3 | Plyr:%6\nSee: %5 (%20)\nAnger: %7\nFear: %8\nHit: %9\nNear: %10\nSmell: %11\nMoved(ing):%12(%17)\nAttempts: %15\nPlyr Vel: %13\nRDir: %14\nSpeed: %16\nVectors: %18\nFPS: %19"",_minStalkDist,_maxStalkDist,_moveTo distance _zombie,_debugDo, _canSee,_zombie distance _trgt,_sAnger,_sFear,_sHit,_zFiredNear,_canSmellCount,moveToCompleted _zombie, _plyrVelSpeed,_plyRelDir,_attempts,_zedSpeed,_moving,_vectDiv,diag_FPS,_sight];" \n - "[_zombie,_zedPos,wind,""Sign_Arrow_Direction_Pink_F""] call EPOCH_fncHordeMemberVelPointer;" \n - "[""target"",0.8,_moveTo]call EPOCH_fnc_DebugMarker;" \n - "[""zed"",0.8,_zedPos]call EPOCH_fnc_DebugMarker;" \n - "};" \n - "" \n - "_sHit = [objNull, 0];" \n - "_zFiredNear = [objNull, 0];" \n - "_sanityCheck = 0;" \n - "" \n - "" \n - "" \n - ""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class end - { - name = "end"; - init = /*%FSM*/"if (!isNull _zombie) then {" \n - "deleteVehicle _zombie;//Move to cleanup" \n - "};" \n - "" \n - "" \n - "" \n - "" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - }; - }; - /*%FSM*/ - /*%FSM*/ - class spin - { - name = "spin"; - init = /*%FSM*/"_t = diag_tickTime;" \n - "_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class wait - { - priority = 0.000000; - to="instinct"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"diag_tickTime - _t > 0.6;"/*%FSM*/; - action=/*%FSM*/"[_zombie,_trgt] call EPOCH_client_bitePlayer;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ____FAKE____ - { - name = "____FAKE____"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class imaginary_target - { - priority = 70.000000; - to="checking_status"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_sanityCheck > 70 && _vectDiv < 1"/*%FSM*/; - action=/*%FSM*/"_rndPos = [_zedPos, random 360, ((random 4) max 1)] call BIS_fnc_relPos;" \n - "_wanderVect = _zedPos vectorDiff _rndPos;" \n - "_vectDiv = _vectDiv + 1;" \n - "_sanityCheck = 70;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - }; - initState="brainz"; - finalStates[] = - { - "end", - }; }; -/*%FSM*/ +/*%FSM*/ \ No newline at end of file diff --git a/Sources/epoch_code/compile/EPOCH_antiWall.sqf b/Sources/epoch_code/compile/EPOCH_antiWall.sqf index b780e53d..8a7d44b0 100644 --- a/Sources/epoch_code/compile/EPOCH_antiWall.sqf +++ b/Sources/epoch_code/compile/EPOCH_antiWall.sqf @@ -12,18 +12,17 @@ Github: https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_antiWall.sqf */ -private ["_worldPos","_front","_dirTo","_front2"]; +private ["_start","_end","_dirTo"]; params ["_unit","_position","_vehicle"]; if (_unit == player) then { - _worldPos = getPosATLVisual _vehicle; - _worldPos set[2, (_worldPos select 2) + 1]; - _front = _worldPos; + _start = getPosWorld _vehicle; + // _worldPos set[2, (_worldPos select 2) + 1]; _dirTo = _vehicle getDir player; - _front2 = _vehicle getPos [(_vehicle distance player) + 1, _dirTo]; + _end = _vehicle getPos [(_vehicle distance player) + 1, _dirTo]; { if (_x isKindOf "Const_All_Walls_F") exitWith{ player moveInAny _vehicle; EPOCH_antiWallCount = EPOCH_antiWallCount + 1; }; - } forEach lineintersectsobjs[ATLToASL _front, ATLToASL _front2, player, _vehicle, true, 2]; + } forEach lineintersectsobjs[_start, AGLToASL _end, player, _vehicle, true, 2]; }; diff --git a/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf b/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf index 2c8c89e0..4479bb0f 100644 --- a/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf +++ b/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf @@ -37,7 +37,7 @@ _unit = createAgent[_unitClass, position player, [], _zRange, "FORM"]; //}; _unit call _disableAI; _unit switchMove "AmovPercMstpSnonWnonDnon_SaluteOut"; -[[_unit,player], 4, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; +[player, "AmovPercMstpSnonWnonDnon_SaluteOut", Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; _unit setmimic "dead"; _unit setface (selectRandom ["RyanZombieFace1", "RyanZombieFace2", "RyanZombieFace3", "RyanZombieFace4", "RyanZombieFace5"]); diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf index c2132dab..9f01f341 100644 --- a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf +++ b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf @@ -30,19 +30,6 @@ if !(_target isEqualTo player) then { } else { if !(isNull _unit && alive _unit) then { - _distance = 5; - _toxicChance = 0.1; - _bleedChance = 1; - _bloodpChance = 0; - _fatigueChance = 0.1; - _bleedAmount = 30; - _bloodpAmount = 2; - _soundEffect = ""; - _soundEffectGlobal = -1; - _animationEffect = ""; - _animationEffectGlobal = -1; - _canSee = false; - _ppEffect = 0; _cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _unit)); if (isClass _cfgObjectInteraction) then { @@ -64,70 +51,75 @@ if !(_target isEqualTo player) then { _animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal"); _canSee = call compile (getText (_cfgObjectInteraction >> "canSee")); _ppEffect = getNumber (_cfgObjectInteraction >> "ppEffect"); - }; - if ((_unit distance player) < _distance && _canSee) then { + if ((_unit distance player) < _distance && _canSee) then { - if (_soundEffect isEqualType []) then { - _soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]]; - playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange]; - } else { - _soundEffectIndex = EPOCH_sounds find _soundEffect; - if (_soundEffectIndex != -1) then { - _unit say3D _soundEffect; - if (_soundEffectGlobal != -1) then { - [player, _unit, _soundEffectIndex, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + _say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; + _switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; + + if (_soundEffect isEqualType []) then { + _soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]]; + playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange]; + } else { + _selectedSound = (_say3dsoundsConfig >> _soundEffect); + if (isClass _selectedSound) then { + _unit say3D _soundEffect; + if (_soundEffectGlobal isEqualTo 1) then { + [player, _unit, _soundEffect, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + }; }; }; - }; - if (_animationEffect != "") then { - _unit switchMove _animationEffect; - if (_animationEffectGlobal != -1) then { - [[_unit,player], _animationEffectGlobal, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; - }; - }; - - if (random 1 < _toxicChance) then { - EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100; - }; - if (random 1 < _bleedChance) then { - player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount); - }; - if (random 1 < _bloodpChance) then { - EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190; - if (_ppEffect == 1) then { - [] spawn{ - _ppGrain = ppEffectCreate["filmGrain", 2005]; - _ppChrom = ppEffectCreate["chromAberration", 2006]; - _ppColor = ppEffectCreate["colorCorrections", 2007]; - _ppBlur = ppEffectCreate["radialBlur", 2008]; - _ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]]; - _ppColor ppEffectCommit 5; - _ppChrom ppEffectAdjust[0.01, 0.01, true]; - _ppChrom ppEffectCommit 5; - _ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15]; - _ppBlur ppEffectCommit 5; - _ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false]; - _ppGrain ppEffectCommit 1; - _ppGrain ppEffectEnable true; - _ppChrom ppEffectEnable true; - _ppColor ppEffectEnable true; - _ppBlur ppEffectEnable true; - uiSleep 2; - _ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]]; - _ppColor ppEffectCommit 5; - _ppChrom ppEffectAdjust[0, 0, true]; - _ppChrom ppEffectCommit 5; - _ppBlur ppEffectAdjust[0, 0, 0, 0]; - _ppBlur ppEffectCommit 5; - uiSleep 5; - ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur]; + _selectedMove = (_switchMovehandlerConfig >> _animationEffect); + if (isClass _selectedMove) then { + _unit switchMove _animationEffect; + if (_animationEffectGlobal isEqualTo 1) then { + [player, _animationEffect, Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; }; }; - }; - if (random 1 < _fatigueChance) then { - player setFatigue 1; + + if (random 1 < _toxicChance) then { + EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100; + }; + if (random 1 < _bleedChance) then { + player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount); + }; + if (random 1 < _bloodpChance) then { + EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190; + // todo configize + if (_ppEffect == 1) then { + [] spawn{ + _ppGrain = ppEffectCreate["filmGrain", 2005]; + _ppChrom = ppEffectCreate["chromAberration", 2006]; + _ppColor = ppEffectCreate["colorCorrections", 2007]; + _ppBlur = ppEffectCreate["radialBlur", 2008]; + _ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]]; + _ppColor ppEffectCommit 5; + _ppChrom ppEffectAdjust[0.01, 0.01, true]; + _ppChrom ppEffectCommit 5; + _ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15]; + _ppBlur ppEffectCommit 5; + _ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false]; + _ppGrain ppEffectCommit 1; + _ppGrain ppEffectEnable true; + _ppChrom ppEffectEnable true; + _ppColor ppEffectEnable true; + _ppBlur ppEffectEnable true; + uiSleep 2; + _ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]]; + _ppColor ppEffectCommit 5; + _ppChrom ppEffectAdjust[0, 0, true]; + _ppChrom ppEffectCommit 5; + _ppBlur ppEffectAdjust[0, 0, 0, 0]; + _ppBlur ppEffectCommit 5; + uiSleep 5; + ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur]; + }; + }; + }; + if (random 1 < _fatigueChance) then { + player setFatigue 1; + }; }; }; }; diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf index a0820246..9be22c49 100644 --- a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf +++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf @@ -215,12 +215,12 @@ if (vehicle player == player) then { if (isTouchingGround player && speed player > 10) then { if ((primaryWeapon player != "") && (currentWeapon player == primaryWeapon player)) then { player switchMove "AovrPercMrunSrasWrflDf"; - [player, 1, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; + [player, "AovrPercMrunSrasWrflDf", Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; _handled = true; } else { if (currentWeapon player == "") then { player switchMove "epoch_unarmed_jump"; - [player, 2, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; + [player, "epoch_unarmed_jump", Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; _handled = true; }; }; diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf index 88c3ee4b..8ec9e4ff 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf @@ -51,7 +51,7 @@ while {player distance _sapper < 100 && alive player} do { _sounds = ["sapper_groan0","sapper_groan1","sapper_groan2"]; _sound = selectRandom _sounds; _sapper say3D _sound; - [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + [player, _sapper,_sound, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; }; uiSleep 0.5; }; diff --git a/Sources/epoch_code/init/both_init.sqf b/Sources/epoch_code/init/both_init.sqf index 4c895848..96216f9d 100644 --- a/Sources/epoch_code/init/both_init.sqf +++ b/Sources/epoch_code/init/both_init.sqf @@ -85,11 +85,10 @@ EPOCH_group_upgrade_lvl = ["CfgEpochClient", "group_upgrade_lvl", [4,"100",6,"30 // Init 3d sound handler EPOCH_sounds = []; -EPOCH_soundsDistance = []; -_say3dsounds = "isClass _x" configClasses (configFile >> "CfgSay3Dhandler"); +_say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; +_say3dsounds = "isClass _x" configClasses (_say3dsoundsConfig); { EPOCH_sounds pushBack (configName _x); - EPOCH_soundsDistance pushBack getNumber(_x >> "distance"); } forEach _say3dsounds; // disable remote sensors on server and client as all Epoch AI is local to the side controlling it. diff --git a/Sources/epoch_config/Configs/CfgObjectInteractions.hpp b/Sources/epoch_config/Configs/CfgObjectInteractions.hpp index c409d872..cb5fdf28 100644 --- a/Sources/epoch_config/Configs/CfgObjectInteractions.hpp +++ b/Sources/epoch_config/Configs/CfgObjectInteractions.hpp @@ -9,9 +9,9 @@ class CfgObjectInteractions { bleedAmount = 0; bloodpAmount = 0; soundEffect[] = {}; - soundEffectGlobal = -1; + soundEffectGlobal = 0; animationEffect[] = {}; - animationEffectGlobal = -1; + animationEffectGlobal = 0; canSee = "false"; ppEffect = 0; aliveState = 0; // 0 = alive or dead, 1 = dead, 2 = alive. @@ -227,7 +227,7 @@ class CfgObjectInteractions { soundEffect[] = {{"ryanzombies\sounds\attack1.ogg",400}, {"ryanzombies\sounds\attack2.ogg",400}, {"ryanzombies\sounds\attack3.ogg",400}, {"ryanzombies\sounds\attack4.ogg",400}, {"ryanzombies\sounds\attack5.ogg",400}}; soundEffectGlobal = 1; animationEffect[] = {"AwopPercMstpSgthWnonDnon_throw"}; - animationEffectGlobal = 3; + animationEffectGlobal = 1; canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; ppEffect = 0; interactMode = 3; diff --git a/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp b/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp new file mode 100644 index 00000000..43cbb7c4 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp @@ -0,0 +1,64 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Custom Epoch config for say3d broadcsting to nearby players. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSounds.hpp +*/ +class CfgSay3Dhandler { + class snake_bite0 { + distance = 100; + }; + class cultist_nearby { + distance = 100; + }; + class dog_bark { + distance = 750; + }; + class dog_cry { + distance = 600; + }; + class hed_cluck0 { + distance = 600; + }; + class hed_cluck1 { + distance = 600; + }; + class hed_cluck2 { + distance = 600; + }; + class cultist_talk { + distance = 30; + }; + class cultist_laugh { + distance = 30; + }; + class cloak_death { + distance = 30; + }; + class drone_alert0 { + distance = 400; + }; + class sapper_alert0 { + distance = 400; + }; + class sapper_groan0 { + distance = 400; + }; + class sapper_groan1 { + distance = 400; + }; + class sapper_groan2 { + distance = 400; + }; + class sapper_explode { + distance = 1000; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgSounds.hpp b/Sources/epoch_config/Configs/CfgSounds.hpp new file mode 100644 index 00000000..b9143977 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSounds.hpp @@ -0,0 +1,67 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + CfgSounds + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSounds.hpp +*/ +class CfgSounds +{ + class dog_bark + { + sound[] = { "@A3\Sounds_F\ambient\animals\dog1", 0.6, 1.0 }; + titles[] = {}; + }; + class dog_cry + { + sound[] = { "@A3\Sounds_F\ambient\animals\dog4", 0.6, 1.0 }; + titles[] = {}; + }; + class hed_cluck0 + { + sound[] = { "@A3\Sounds_F\ambient\animals\hen1", 0.3, 1.0 }; + titles[] = {}; + }; + class hed_cluck1 + { + sound[] = { "@A3\Sounds_F\ambient\animals\hen2", 0.3, 1.0 }; + titles[] = {}; + }; + class hed_cluck2 + { + sound[] = { "@A3\Sounds_F\ambient\animals\hen3", 0.3, 1.0 }; + titles[] = {}; + }; + class cultist_talk + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_banter1", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_death + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_death", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_laugh + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_laugh", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_nearby + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_nearby", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_taunt + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_taunt", 0.7, 1.0 }; + titles[] = {}; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp b/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp new file mode 100644 index 00000000..52137536 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp @@ -0,0 +1,28 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Custom Epoch config for say3d broadcsting to nearby players. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSounds.hpp +*/ +class CfgSwitchMovehandler { + class AovrPercMrunSrasWrflDf { + distance = 1000; + }; + class epoch_unarmed_jump { + distance = 1000; + }; + class AwopPercMstpSgthWnonDnon_throw { + distance = 1000; + }; + class AmovPercMstpSnonWnonDnon_SaluteOut { + distance = 1000; + }; +}; diff --git a/Sources/epoch_config/build.hpp b/Sources/epoch_config/build.hpp index 2d4e97e2..9ef08afd 100644 --- a/Sources/epoch_config/build.hpp +++ b/Sources/epoch_config/build.hpp @@ -1 +1 @@ -build=552; +build=553; diff --git a/Sources/epoch_config/sandbox_config.hpp b/Sources/epoch_config/sandbox_config.hpp index 7e10c420..9e7a13c0 100644 --- a/Sources/epoch_config/sandbox_config.hpp +++ b/Sources/epoch_config/sandbox_config.hpp @@ -70,8 +70,11 @@ disableRandomization[] = {"All"}; #include "Configs\CfgClientFunctions.hpp" #include "Configs\CfgObjectInteractions.hpp" #include "Configs\CfgItemInteractions.hpp" +#include "Configs\CfgSay3Dhandler.hpp" +#include "Configs\CfgSwitchMovehandler.hpp" // A3 specific configs +#include "Configs\CfgSounds.hpp" #include "Configs\CfgFunctions.hpp" #include "Configs\CfgRemoteExec.hpp" diff --git a/Sources/epoch_server/build.hpp b/Sources/epoch_server/build.hpp index 2d4e97e2..9ef08afd 100644 --- a/Sources/epoch_server/build.hpp +++ b/Sources/epoch_server/build.hpp @@ -1 +1 @@ -build=552; +build=553; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf index c09488e6..11480643 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf @@ -13,18 +13,20 @@ https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf */ private["_range", "_nearBy", "_sound"]; -params ["_player",["_target",objNull],["_soundIndex",-1], ["_token","",[""]]]; +params [["_player",objNull,[objNull]],["_target",objNull],["_sound","",[""]], ["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; -if (isNull _target) exitWith {}; +if (isNull _target) then {_target = _player}; -_sound = EPOCH_sounds param [_soundIndex,-1]; -if !(_sound isEqualTo -1) then { - _range = getNumber(configFile >> "CfgSay3Dhandler" >> _sound >> "distance"); - _nearBy = _target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]; - { - if (isPlayer _x) then { - [_target,_sound] remoteExec ['say3D',_x]; - } - }forEach (_nearBy - [_player]); //_this select 0 == the caller, play the sound already locally! +_say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; +_selectedSound = (_say3dsoundsConfig >> _sound); +if (isClass _selectedSound) then { + // get nearby players based on range + _range = getNumber(_selectedSound >> "distance"); + _nearBy = (_target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]) select {isPlayer _x}; + // send sound to everyone except caller. + _targets = _nearBy - [_player]; + if !(_targets isEqualTo []) then { + [_target, _sound] remoteExec ['say3D',_targets]; + }; }; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf index a557a017..4b54a599 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf @@ -11,40 +11,28 @@ Github: https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf + + Usage: + [_player,"moveName","token",_target] call EPOCH_server_handle_switchMove; + or + [_player,"moveName","token"] call EPOCH_server_handle_switchMove; */ private["_range", "_move", "_nearBy"]; -params ["_target","_moveCase",["_token","",[""]]]; -_player = _target; -if (_target isEqualType []) then { - _target params ["_target","_player"]; -}; +params [["_player",objNull,[objNull]],["_move","",[""]],["_token","",[""]],["_target",objNull]]; + if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; -_range = 0; -_move = ""; +if (_move isEqualTo "") exitWith {}; +if (isNull _target) then {_target = _player}; -// TODO configize -switch (_moveCase) do { - case 1: { - _range = 1000; - _move = "AovrPercMrunSrasWrflDf"; - }; - case 2: { - _range = 1000; - _move = "epoch_unarmed_jump"; - }; - case 3: { - _range = 1000; - _move = "AwopPercMstpSgthWnonDnon_throw"; - }; - case 4: { - _range = 1000; - _move = "AmovPercMstpSnonWnonDnon_SaluteOut"; +_switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; +_selectedMove = (_switchMovehandlerConfig >> _move); +if (isClass _selectedMove) then { + // get nearby players based on range + _range = getNumber(_selectedMove >> "distance"); + _nearBy = (_target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]) select {isPlayer _x}; + // send move to everyone except caller. + _targets = _nearBy - [_player]; + if !(_targets isEqualTo []) then { + [_target, _move] remoteExec ['switchMove',_targets]; }; }; - -if (_range > 0 && _move != "") then { - _nearBy = _target nearEntities [["Epoch_Male_F","Epoch_Female_F"], _range]; - { - [_target, _move] remoteExec ['switchMove',_x]; - }forEach (_nearBy - [_target]); //_target == the caller, already plays the animation locally! -}; diff --git a/Sources/epoch_server_core/build.hpp b/Sources/epoch_server_core/build.hpp index 2d4e97e2..9ef08afd 100644 --- a/Sources/epoch_server_core/build.hpp +++ b/Sources/epoch_server_core/build.hpp @@ -1 +1 @@ -build=552; +build=553; diff --git a/Sources/epoch_server_settings/build.hpp b/Sources/epoch_server_settings/build.hpp index 2d4e97e2..9ef08afd 100644 --- a/Sources/epoch_server_settings/build.hpp +++ b/Sources/epoch_server_settings/build.hpp @@ -1 +1 @@ -build=552; +build=553; diff --git a/Sources/mpmissions/epoch.Altis/treeView.txt b/Sources/mpmissions/epoch.Altis/treeView.txt index 4bbc1799..7d6b6402 100644 Binary files a/Sources/mpmissions/epoch.Altis/treeView.txt and b/Sources/mpmissions/epoch.Altis/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Australia/treeView.txt b/Sources/mpmissions/epoch.Australia/treeView.txt index 62329e15..567c52a5 100644 Binary files a/Sources/mpmissions/epoch.Australia/treeView.txt and b/Sources/mpmissions/epoch.Australia/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt b/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt index 348abbbc..2dbb6150 100644 Binary files a/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt and b/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Bornholm/treeView.txt b/Sources/mpmissions/epoch.Bornholm/treeView.txt index 09af1d6a..38f1cb99 100644 Binary files a/Sources/mpmissions/epoch.Bornholm/treeView.txt and b/Sources/mpmissions/epoch.Bornholm/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Chernarus/treeView.txt b/Sources/mpmissions/epoch.Chernarus/treeView.txt index 3dca94fa..8f450083 100644 Binary files a/Sources/mpmissions/epoch.Chernarus/treeView.txt and b/Sources/mpmissions/epoch.Chernarus/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt b/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt index 273b0bc0..2ba89c85 100644 Binary files a/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt and b/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Desert_E/treeView.txt b/Sources/mpmissions/epoch.Desert_E/treeView.txt index ffd1141b..d84ce6b0 100644 Binary files a/Sources/mpmissions/epoch.Desert_E/treeView.txt and b/Sources/mpmissions/epoch.Desert_E/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Esseker/treeView.txt b/Sources/mpmissions/epoch.Esseker/treeView.txt index 31c963a9..274e9668 100644 Binary files a/Sources/mpmissions/epoch.Esseker/treeView.txt and b/Sources/mpmissions/epoch.Esseker/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt b/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt index 79fdba2c..c2a582d8 100644 Binary files a/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt and b/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Napf/treeView.txt b/Sources/mpmissions/epoch.Napf/treeView.txt index 5d7acca8..2a0a51a4 100644 Binary files a/Sources/mpmissions/epoch.Napf/treeView.txt and b/Sources/mpmissions/epoch.Napf/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Porto/treeView.txt b/Sources/mpmissions/epoch.Porto/treeView.txt index 2da12c85..4b9fa82f 100644 Binary files a/Sources/mpmissions/epoch.Porto/treeView.txt and b/Sources/mpmissions/epoch.Porto/treeView.txt differ diff --git a/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt b/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt index 337ea479..47e2ee3f 100644 Binary files a/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt and b/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Sara/treeView.txt b/Sources/mpmissions/epoch.Sara/treeView.txt index 35ed762c..77202321 100644 Binary files a/Sources/mpmissions/epoch.Sara/treeView.txt and b/Sources/mpmissions/epoch.Sara/treeView.txt differ diff --git a/Sources/mpmissions/epoch.SaraLite/treeView.txt b/Sources/mpmissions/epoch.SaraLite/treeView.txt index 1d9da01e..f5022afd 100644 Binary files a/Sources/mpmissions/epoch.SaraLite/treeView.txt and b/Sources/mpmissions/epoch.SaraLite/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt b/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt index f73bf786..8a18259c 100644 Binary files a/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt and b/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt b/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt index b381b009..d7fcf56b 100644 Binary files a/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt and b/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Stratis/treeView.txt b/Sources/mpmissions/epoch.Stratis/treeView.txt index 3db77094..92f633db 100644 Binary files a/Sources/mpmissions/epoch.Stratis/treeView.txt and b/Sources/mpmissions/epoch.Stratis/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Takistan/treeView.txt b/Sources/mpmissions/epoch.Takistan/treeView.txt index 5e2590eb..49132889 100644 Binary files a/Sources/mpmissions/epoch.Takistan/treeView.txt and b/Sources/mpmissions/epoch.Takistan/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Tanoa/treeView.txt b/Sources/mpmissions/epoch.Tanoa/treeView.txt index 570f0613..d86a45db 100644 Binary files a/Sources/mpmissions/epoch.Tanoa/treeView.txt and b/Sources/mpmissions/epoch.Tanoa/treeView.txt differ diff --git a/Sources/mpmissions/epoch.VR/treeView.txt b/Sources/mpmissions/epoch.VR/treeView.txt index 877c3412..8892aef2 100644 Binary files a/Sources/mpmissions/epoch.VR/treeView.txt and b/Sources/mpmissions/epoch.VR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt b/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt index 0d31c49d..886c636c 100644 Binary files a/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt and b/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Zargabad/treeView.txt b/Sources/mpmissions/epoch.Zargabad/treeView.txt index 9fc772e1..b6d724f0 100644 Binary files a/Sources/mpmissions/epoch.Zargabad/treeView.txt and b/Sources/mpmissions/epoch.Zargabad/treeView.txt differ diff --git a/Sources/mpmissions/epoch.utes/treeView.txt b/Sources/mpmissions/epoch.utes/treeView.txt index acf2d353..a351f954 100644 Binary files a/Sources/mpmissions/epoch.utes/treeView.txt and b/Sources/mpmissions/epoch.utes/treeView.txt differ diff --git a/build.txt b/build.txt index 0cad145b..91f5d6d2 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -552 +553