diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server.pbo index 96073ce9..5a92999f 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 c21319a3..24f7eb27 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 df69385b..9cca7531 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 42a70689..e43df9eb 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 ba061bf1..e67f3919 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 b738dc65..7c8c5f72 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 65fe3c6f..0ced131d 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 5e4ac469..5208d21f 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 ff9b3e99..a9f28cda 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 f4809d98..1734bab9 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 c0ffafc3..2d681bfc 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 d5669bee..e2971823 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 a27776dd..a748a4c1 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 5c6c9757..1812e3ea 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 1cf0737c..5d4f6072 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 7357ae9d..e70a21fb 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 f2257130..94cd70ad 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 06e7bf49..50cd1a90 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 cbbd6ead..1fe62167 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 49c73c56..24fa4659 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 1804aced..fc9a1be1 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 188204bc..b9f48227 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 162ba10c..747e3485 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 605eaff8..2394dc0d 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 8355d4bf..4efac0c8 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/compile/building/EPOCH_changeWallState.sqf b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf index 678e4100..976fbd6e 100644 --- a/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf @@ -1,149 +1,123 @@ /* - Author: Aaron Clark - EpochMod.com +Author: Aaron Clark - EpochMod.com - Contributors: +Contributors: - Description: - Epoch Change wall state +Description: +Epoch Change wall state - Licence: - Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike +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/master/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf +Github: +https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf - Example: - [_this,"NWall",1] call EPOCH_changeWallState; +Example: +[_this,"NWall",1] call EPOCH_changeWallState; - Parameter(s): - _this select 0: OBJECT - Base building object - _this select 1: STRING - Name of animation - _this select 1: SCALAR - state - 0: true = add wall - 1: false = remove wall +Parameter(s): +_this select 0: OBJECT - Base building object +_this select 1: STRING - Name of animation +_this select 1: SCALAR - state +0: true = add wall +1: false = remove wall - Returns: - NOTHING +Returns: +NOTHING */ -private ["_recipeItem","_recipeQty","_hasRecipeItems","_msg","_recipeCount","_currentCount","_numRemoved","_items","_mags","_recipe","_craftItem","_craftQty","_config","_objClass"]; -params [ - ["_object",objNull], - ["_anim",""], - ["_state",0] +private["_recipeItem", "_recipeQty", "_hasRecipeItems", "_msg", "_recipeCount", "_currentCount", "_numRemoved", "_items", "_mags", "_recipe", "_craftItem", "_craftQty", "_config", "_objClass"]; +params[ + ["_object", objNull], + ["_anim", ""], + ["_state", 0] ]; - -if !(isNull _object) then { - - _msg = "Missing Items"; - // Get config - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - - // upgradeBuildingPart - _objClass = typeOf _object; - - // Add part - if (_state == 1) then { - _recipe = getArray(_config >> _objClass >> "upgradeBuildingPart"); - - _mags = magazines player; - - _recipeCount = 0; - _numRemoved = 0; - _hasRecipeItems = true; - - // Dry Run - { - _recipeItem = _x; - _recipeQty = 1; - if (_x isEqualType []) then { - _recipeItem = _x select 0; - _recipeQty = _x select 1; - }; - _recipeCount = _recipeCount + _recipeQty; - _currentCount = { _x == _recipeItem } count _mags; - if (_currentCount < _recipeQty) exitWith { - _hasRecipeItems = false; - _msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName,_recipeCount ,_currentCount]; - }; - }forEach _recipe; - - // remove item - if (_hasRecipeItems) then { - { - _recipeItem = _x; - _recipeQty = 1; - if (_x isEqualType []) then { - _recipeItem = _x select 0; - _recipeQty = _x select 1; - }; - if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then { - _items = items player; - _currentCount = { _x == _recipeItem } count _items; - if (_currentCount >= _recipeQty) then { - for "_i" from 1 to _recipeQty do { - if (_recipeItem in _items) then { - player removeItem _recipeItem; - _numRemoved = _numRemoved + 1; - }; - }; - }; - - } else { - - _mags = magazines player; - _currentCount = { _x == _recipeItem } count _mags; - if (_currentCount >= _recipeQty) then { - for "_i" from 1 to _recipeQty do { - if (_recipeItem in _mags) then { - player removeMagazine _recipeItem; - _numRemoved = _numRemoved + 1; - }; - }; - }; - }; - - }forEach _recipe; - }; - - if (_numRemoved == _recipeCount) then { - _object animate [_anim, _state, true]; - - // push interacted object to queue to save later - EPOCH_arr_interactedObjs pushBackUnique _object; - - [format["%1 part on %2","Added",_objClass call EPOCH_itemDisplayName],5] call Epoch_dynamicText; - - [format["%1 part on %2","Added",_objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText; - - } else { - [format["%1", _msg], 5] call Epoch_dynamicText; - }; - - - - } else { - - // Remove part - _recipe = getArray(_config >> _objClass >> "removeBuildingPart"); - - _object animate [_anim, _state, true]; - - // push interacted object to save queue to save later - EPOCH_arr_interactedObjs pushBackUnique _object; - - { - _craftItem = _x; - _craftQty = 1; - if (_x isEqualType []) then { - _craftItem = _x select 0; - _craftQty = _x select 1; - }; - for "_i" from 1 to _craftQty do { - _craftItem call EPOCH_fnc_addItemOverflow; - }; - }forEach _recipe; - - [format["%1 part on %2","Removed",_objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText; - }; - +if !(isNull _object) then{ + _msg = "Missing Items"; + // Get config + _config = 'CfgBaseBuilding' call EPOCH_returnConfig; + // upgradeBuildingPart + _objClass = typeOf _object; + // Add part + if (_state == 1) then{ + _recipe = getArray(_config >> _objClass >> "upgradeBuildingPart"); + _mags = magazines player; + _recipeCount = 0; + _numRemoved = 0; + _hasRecipeItems = true; + // Dry Run + { + _recipeItem = _x; + _recipeQty = 1; + if (_x isEqualType[]) then{ + _recipeItem = _x select 0; + _recipeQty = _x select 1; + }; + _recipeCount = _recipeCount + _recipeQty; + _currentCount = { _x == _recipeItem } count _mags; + if (_currentCount < _recipeQty) exitWith{ + _hasRecipeItems = false; + _msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName, _recipeCount, _currentCount]; + }; + }forEach _recipe; + // remove item + if (_hasRecipeItems) then{ + { + _recipeItem = _x; + _recipeQty = 1; + if (_x isEqualType[]) then{ + _recipeItem = _x select 0; + _recipeQty = _x select 1; + }; + if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then{ + _items = items player; + _currentCount = { _x == _recipeItem } count _items; + if (_currentCount >= _recipeQty) then{ + for "_i" from 1 to _recipeQty do { + if (_recipeItem in _items) then{ + player removeItem _recipeItem; + _numRemoved = _numRemoved + 1; + }; + }; + }; + } else { + _mags = magazines player; + _currentCount = { _x == _recipeItem } count _mags; + if (_currentCount >= _recipeQty) then{ + for "_i" from 1 to _recipeQty do { + if (_recipeItem in _mags) then{ + player removeMagazine _recipeItem; + _numRemoved = _numRemoved + 1; + }; + }; + }; + }; + }forEach _recipe; + }; + if (_numRemoved == _recipeCount) then{ + _object animate[_anim, _state, true]; + // push interacted object to queue to save later + EPOCH_arr_interactedObjs pushBackUnique _object; + [format["%1 part on %2", "Added", _objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText; + } else { + [format["%1", _msg], 5] call Epoch_dynamicText; + }; + } else { + // Remove part + _recipe = getArray(_config >> _objClass >> "removeBuildingPart"); + _object animate[_anim, _state, true]; + // push interacted object to save queue to save later + EPOCH_arr_interactedObjs pushBackUnique _object; + { + _craftItem = _x; + _craftQty = 1; + if (_x isEqualType[]) then{ + _craftItem = _x select 0; + _craftQty = _x select 1; + }; + for "_i" from 1 to _craftQty do { + _craftItem call EPOCH_fnc_addItemOverflow; + }; + }forEach _recipe; + [format["%1 part on %2", "Removed", _objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText; + }; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf index 13da89b9..bb100be3 100644 --- a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf @@ -174,10 +174,7 @@ if (isText(_simulClassConfig)) then { } forEach _snapArrayPerp; }; if (_isSnap && _distance < 5) then { - _pos2 = _snapPosition; - if (!surfaceIsWater _pos2) then { - _pos2 = ATLtoASL _pos2; - }; + _pos2 = AGLToASL _snapPosition; _vel2 = (velocity _nearestObject); _direction = getDir _nearestObject; if (_snapType == "perp") then { diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf index d5b0902c..21a78ff7 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf @@ -27,23 +27,21 @@ Returns: NOTHING */ -private ["_heal","_highestDMG","_currentHIT","_currentDMG","_newDMG","_attachments","_cursorTarget","_repaired","_gesture","_droneChance"]; +private ["_heal","_highestDMG","_currentHIT","_currentDMG","_newDMG","_attachments","_cursorTarget","_repaired","_gesture","_nuisanceLevel"]; params ["_unit","_weapon","_muzzle","_mode","_ammo","_magazine","_projectile"]; +EPOCH_lastFiredLocation = getPosATL player; switch true do { case (_ammo isKindOf "B_EnergyPack"): { if (!isNull cursorTarget) then { _cursorTarget = cursorTarget; _repaired = false; if ((player distance _cursorTarget) <= 6) then { - _attachments = handgunItems player; _heal = false; - if (_cursorTarget isKindOf "Man") then { if ("Heal_EPOCH" in _attachments) then { _heal = true; }; - if ("Defib_EPOCH" in _attachments) then { if (!alive _cursorTarget) then { [_cursorTarget,player,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2]; @@ -65,11 +63,8 @@ switch true do { _currentHIT = _forEachIndex; }; }forEach((getAllHitPointsDamage _cursorTarget) param[2,[]]); - if (_highestDMG > 0) then { - _newDMG = ((_highestDMG - 0.5) max 0); - if (local _cursorTarget) then { [_cursorTarget,[_currentHIT,_newDMG]] call EPOCH_client_repairVehicle; } else { @@ -84,13 +79,11 @@ switch true do { }; }; }; - case (_ammo isKindOf "B_Hatchet"): { _gesture = selectRandom ["GestureSwing0", "GestureSwing1", "GestureSwing2"]; player playActionNow _gesture; call EPOCH_chopWood; }; - case (_ammo isKindOf "B_Swing" || _ammo isKindOf "B_Stick") : { player playActionNow "SledgeSwing"; call EPOCH_mineRocks; @@ -101,23 +94,26 @@ switch true do { call EPOCH_fish; }; }; - case (_ammo isKindOf "ChainSaw_Bullet"): { call EPOCH_chopWood; }; - default { - _droneChance = 2; - if !(EPOCH_nearestLocations isEqualTo[]) then{ - _droneChance = _droneChance * 2; + _ammoConfig = (configFile >> "CfgAmmo" >> _ammo); + _nuisanceLevel = ceil(getNumber (_ammoConfig >> "audibleFire") * getNumber (_ammoConfig >> "caliber")); + // reduce when not in a city or town + if (EPOCH_nearestLocations isEqualTo[]) then{ + _nuisanceLevel = _nuisanceLevel / 2; }; - // reduce chance to spawn by 50% if weapon has silencer + // reduce if using a silencer if (((player weaponAccessories _muzzle) select 0) != "") then{ - _droneChance = _droneChance / 2; + _nuisanceLevel = _nuisanceLevel / 2; }; - // 2% chance (+ 4% chance if in city) to spawn drone if shot fired (1% - 2% Half if using silencer) - if (random EPOCH_droneRndChance < _droneChance) then{ - "I_UAV_01_F" call EPOCH_unitSpawnIncrease; + // 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 cfd491bd..66ca1a48 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf @@ -20,7 +20,7 @@ if (damage player != _damagePlayer) then { _energyValue = EPOCH_chargeRate min _energyRegenMax; _vehicle = vehicle player; if (_vehicle != player && isEngineOn _vehicle) then { - _energyValue = _energyValue + 5; + _energyValue = _energyValue + 5; }; if (currentVisionMode player == 1) then { //NV enabled @@ -45,7 +45,6 @@ if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then { _display3 = uiNamespace getVariable "EPOCH_EpochGameUI3"; _energyDiff = round(EPOCH_playerEnergy - _prevEnergy); _diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]}; - // hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy]; (_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText]; _prevEnergy = EPOCH_playerEnergy; }; @@ -67,7 +66,6 @@ if !(_attackers isEqualTo[]) then { (_attackers select 0) call EPOCH_client_bitePlayer; _panic = true; } else { - // custom poision _toxicObjs = player nearobjects["SmokeShellCustom", 6]; if!(_toxicObjs IsEqualTo[]) then { (_toxicObjs select 0) call EPOCH_client_bitePlayer; @@ -95,3 +93,7 @@ EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0; call _lootBubble; EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500; + +// downtick Nuisance +(EPOCH_customVarLimits select (EPOCH_customVars find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]]; +EPOCH_playerNuisance = ((EPOCH_playerNuisance - 1) min _playerLimitMax) max _playerLimitMin; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf index b6cca8d8..450c9f5e 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf @@ -1,11 +1,4 @@ -_nearByBobbersLocal = []; -_nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12]; -{ - if (local _x) then { - _nearByBobbersLocal pushBack _x - } -} forEach _nearByBobbers; - +_nearByBobbersLocal = (player nearEntities[["Bobber_EPOCH"], 12]) select {local _x}; if !(_nearByBobbersLocal isEqualTo []) then { if ((random 100) < 50) then { _bobber = selectRandom _nearByBobbersLocal; diff --git a/Sources/epoch_code/init/client_init.sqf b/Sources/epoch_code/init/client_init.sqf index a7fca266..534f3ab5 100644 --- a/Sources/epoch_code/init/client_init.sqf +++ b/Sources/epoch_code/init/client_init.sqf @@ -54,6 +54,7 @@ EPOCH_soundLevel = 1; EPOCH_arr_interactedObjs = []; EPOCH_buildOption = 0; EPOCH_nearestLocations = []; +EPOCH_lastFiredLocation = []; ["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler; diff --git a/Sources/epoch_config/Configs/CfgEpochClient.hpp b/Sources/epoch_config/Configs/CfgEpochClient.hpp index 6624ac21..2a8031b3 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient.hpp @@ -51,7 +51,8 @@ class CfgEpochClient {"SpawnArray",{},{}}, {"Karma",0,{50000,-50000}}, {"Alcohol",0,{100,0}}, - {"Radiation",0,{100,0}} + {"Radiation",0,{100,0}}, + {"Nuisance",0,{100,0}} }; // controls max group limit and cost group_upgrade_lvl[] = {4,"100",6,"300",8,"500",10,"1000",12,"1500",13,"1750",14,"2000",15,"3000",16,"5000"}; diff --git a/Sources/epoch_config/build.hpp b/Sources/epoch_config/build.hpp index 20993ce7..11031b84 100644 --- a/Sources/epoch_config/build.hpp +++ b/Sources/epoch_config/build.hpp @@ -1 +1 @@ -build=456; +build=465; diff --git a/Sources/epoch_server/build.hpp b/Sources/epoch_server/build.hpp index 20993ce7..11031b84 100644 --- a/Sources/epoch_server/build.hpp +++ b/Sources/epoch_server/build.hpp @@ -1 +1 @@ -build=456; +build=465; diff --git a/Sources/epoch_server/init/server_init.sqf b/Sources/epoch_server/init/server_init.sqf index 91d33783..dc769c2e 100644 --- a/Sources/epoch_server/init/server_init.sqf +++ b/Sources/epoch_server/init/server_init.sqf @@ -54,6 +54,7 @@ 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"; @@ -61,6 +62,9 @@ if (EPOCH_modCUPWeaponsEnabled) then { 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 20993ce7..11031b84 100644 --- a/Sources/epoch_server_core/build.hpp +++ b/Sources/epoch_server_core/build.hpp @@ -1 +1 @@ -build=456; +build=465; diff --git a/Sources/epoch_server_settings/build.hpp b/Sources/epoch_server_settings/build.hpp index 20993ce7..11031b84 100644 --- a/Sources/epoch_server_settings/build.hpp +++ b/Sources/epoch_server_settings/build.hpp @@ -1 +1 @@ -build=456; +build=465; diff --git a/Tools/PowerShell/PBO_packaging_tool_GUI.exe b/Tools/PowerShell/PBO_packaging_tool_GUI.exe new file mode 100644 index 00000000..a951e04f Binary files /dev/null and b/Tools/PowerShell/PBO_packaging_tool_GUI.exe differ diff --git a/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 b/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 index ed7b161d..c78634b0 100644 --- a/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 +++ b/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 @@ -5,18 +5,22 @@ # # %TEMP% # -# true +# false +# F:\ARCHIVE\Downloads\logo_only_1024.ico # false +# Epoch Mod PBO Packer # false # true # true # false # true -# +# Epoch PBO Packing Tool +# Epoch PBO Packing Tool # 1.0.0.1 -# -# -# +# 1.0 +# Tool to aid in the packing of Epoch Mod source files +# By Raimonds Virtoss and Aaron Clark +# EpochMod.com # false # false # false @@ -65,7 +69,7 @@ $Label4.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.Anch $Label4.Location = New-Object System.Drawing.Point(12, 9) $Label4.Size = New-Object System.Drawing.Size(808, 18) $Label4.TabIndex = 1 -$Label4.Text = "Why do farts smell? So deaf people can enjoy them too." +$Label4.Text = "" $Label4.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter $Label4.add_Click({Label4Click($Label4)}) #~~< TabControl1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -158,11 +162,25 @@ $TabPage2.Size = New-Object System.Drawing.Size(800, 503) $TabPage2.TabIndex = 1 $TabPage2.Text = "Settings" $TabPage2.BackColor = [System.Drawing.SystemColors]::Control +#~~< Label19 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label19 = New-Object System.Windows.Forms.Label +$Label19.Location = New-Object System.Drawing.Point(7, 372) +$Label19.Size = New-Object System.Drawing.Size(145, 14) +$Label19.TabIndex = 38 +$Label19.Text = "BIPrivatekey Location:" +#~~< TextBox13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox13 = New-Object System.Windows.Forms.TextBox +$TextBox13.Location = New-Object System.Drawing.Point(139, 349) +$TextBox13.ReadOnly = $true +$TextBox13.Size = New-Object System.Drawing.Size(96, 20) +$TextBox13.TabIndex = 33 +$TextBox13.Text = "" +$TextBox13.add_TextChanged({TextBox13TextChanged($TextBox13)}) #~~< Label18 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $Label18 = New-Object System.Windows.Forms.Label -$Label18.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 14.25, [System.Drawing.FontStyle]::Bold, [System.Drawing.GraphicsUnit]::Point, ([System.Byte](0))) -$Label18.Location = New-Object System.Drawing.Point(270, 225) -$Label18.Size = New-Object System.Drawing.Size(179, 29) +$Label18.Font = New-Object System.Drawing.Font("Stencil Std", 12.0, [System.Drawing.FontStyle]::Bold, [System.Drawing.GraphicsUnit]::Point, ([System.Byte](0))) +$Label18.Location = New-Object System.Drawing.Point(6, 223) +$Label18.Size = New-Object System.Drawing.Size(235, 29) $Label18.TabIndex = 37 $Label18.Text = "Sign File Settings" $Label18.add_Click({Label18Click($Label18)}) @@ -171,8 +189,22 @@ $Label16 = New-Object System.Windows.Forms.Label $Label16.Location = New-Object System.Drawing.Point(6, 292) $Label16.Size = New-Object System.Drawing.Size(643, 14) $Label16.TabIndex = 34 -$Label16.Text = "Path to Arma 3 Tools (DSSignFile) biprivatekey:" +$Label16.Text = "Path to Arma 3 Tools (DSCreateKey):" $Label16.add_Click({Label16Click($Label16)}) +#~~< Label15 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label15 = New-Object System.Windows.Forms.Label +$Label15.Location = New-Object System.Drawing.Point(139, 332) +$Label15.Size = New-Object System.Drawing.Size(145, 14) +$Label15.TabIndex = 32 +$Label15.Text = "Sign Version:" +$Label15.add_Click({Label15Click($Label15)}) +#~~< Label13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label13 = New-Object System.Windows.Forms.Label +$Label13.Location = New-Object System.Drawing.Point(6, 386) +$Label13.Size = New-Object System.Drawing.Size(785, 15) +$Label13.TabIndex = 29 +$Label13.Text = "" +$Label13.add_Click({Label13Click($Label13)}) #~~< Label17 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $Label17 = New-Object System.Windows.Forms.Label $Label17.Location = New-Object System.Drawing.Point(6, 252) @@ -349,8 +381,12 @@ $TextBox1.Location = New-Object System.Drawing.Point(6, 21) $TextBox1.Size = New-Object System.Drawing.Size(726, 20) $TextBox1.TabIndex = 0 $TextBox1.Text = "" +$TabPage2.Controls.Add($Label19) +$TabPage2.Controls.Add($TextBox13) $TabPage2.Controls.Add($Label18) $TabPage2.Controls.Add($Label16) +$TabPage2.Controls.Add($Label15) +$TabPage2.Controls.Add($Label13) $TabPage2.Controls.Add($Label17) $TabPage2.Controls.Add($Button17) $TabPage2.Controls.Add($Label14) @@ -385,27 +421,6 @@ $TabPage3.Size = New-Object System.Drawing.Size(800, 503) $TabPage3.TabIndex = 2 $TabPage3.Text = "Developers" $TabPage3.BackColor = [System.Drawing.SystemColors]::Control -#~~< TextBox13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -$TextBox13 = New-Object System.Windows.Forms.TextBox -$TextBox13.Location = New-Object System.Drawing.Point(6, 133) -$TextBox13.Size = New-Object System.Drawing.Size(96, 20) -$TextBox13.TabIndex = 33 -$TextBox13.Text = "" -$TextBox13.add_TextChanged({TextBox13TextChanged($TextBox13)}) -#~~< Label15 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -$Label15 = New-Object System.Windows.Forms.Label -$Label15.Location = New-Object System.Drawing.Point(6, 115) -$Label15.Size = New-Object System.Drawing.Size(145, 14) -$Label15.TabIndex = 32 -$Label15.Text = "Sign Version:" -$Label15.add_Click({Label15Click($Label15)}) -#~~< Label13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -$Label13 = New-Object System.Windows.Forms.Label -$Label13.Location = New-Object System.Drawing.Point(6, 397) -$Label13.Size = New-Object System.Drawing.Size(785, 15) -$Label13.TabIndex = 29 -$Label13.Text = "" -$Label13.add_Click({Label13Click($Label13)}) #~~< Button15 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $Button15 = New-Object System.Windows.Forms.Button $Button15.Location = New-Object System.Drawing.Point(6, 240) @@ -503,9 +518,6 @@ $Button4.Size = New-Object System.Drawing.Size(54, 21) $Button4.TabIndex = 13 $Button4.Text = "Browse" $Button4.UseVisualStyleBackColor = $true -$TabPage3.Controls.Add($TextBox13) -$TabPage3.Controls.Add($Label15) -$TabPage3.Controls.Add($Label13) $TabPage3.Controls.Add($Button15) $TabPage3.Controls.Add($Button12) $TabPage3.Controls.Add($Label6) @@ -563,6 +575,8 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) #region Custom Code # Defines + + $Label4.Text = Get-Random -InputObject "Bug? That's not a bug, that's a feature.", "A bug in the code is worth two in the documentation." $ListView1.CheckBoxes = $true $FolderBrowserDialog1.ShowNewFolderButton = $false @@ -694,11 +708,34 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) $p6 = Join-Path $Textbox4.Text "\version.txt" $p7 = Join-Path $Textbox4.Text "\build.txt" $p8 = Join-Path $Textbox2.Text "\build.txt" - $p9 = Join-Path $Textbox4.Text "\version_int.txt" $Textbox6.Text = if (Test-Path $p6) { Get-Content $p6 } else { "Path not set" } $Textbox7.Text = if (Test-Path $p7) { Get-Content $p7 } else { "Path not set" } $Textbox8.Text = if (Test-Path $p8) { Get-Content $p8 } else { "Path not set" } - $Textbox13.Text = if (Test-Path $p9) { Get-Content $p9 } else { "Path not set" } + $Textbox13.Text = if (Test-Path $p6) { (Get-Content $p6) -replace '[.]','' } else { "" } + } + + function fnc_updateBuildNumber($inpath, $outpath, $increment) + { + if ($Checkbox1.Checked) + { + $path = Join-Path $inpath "\build.txt" + if (Test-Path $path) + { + $in = Get-Content $path + + $newBuild = [int]$in + $increment + $Out = @( + 'build=' + [string]$newBuild + ';' + ) + + $Out | Out-File(Join-Path $outpath "\build.hpp") -Encoding "UTF8" + $newBuild | Out-File $path -Encoding "UTF8" + if ($increment -eq 1) + { + fnc_reloadVersions + } + } + } } function fnc_updateVersions @@ -706,7 +743,6 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) $p6 = Join-Path $Textbox4.Text "\version.txt" $p7 = Join-Path $Textbox4.Text "\build.txt" $p8 = Join-Path $Textbox2.Text "\build.txt" - $p9 = Join-Path $Textbox4.Text "\version_int.txt" if (($Textbox6.Text -ne "Path not set") -and (Test-Path $p6)) { @@ -720,10 +756,6 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) { $TextBox8.Text | Out-File $p8 -Encoding "UTF8" } - if (($Textbox9.Text -ne "Path not set") -and (Test-Path $p9)) - { - $TextBox9.Text | Out-File $p9 -Encoding "UTF8" - } } function fnc_getSetPath($switch) @@ -836,22 +868,41 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) function fnc_devEnableDisable { $cbstate = $CheckBox1.Checked - + $TextBox4.Enabled = $cbstate $TextBox6.Enabled = $cbstate $TextBox7.Enabled = $cbstate $TextBox8.Enabled = $cbstate - $TextBox13.Enabled = $cbstate + $TextBox13.Enabled = $cbstate + $TextBox11.Enabled = $cbstate + $TextBoxPboPrefix.Enabled = $cbstate + $TextBoxBISignPrefix.Enabled = $cbstate $Button4.Enabled = $cbstate $Button15.Enabled = $cbstate $Button12.Enabled = $cbstate - + $Button17.Enabled = $cbstate + $ComboBox1.Enabled = $cbstate - + $ListView1.Items.Clear() fnc_populateListView } + + function fnc_outputmodcpp + { + $Output = Join-Path $TextBox1.Text $ComboBox1.SelectedItem + $Out = @( + 'dir = "@Epoch";' + 'name = "Epoch Mod ' + $Textbox6.Text + '";' + 'actionName = "Website";' + 'picture = "mod.paa";' + 'action = "http://www.epochmod.com";' + 'overview = "Open world survival mod set in the year 2035, Just two years after the mass extinction of billions of people. Those that remain are left with remnants of a once technological society. Try to survive, build, or explore your way through the harsh dynamic environment.";' + ) + + $Out | Out-File (Join-Path $Output "mod.cpp") + } function fnc_settingsSave { @@ -903,19 +954,28 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) function fnc_CreatePBO { + # - $signName = ($TextBox12.Text + $TextBox13.Text) + $signName = ($TextBoxBISignPrefix.Text + $TextBox13.Text) $signFileName = ($signName + ".biprivatekey") $signfile = Join-Path $TextBox11.Text $signFileName # make privatekey if it does not exist - if (!(Test-Path $signfile)) { + if (!(Test-Path $signfile)) + { $createKeyExecutable = Join-Path $TextBox11.Text "DSCreateKey.exe" $argz = @($signName) Start-Process -FilePath $createKeyExecutable -WorkingDirectory $TextBox11.Text -ArgumentList $argz -WindowStyle Minimized -Wait $Label4.Text = "Making Private Key... Please wait" $Label4.Refresh() } + + fnc_outputmodcpp + # increase build numbers + + $incrementClientBuild = 1 + $incrementServerBuild = 1 + $Bob = Join-Path $TextBox3.Text "\AddonBuilder.exe" $includes = "P:\includes.txt" @@ -943,33 +1003,47 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) $Output = $TextBox10.Text if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } Copy-Item -Path $x.subitems[1].Text -Destination $tmp -Recurse + + fnc_updateBuildNumber $TextBox2.Text ($x.subitems[1].Text) $incrementServerBuild + $incrementServerBuild = 0 - $argz = @($tmp, ( '"' + $Output + '"' ), "-packonly", "-clear", "-prefix=$name", "-project=$tmp", "-include=$includes") - + $argz = @($tmp, ( '"' + $Output + '"' ), "-packonly", "-clear", "-prefix=$name", "-project=P:\", "-include=$includes") + + $Label4.Text = "Building Server PBO (" + $x.subitems[0].Text + ".pbo) ... Please wait" + $Label4.Refresh() + Start-Process -FilePath $Bob -ArgumentList $argz -WindowStyle Minimized -Wait } "Client" { $name = Join-Path $TextBoxPboPrefix.Text $name - $tmp = "P:\$name" + $tmp = "P:\$name" + fnc_updateBuildNumber $TextBox4.Text ($x.subitems[1].Text) $incrementClientBuild + $incrementClientBuild = 0 + $Output = $TextBox1.Text + "\" + $ComboBox1.SelectedItem + "\Addons" if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } Copy-Item -Path $x.subitems[1].Text -Destination $tmp -Recurse $signFlag = "" if (Test-Path $signfile) { $signFlag = ('-sign="' + $signfile + '"') } - - $argz = @($tmp, ( '"' + $Output + '"' ), "-clear", "-prefix=$name", "-project=$tmp", "-include=$includes", $signFlag) + $argz = @($tmp, ( '"' + $Output + '"' ), "-clear", "-prefix=$name", "-project=P:\", "-include=$includes", $signFlag) + $Label4.Text = "Building Client PBO (" + $x.subitems[0].Text + ".pbo) ... Please wait" + $Label4.Refresh() + Start-Process -FilePath $Bob -ArgumentList $argz -WindowStyle Minimized -Wait } "Missions" { $Output = $TextBox9.Text $src = $TextBox2.Text + "\Sources\" - + + fnc_updateBuildNumber $TextBox2.Text ($src + "epoch_config") $incrementServerBuild + $incrementServerBuild = 0 + if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } Copy-Item -Path $x.subitems[1].Text -Destination $tmp -Recurse Copy-Item($src + "epoch_code") -Destination $tmp -Recurse @@ -977,7 +1051,10 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) Copy-Item($src + "description.ext") -Destination $tmp $argz = @($tmp, ( '"' + $Output + '"' ), "-clear", "-prefix=\", "-project=P:\", "-include=$includes") - + + $Label4.Text = "Building MPMission PBO (" + $x.subitems[0].Text + ".pbo) ... Please wait" + $Label4.Refresh() + Start-Process -FilePath $Bob -ArgumentList $argz -WindowStyle Minimized -Wait } } @@ -1041,12 +1118,20 @@ $Timer1 = New-Object System.Windows.Forms.Timer($components) fnc_reloadVersions - $signName = ($TextBox12.Text + $TextBox13.Text) + $signName = ($TextBoxBISignPrefix.Text + $TextBox13.Text) $signFileName = ($signName + ".biprivatekey") $signfile = Join-Path $TextBox11.Text $signFileName $signFlag = "" - if (Test-Path $signfile) { $signFlag = "-sign= '$signfile'" } - $Label13.Text = $signFlag; + if (Test-Path $signfile) { + $Label13.Text = $signfile + $signFlag = ('-sign="' + $signfile + '"') + } + else + { + $Label13.Text = "Path Not Found!" + } + + #endregion @@ -1114,8 +1199,9 @@ Main # This call must remain below all other event functions # # Script Information # -# Title: Epoch PBO Packing Tool +# Title: Epoch PBO Packing Tool - EpochMod.com # Author: Raimonds Virtoss - Raymix @ Epoch UI code +# Contributors: Aaron Clark - [VB]AWOL # Originally created: 4/24/2016 - 17:56:19 # Description: Form based (GUI) Tool to Pack or binarize Epoch PBOs. Scans your github repos and automatically creates a list of relevant folders for packaging # Usage: .EXE file will be provided when script is done, for now simply right click it and run with powershell. diff --git a/build.txt b/build.txt index c06d81c1..0b142214 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -456 +465