diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server.pbo index 5a92999f..b919b7af 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 24f7eb27..3f7a8ae9 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 9cca7531..50b0215a 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 e43df9eb..6f2d9f03 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 e67f3919..91b85ba2 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 7c8c5f72..ad08908a 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 0ced131d..e01b7ad3 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 5208d21f..3e1be1b2 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 a9f28cda..e0849a5b 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 1734bab9..15da9063 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 2d681bfc..84d910e3 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 e2971823..c3a200e8 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 a748a4c1..6840ff53 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 1812e3ea..94d7c559 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 5d4f6072..7db99e1a 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 e70a21fb..66ddfae1 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 94cd70ad..44747d49 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 50cd1a90..9518623a 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 1fe62167..85d38562 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 24fa4659..bb78ce8a 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 fc9a1be1..eb28a8ad 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.VR.pbo b/Server_Install_Pack/mpmissions/epoch.VR.pbo index b9f48227..9f194031 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 747e3485..d608af66 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 2394dc0d..f3a70939 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 4efac0c8..bd96e6e2 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.utes.pbo and b/Server_Install_Pack/mpmissions/epoch.utes.pbo differ diff --git a/Server_Install_Pack/sc/BattlEye/createvehicle.txt b/Server_Install_Pack/sc/BattlEye/createvehicle.txt index 02ba1834..a72a04d2 100644 --- a/Server_Install_Pack/sc/BattlEye/createvehicle.txt +++ b/Server_Install_Pack/sc/BattlEye/createvehicle.txt @@ -1,3 +1,3 @@ -5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|SapperB|Cloak)_F" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" +5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|SapperB|Cloak)_F" !="EPOCH_RyanZombie_[1-5]" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" 5 "_EPOCH" !="(SapperHead|Jack|SolarGen)_SIM_EPOCH" !="Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower)_EPOCH" !="(Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH" !="(Tipi|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen|Jack|Freezer|Tarp|CinderWallHalf|Bobber)_EPOCH" !="I_(Soldier[1-3]|Soldier)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH" !="(Hesco3|Metal)(_Ghost|_SIM|)_EPOCH" !="(Spike|Metal)_TRAP_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH" 5 SeaGull diff --git a/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt b/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt index 04d1965c..329c633d 100644 --- a/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt +++ b/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt @@ -1 +1 @@ -5 "" !="[0-9]:[0-9]{1,4}" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$" +5 "" !="[0-9]:[0-9]{1,4}" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" EPOCH_RyanZombie_[1-5]$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$" diff --git a/Server_Install_Pack/sc/BattlEye/scripts.txt b/Server_Install_Pack/sc/BattlEye/scripts.txt index d818f8e9..2fbc063f 100644 --- a/Server_Install_Pack/sc/BattlEye/scripts.txt +++ b/Server_Install_Pack/sc/BattlEye/scripts.txt @@ -14,7 +14,7 @@ 7 attachTo !="EP_light attachTo [player];" !="_bomb attachTo [_unit, [0,0,0],\"Pelvis\"];" !="_dogHolder attachTo [_dog, [-0.2,1.2,0.7]];" !="EPOCH_target attachTo[player];" !="_sapperSmoke attachTo [_sapper,[0,0,-0.4]];"" !="_cage attachTo [_cage2,[0,1.3,0]];" 7 enableCollisionWith 7 hideObject !="_dogHolder hideobject true;" !="_dogHolder hideobject false;" !="player hideobject true;" !="_ship hideobject true;\n_ship hideobjectglobal true;" -7 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-1];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" +7 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-1];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" !="_this select 0 setvelocity (_this select 1)" 7 assignAs !="assignAsCargo" !="_unit assignAsGunner _axeCopter;" !="_driver assignAsDriver _axeCopter;" !="axeVIP assignAsDriver vehicle axeVIP;" 7 assignAsCargo !="_x assignAsCargo axeGeneralsBoat;" !="axeVIP assignAsCargo vehicle player;" !="axeVIP assignAsCargo vehicle axeVIP;" 7 allowDamage !="_unit allowDamage false;" !="_unit allowDamage true;" !="player allowDamage true;" !="vehicle player allowDamage true;" !="player allowDamage false;" !="_target allowDamage true;" !="_cargo allowDamage false;" diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf index d81cd04b..3c40a128 100644 --- a/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf +++ b/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf @@ -24,7 +24,8 @@ if(random 100 < 6)then{ if(_doVariable)then{_unitClass call EPOCH_unitSpawnIncrease;};//Assumes Antagonist is required. _index = EPOCH_spawnIndex find _unitClass; -if (!_doVariable && (count(_trgt nearEntities[_unitClass, 800]) >= (EPOCH_playerSpawnArray select _index))) exitWith{}; +_spawnLimit = EPOCH_playerSpawnArray select _index; +if (!_doVariable && (count(_trgt nearEntities[_unitClass, 800]) >= _spawnLimit)) exitWith{}; _nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F"]] call EPOCH_fnc_returnConfigEntryV2; _nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F","GreatWhite_F"]] call EPOCH_fnc_returnConfigEntryV2; @@ -113,13 +114,31 @@ switch _unitClass do { case "B_Heli_Transport_01_F": { [] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"; }; + case "EPOCH_RyanZombie_1": { + _hordeTypes = ["EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5"]; + _unitClass = selectRandom _hordeTypes; + + diag_log format["DEBUG: spawned %1",_unitClass]; + _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _unit call _disableAI; + + // climb out of ground + _unit switchMove "AmovPercMstpSnonWnonDnon_SaluteOut"; + _unit setmimic "dead"; + + // load temp brains + [_unit,true] execFSM "\x\addons\a3_epoch_code\System\Zombie_Brain.fsm"; + + // spawn more up to limit + _id = "EPOCH_RyanZombie_1" spawn EPOCH_unitSpawn; + }; }; if(_doVariable && (!isNull _unit) && (!isNull _trgt))then{ -_trgt setVariable ["EPOCH_antagObj", _unit, true]; -if!(isNull _bomb)then{ -_trgt setVariable ["EPOCH_antagBomb", _bomb, true]; -}; + _trgt setVariable ["EPOCH_antagObj", _unit, true]; + if!(isNull _bomb)then{ + _trgt setVariable ["EPOCH_antagBomb", _bomb, true]; + }; }; if !(isNull _unit) then { // send to server diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf index a072d600..35a01526 100644 --- a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf +++ b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf @@ -13,15 +13,15 @@ https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf Example: - [cursorTarget,_index] call EPOCH_upgradeBUILD; + _dog call EPOCH_client_bitePlayer; Parameter(s): - _this: OBJECT - Player + _this: OBJECT - attacker Returns: NOTHING */ -private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal"]; +private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal","_animationEffect","_animationEffectGlobal","_cfgObjectInteraction"]; if !(isNull _this && alive _this) then { _distance = 5; @@ -29,81 +29,48 @@ if !(isNull _this && alive _this) then { _bleedChance = 1; _bloodpChance = 0; _fatigueChance = 0.1; - _bleedAmount = 30; _bloodpAmount = 2; - - _soundEffect = -1; - _soundEffectGlobal = false; + _soundEffect = ""; + _soundEffectGlobal = -1; + _animationEffect = ""; + _animationEffectGlobal = -1; _canSee = false; _ppEffect = 0; - switch (typeOf _this) do { - case "Snake_random_EPOCH": { - _distance = 3; - _toxicChance = 0.2; - _bloodpChance = 1; - _fatigueChance = 0.5; - _bleedAmount = 30; - _bloodpAmount = 3; - _soundEffect = "snake_bite0"; - _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]); - _ppEffect = 0; - }; - case "Snake2_random_EPOCH": { - _distance = 3; - _toxicChance = 0.1; - _bloodpChance = 1; - _fatigueChance = 0.5; - _bleedAmount = 30; - _bloodpAmount = 3; - _soundEffect = "snake_bite0"; - _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]); - _ppEffect = 0; - }; - case "GreatWhite_F": { - _distance = 6; - _toxicChance = 0; - _bleedChance = 1; - _bloodpChance = 1; - _fatigueChance = 1; - _bleedAmount = 100; - _bloodpAmount = 3; - _canSee = true; - _ppEffect = 0; - }; - case "SmokeShellCustom": { - _distance = 6; - _toxicChance = 1; - _bleedChance = 0; - _bloodpChance = 1; - _fatigueChance = 1; - _bleedAmount = 0; - _bloodpAmount = 3; - _canSee = true; - _ppEffect = 0; - }; - case "Epoch_Cloak_F": { - _distance = 30; - _toxicChance = 0; - _bloodpChance = 0.9; - _fatigueChance = 0.5; - _bleedAmount = 66; - _bloodpAmount = 3; - _soundEffect = "cultist_nearby"; - _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]); - _ppEffect = 1; - }; + _cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _this)); + if (isClass _cfgObjectInteraction) then { + _distance = getNumber (_cfgObjectInteraction >> "distance"); + _toxicChance = getNumber (_cfgObjectInteraction >> "toxicChance"); + _bloodpChance = getNumber (_cfgObjectInteraction >> "bloodpChance"); + _fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance"); + _bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount"); + _bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount"); + _soundEffect = selectRandom (getArray (_cfgObjectInteraction >> "soundEffect")); + _soundEffectGlobal = getNumber (_cfgObjectInteraction >> "soundEffectGlobal"); + _animationEffect = selectRandom (getArray (_cfgObjectInteraction >> "animationEffect")); + _animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal"); + _canSee = call compile (getText (_cfgObjectInteraction >> "canSee")); + _ppEffect = getNumber (_cfgObjectInteraction >> "ppEffect"); }; if ((_this distance player) < _distance && _canSee) then { + _soundEffectIndex = EPOCH_sounds find _soundEffect; if (_soundEffectIndex != -1) then { _this say3D _soundEffect; - if (_soundEffectGlobal) then { + if (_soundEffectGlobal != -1) then { [player, _this, _soundEffectIndex, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; }; }; + + if (_animationEffect != "") then { + _this switchMove _animationEffect; + if (_animationEffectGlobal != -1) then { + [[_this,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; }; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf index 21a78ff7..005d69a1 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf @@ -108,10 +108,6 @@ switch true do { if (((player weaponAccessories _muzzle) select 0) != "") then{ _nuisanceLevel = _nuisanceLevel / 2; }; - // force spawn increase once player has become a Nuisance - if (EPOCH_playerNuisance >= 50 && {random EPOCH_droneRndChance < EPOCH_playerNuisance}) then{ - (selectRandom ["I_UAV_01_F","Epoch_Sapper_F"]) call EPOCH_unitSpawnIncrease; - }; // Nuisance System 0.1 (EPOCH_customVarLimits select (EPOCH_customVars find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]]; EPOCH_playerNuisance = ((EPOCH_playerNuisance + _nuisanceLevel) min _playerLimitMax) max _playerLimitMin; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf index 66ca1a48..a0b094f3 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf @@ -61,7 +61,7 @@ if (EPOCH_playerEnergy == 0) then { }; }; -_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30]; +_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F","EPOCH_RyanZombie_1"], 30]; if !(_attackers isEqualTo[]) then { (_attackers select 0) call EPOCH_client_bitePlayer; _panic = true; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf index 7a83dbc4..e238d48e 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf @@ -1,13 +1,15 @@ -if ((EPOCH_playerSpawnArray select(EPOCH_spawnIndex find "Epoch_Sapper_F")) <= 0) then{ - _sapperChance = 1 + (EPOCH_playerSoiled / 2); - if !(EPOCH_nearestLocations isEqualTo[]) then{ - _sapperChance = _sapperChance + 2; - }; - // 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper every 10 minutes - if (random _sapperRndChance < _sapperChance) then{ - "Epoch_Sapper_F" call EPOCH_unitSpawnIncrease; +_spawnChance = ((EPOCH_playerNuisance + EPOCH_playerSoiled)/2) max 1; +if (random EPOCH_droneRndChance < _spawnChance) then { + "I_UAV_01_F" call EPOCH_unitSpawnIncrease; +}; +if (EPOCH_mod_Ryanzombies_Enabled) then { + if (random EPOCH_zombieRndChance < _spawnChance) then { + "EPOCH_RyanZombie_1" call EPOCH_unitSpawnIncrease; }; }; +if (random EPOCH_sapperRndChance < _spawnChance) then { + "Epoch_Sapper_F" call EPOCH_unitSpawnIncrease; +}; _spawnUnits = []; { diff --git a/Sources/epoch_code/compile/setup/masterLoop/init.sqf b/Sources/epoch_code/compile/setup/masterLoop/init.sqf index 46aa83fb..f16b7555 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/init.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/init.sqf @@ -5,7 +5,8 @@ _panic = false; _prevEnergy = EPOCH_playerEnergy; // init config data -_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_zombieRndChance = ["CfgEpochClient", "zombieRndChance", 100] call EPOCH_fnc_returnConfigEntryV2; EPOCH_droneRndChance = ["CfgEpochClient", "droneRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; _baseHTLoss = ["CfgEpochClient", "baseHTLoss", 8] call EPOCH_fnc_returnConfigEntryV2; _energyCostNV = ["CfgEpochClient", "energyCostNV", 3] call EPOCH_fnc_returnConfigEntryV2; @@ -17,6 +18,7 @@ EPOCH_playerIsSwimming = false; // default data if mismatch if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{ + EPOCH_playerSpawnArray = []; { EPOCH_playerSpawnArray pushBack 0 } forEach EPOCH_spawnIndex; }; diff --git a/Sources/epoch_code/init/both_init.sqf b/Sources/epoch_code/init/both_init.sqf index b0e979b3..864e7f03 100644 --- a/Sources/epoch_code/init/both_init.sqf +++ b/Sources/epoch_code/init/both_init.sqf @@ -13,6 +13,13 @@ https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/init/both_init.sqf */ private ["_customVarsInit","_antagonistSpawnDefaults","_spawnLimits","_say3dsounds"]; + +// detect if Ryan's Zombies and Deamons mod is present +EPOCH_mod_Ryanzombies_Enabled = (parseNumber (getText (configFile >> "CfgPatches" >> "Ryanzombies" >> "version")) >= 4.2); +if (EPOCH_mod_Ryanzombies_Enabled) then { + diag_log "Epoch: Ryanzombies detected"; +}; + // Init Custom vars EPOCH_customVars = []; EPOCH_defaultVars = []; @@ -34,7 +41,8 @@ EPOCH_customVarsDefaults = [ ["SpawnArray",[],[]], ["Karma",0,[50000,-50000]], ["Alcohol",0,[100,0]], - ["Radiation",0,[100,0]] + ["Radiation",0,[100,0]], + ["Nuisance",0,[100,0]] ]; _customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2; { @@ -54,12 +62,21 @@ _antagonistSpawnDefaults = [ ["Epoch_SapperB_F",1], ["I_UAV_01_F",2], ["PHANTOM",1], - ["B_Heli_Transport_01_F",1] + ["B_Heli_Transport_01_F",1], + ["EPOCH_RyanZombie_1",10] ]; _spawnLimits = ["CfgEpochClient", "antagonistSpawnIndex", _antagonistSpawnDefaults] call EPOCH_fnc_returnConfigEntryV2; { - EPOCH_spawnIndex pushBack (_x select 0); - EPOCH_spawnLimits pushBack (_x select 1); + _x params ["_spawnName","_spawnLimit"]; + if (_spawnName isEqualTo "EPOCH_RyanZombie_1") then { + if (EPOCH_mod_Ryanzombies_Enabled) then { + EPOCH_spawnIndex pushBack _spawnName; + EPOCH_spawnLimits pushBack _spawnLimit; + }; + } else { + EPOCH_spawnIndex pushBack _spawnName; + EPOCH_spawnLimits pushBack _spawnLimit; + }; } forEach _spawnLimits; //GroupSize (number) // Price (String) diff --git a/Sources/epoch_code/init/client_init.sqf b/Sources/epoch_code/init/client_init.sqf index 534f3ab5..cd02021b 100644 --- a/Sources/epoch_code/init/client_init.sqf +++ b/Sources/epoch_code/init/client_init.sqf @@ -65,6 +65,8 @@ EPOCH_AirDropChance = getNumber(getMissionConfig "CfgEpochAirDrop" >> "AirDropCh if(EPOCH_AirDropChance < 0)then{EPOCH_AirDropChance = 101;EPOCH_AirDropCheck = 99999;}; EPOCH_droneRndChance = 100; +EPOCH_sapperRndChance = 100; +EPOCH_zombieRndChance = 100; // Custom Keys EPOCH_keysActionPressed = false; //prevents EH spam diff --git a/Sources/epoch_config/Configs/CfgEpochClient.hpp b/Sources/epoch_config/Configs/CfgEpochClient.hpp index 2a8031b3..06bd93b2 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient.hpp @@ -31,7 +31,8 @@ class CfgEpochClient {"Epoch_SapperB_F",1}, {"I_UAV_01_F",2}, {"PHANTOM",1}, - {"B_Heli_Transport_01_F",1} + {"B_Heli_Transport_01_F",1}, + {"EPOCH_RyanZombie_1",10} }; customVarsDefaults[] = { // EPOCH_player + varName, default value, {max,min} diff --git a/Sources/epoch_config/Configs/CfgObjectInteractions.hpp b/Sources/epoch_config/Configs/CfgObjectInteractions.hpp index 0ad3595a..9e029f49 100644 --- a/Sources/epoch_config/Configs/CfgObjectInteractions.hpp +++ b/Sources/epoch_config/Configs/CfgObjectInteractions.hpp @@ -16,4 +16,78 @@ class CfgObjectInteractions { class C_man_1 : Default { interactMode = 2; }; + + class Snake_random_EPOCH : Default { + distance = 3; + toxicChance = 0.2; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"snake_bite0"}; + canSee = "!(lineIntersects[eyePos _this, aimPos player, _this, player])"; + ppEffect = 0; + }; + class Snake2_random_EPOCH : Default { + distance = 3; + toxicChance = 0.1; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"snake_bite0"}; + canSee = "!(lineIntersects[eyePos _this, aimPos player, _this, player])"; + ppEffect = 0; + }; + class GreatWhite_F : Default { + distance = 6; + toxicChance = 0; + bleedChance = 1; + bloodpChance = 1; + fatigueChance = 1; + bleedAmount = 100; + bloodpAmount = 3; + canSee = "true"; + ppEffect = 0; + }; + class SmokeShellCustom : Default { + distance = 6; + toxicChance = 1; + bleedChance = 0; + bloodpChance = 1; + fatigueChance = 1; + bleedAmount = 0; + bloodpAmount = 3; + canSee = "true"; + ppEffect = 0; + }; + class Epoch_Cloak_F : Default { + distance = 30; + toxicChance = 0; + bloodpChance = 0.9; + fatigueChance = 0.5; + bleedAmount = 66; + bloodpAmount = 3; + soundEffect[] = {"cultist_nearby"}; + canSee = "!(lineIntersects[eyePos _this, aimPos player, _this, player])"; + ppEffect = 1; + }; + class EPOCH_RyanZombie_1 : Default { + distance = 3; + toxicChance = 0.2; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"ryanzombiesattack1", "ryanzombiesattack2", "ryanzombiesattack3", "ryanzombiesattack4", "ryanzombiesattack5"}; + soundEffectGlobal = 1; + animationEffect[] = {"AwopPercMstpSgthWnonDnon_throw"}; + animationEffectGlobal = 3; + canSee = "!(lineIntersects[eyePos _this, aimPos player, _this, player])"; + ppEffect = 0; + }; + class EPOCH_RyanZombie_2 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5 : EPOCH_RyanZombie_1 {}; }; diff --git a/Sources/epoch_config/build.hpp b/Sources/epoch_config/build.hpp index 11031b84..5303ea75 100644 --- a/Sources/epoch_config/build.hpp +++ b/Sources/epoch_config/build.hpp @@ -1 +1 @@ -build=465; +build=473; diff --git a/Sources/epoch_server/build.hpp b/Sources/epoch_server/build.hpp index 11031b84..5303ea75 100644 --- a/Sources/epoch_server/build.hpp +++ b/Sources/epoch_server/build.hpp @@ -1 +1 @@ -build=465; +build=473; 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 f107293f..e77f7fef 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 @@ -14,11 +14,15 @@ */ private["_range", "_move", "_nearBy"]; params ["_target","_moveCase",["_token","",[""]]]; -if !([_target, _token] call EPOCH_server_getPToken) exitWith{}; +_player = _target; +if (_target isEqualType []) then { + _target params ["_target","_player"]; +}; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; _range = 0; _move = ""; -// TODO configize +// TODO configize switch (_moveCase) do { case 1: { _range = 1000; @@ -28,6 +32,10 @@ switch (_moveCase) do { _range = 1000; _move = "epoch_unarmed_jump"; }; + case 3: { + _range = 400; + _move = "AwopPercMstpSgthWnonDnon_throw"; + } }; if (_range > 0 && _move != "") then { diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf index b145d6cb..8a4b11b6 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf @@ -37,5 +37,8 @@ if (!isNull _target) then { case "PHANTOM": { "PHANTOM" remoteExec ['EPOCH_unitSpawnIncrease',_target]; }; + case "EPOCH_RyanZombie_1": { + "EPOCH_RyanZombie_1" remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; }; }; diff --git a/Sources/epoch_server/init/server_init.sqf b/Sources/epoch_server/init/server_init.sqf index dc769c2e..74d4cf5a 100644 --- a/Sources/epoch_server/init/server_init.sqf +++ b/Sources/epoch_server/init/server_init.sqf @@ -54,17 +54,12 @@ if (isNil "_instanceID") exitWith{ EPOCH_modCUPWeaponsEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_WheeledVehicles_Core" >> "requiredVersion") > 0); EPOCH_modCUPVehiclesEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_Weapons_WeaponsCore" >> "requiredVersion") > 0); -EPOCH_mod_Ryanzombies_Enabled = (parseNumber (getText (configFile >> "CfgPatches" >> "Ryanzombies" >> "version")) >= 4.2); - if (EPOCH_modCUPWeaponsEnabled) then { diag_log "Epoch: CUP Weapons detected"; }; if (EPOCH_modCUPVehiclesEnabled) then { diag_log "Epoch: CUP Vehicles detected"; }; -if (EPOCH_mod_Ryanzombies_Enabled) then { - diag_log "Epoch: Ryanzombies detected"; -}; diag_log "Epoch: Init Variables"; call compile preprocessFileLineNumbers "\epoch_server\init\server_variables.sqf"; diff --git a/Sources/epoch_server_core/build.hpp b/Sources/epoch_server_core/build.hpp index 11031b84..5303ea75 100644 --- a/Sources/epoch_server_core/build.hpp +++ b/Sources/epoch_server_core/build.hpp @@ -1 +1 @@ -build=465; +build=473; diff --git a/Sources/epoch_server_settings/build.hpp b/Sources/epoch_server_settings/build.hpp index 11031b84..5303ea75 100644 --- a/Sources/epoch_server_settings/build.hpp +++ b/Sources/epoch_server_settings/build.hpp @@ -1 +1 @@ -build=465; +build=473; diff --git a/build.txt b/build.txt index 0b142214..89f929ab 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -465 +473