diff --git a/Changelogs/0.3.6.0.txt b/Changelogs/0.3.6.0.txt index c606da58..742f3668 100644 --- a/Changelogs/0.3.6.0.txt +++ b/Changelogs/0.3.6.0.txt @@ -1,13 +1,8 @@ **Client** -[Added-TBA] Previous assets re-added: - Hotwire Kit, - Key Makers Kit, - Keys in colors: (Black,Red,Green,Blue,Yellow), - 55 Gallon Fuel Barrel (Full/Empty), - Metal Pipes - Documents (Trash,Vehicle Upgrades), [Added] Added ability to sell Primary weapon from hands and empty backpacks. Thanks to @He-Man -[Changed] Increased max player load from 1000 to 2000. +[Changed] Increased max player load 2x to compensate for the new stamina system in 1.54. +[Changed] Increased backpack storage limits to allow carrying long weapons. +[Fixed] Changes to default Arma weapon configs to allow long (Lynx,etc) weapons to be stored in backpacks. [Fixed] Unable to sell after attempting to sell a temporary vehicle. Thanks to @He-Man [Fixed] Updated Hitpoints to 1.54 for all custom Epoch characters, this fixes the hitpoint .rpt errors since 1.54 as well. [Fixed] Reduce run speed of Sappers since 1.54 update. diff --git a/Changelogs/0.3.7.0.txt b/Changelogs/0.3.7.0.txt new file mode 100644 index 00000000..04f1b162 --- /dev/null +++ b/Changelogs/0.3.7.0.txt @@ -0,0 +1,7 @@ +WIP +[Added] Hotwire Kit +[Added] Key Makers Kit +[Added] Keys in colors: (Black,Red,Green,Blue,Yellow) +[Added] 55 Gallon Fuel Barrel (Full/Empty) +[Added] Metal Pipes +[Added] Documents (Trash,Vehicle Upgrades) diff --git a/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo b/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo index a6e50101..7732cef7 100644 Binary files a/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo and b/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo b/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo index f301c85e..9a828391 100644 Binary files a/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo and b/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo differ diff --git a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf index cffeecfd..d6d887dd 100644 --- a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf +++ b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf @@ -127,7 +127,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { if (_stability == 0) then { switch EPOCH_buildOption do { case 0: {EPOCH_stabilityTarget call EPOCH_removeBUILD}; - case 1: {EPOCH_stabilityTarget call EPOCH_upgradeBUILDv2}; + case 1: {EPOCH_stabilityTarget call EPOCH_upgradeBUILD}; case 2: {EPOCH_stabilityTarget call EPOCH_fnc_SelectTargetBuild}; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_returnVector.sqf b/Sources/epoch_code/compile/bis_functions/returnVector.sqf similarity index 100% rename from Sources/epoch_code/compile/building/EPOCH_returnVector.sqf rename to Sources/epoch_code/compile/bis_functions/returnVector.sqf diff --git a/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf index 461a23f3..9603f57c 100644 --- a/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf @@ -25,6 +25,7 @@ Returns: NOTHING */ +private ["_recipeItem","_recipeQty","_hasRecipeItems","_msg","_recipeCount","_currentCount","_numRemoved","_items","_mags","_dt","_recipe","_craftItem","_craftQty","_config","_objClass","_object","_anim","_state"]; _object = param [0,objNull]; _anim = param [1,""]; _state = param [2,0]; diff --git a/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf b/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf index f9b33bcf..e78f85d1 100644 --- a/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf @@ -21,6 +21,7 @@ Returns: ARRAY of BOOLs */ +private ["_dt","_out","_object","_objType","_config"]; _out = [false, false, false]; if !(isNil "EPOCH_simulSwap_Lock") exitWith{ _out }; diff --git a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf index 704a09eb..548e3952 100644 --- a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf @@ -21,7 +21,7 @@ Returns: NOTHING */ -private["_color", "_distance", "_previous"]; +private ["_posObj","_savedBuildPos","_previousBuildPos","_saveCheck","_endTime","_worldspace","_class","_newObj","_startTime","_objClass"]; if (!isNull _this) then { diff --git a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf index 61d81221..832c18ac 100644 --- a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf @@ -21,7 +21,7 @@ Returns: BOOL */ -private ["_targeter","_stability"]; +private ["_targeter","_stability","_dt","_object"]; if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false }; if !(isNull EPOCH_Target) exitWith{ false }; diff --git a/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf b/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf index 10ffdb1d..50d45edc 100644 --- a/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf @@ -4,7 +4,7 @@ Contributors: Raimonds Virtoss Description: - Epoch build select target + check if building is allowed Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike diff --git a/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf b/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf index dbaf5a88..03d23a6d 100644 --- a/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf @@ -1,4 +1,27 @@ -private["_jammed", "_jammer"]; +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building object lock check code + + 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_lockCheck.sqf + + Example: + call EPOCH_lockCheck + + Parameter(s): + NONE + + Returns: + BOOL +*/ +private ["_jammed","_jammer","_buildingJammerRange","_config"]; _config = "CfgEpochClient" call EPOCH_returnConfig; _buildingJammerRange = getNumber(_config >> "buildingJammerRange"); if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf index 54db8284..8a5c02cb 100644 --- a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf @@ -1,3 +1,27 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building maintain base code + + 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_maintainIT.sqf + + Example: + cursorTarget call EPOCH_maintainIT; + + Parameter(s): + _this: OBJECT - Base building object ("Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F") + + Returns: + NOTHING +*/ +private ["_dt","_buildingJammerRange","_maintainCount","_rnd","_config"]; if !(isNil "EPOCH_maintainLockout") exitWith {_dt = ["Already Maintaining a base.", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;}; if (EPOCH_playerCrypto > 0) then { _config = "CfgEpochClient" call EPOCH_returnConfig; diff --git a/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf b/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf index 11db357e..5679dbb8 100644 --- a/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf @@ -1,4 +1,27 @@ -private["_buildingAllowed", "_jammer", "_restricted", "_restrictedLocations", "_myPosATL"]; +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building maintain base code + + 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_removeBUILD.sqf + + Example: + cursorTarget call EPOCH_removeBUILD; + + Parameter(s): + _this: OBJECT - Base building object + + Returns: + BOOL - true if removed +*/ +private ["_buildingAllowed","_jammer","_buildingJammerRange","_buildingCountLimit","_dt","_nearestJammer","_ownedJammerExists","_return","_config","_objType","_object","_targeter","_stability","_removeParts"]; _buildingAllowed = true; _ownedJammerExists = false; _nearestJammer = objNull; @@ -33,7 +56,7 @@ if (_objType == "PlotPole_EPOCH") then { _buildingAllowed = false; _dt = ["Remove Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; }; -} +} else { _jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange]; if !(_jammer isEqualTo[]) then{ diff --git a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf index ac34a001..299a1fe7 100644 --- a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf @@ -1,8 +1,30 @@ -private [ - "_cfgClass","_class","_worldspace","_objSlot","_newObj","_playerOffset","_bbr","_p1","_p2","_maxWidth","_maxLength","_maxHeight","_pos2","_vel2","_dir2","_up2","_pos1","_vel1","_dir1","_up1","_interval","_velocityTransformation","_object","_status","_return","_oemType","_config","_currentTarget"]; +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building base building with physics + + 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_simulSwap.sqf + + Example: + [_object] spawn EPOCH_simulSwap; + + Parameter(s): + _this select 0: OBJECT - Base building object + + Returns: + NOTHING +*/ +private ["_class","_worldspace","_objSlot","_newObj","_pos2","_vel2","_dir2","_up2","_velocityTransformation","_object","_return","_oemType","_config","_currentTarget","_dt","_energyCost","_allowedSnapObjects","_textureSlot","_lastCheckTime","_rejectMove","_nearestObject","_nearestObjectRaw","_distanceNear","_previousDistanceNear","_pOffset","_snapPos","_isSnap","_snapPosition","_snapType","_snapDistance","_prevSnapDistance","_snapPointsPara","_snapPointsPerp","_snapArrayPara","_snapArrayPerp","_direction","_distance","_plyrdistance","_create","_allowedSnapPoints","_snapObjects","_onContactEH","_offset","_disallowed","_objType","_distanceMod"]; if !(isNil "EPOCH_simulSwap_Lock") exitWith{}; -_object = _this select 0; +_object = param [0,objNull]; if (isNull _object) exitWith{ EPOCH_target = objNull; }; _objType = typeOf _object; @@ -89,7 +111,7 @@ if (isText(_config)) then { if (EPOCH_Y_OFFSET < 3.6) then { EPOCH_Y_OFFSET = EPOCH_Y_OFFSET + 0.1; }; - + _pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; _distance = _pos2 distance EPOCH_target; if (EPOCH_buildMode == 1) then { @@ -174,7 +196,7 @@ if (isText(_config)) then { if (_direction < 0) then { _direction = 360 + _direction; }; - _dir2 = [vectorDir _nearestObject, _direction] call EPOCH_returnVector; + _dir2 = [vectorDir _nearestObject, _direction] call BIS_fnc_returnVector; _up2 = (vectorUp _nearestObject); EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2]; }; @@ -185,7 +207,7 @@ if (isText(_config)) then { }; if (EPOCH_space) then { _vel2 = (velocity player); - _dir2 = [vectorDir player, EPOCH_buildDirection] call EPOCH_returnVector; + _dir2 = [vectorDir player, EPOCH_buildDirection] call BIS_fnc_returnVector; _up2 = (vectorUp player); EPOCH_space = false; EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2]; diff --git a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf index 71f6bfbc..36eb2b5a 100644 --- a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf @@ -1,9 +1,38 @@ -private["_allowedSnapObjects", "_currentZoffset", "_nearestObject", "_pOffset", "_snapPos", "_snapPosition", "_snapType", "_snapDistance", "_prevSnapDistance", "_pos2", "_dir", "_snapPointsPara", "_snapPointsPerp", "_distance", "_objSlot", "_currentTarget", "_allowedSnapPoints", "_snapObjects", "_class", "_buildingPos"]; +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building base building with ghost preview. + + 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_simulSwap.sqf + + Example: + [_object] spawn EPOCH_simulSwap; + + Parameter(s): + _this select 0: OBJECT - Base building object + _this select 1: STRING - Item to consume on build finalization + + Returns: + NOTHING +*/ +private ["_allowedSnapObjects","_nearestObject","_pOffset","_snapPos","_snapPosition","_snapType","_snapDistance","_pos2","_snapPointsPara","_snapPointsPerp","_distance","_objSlot","_currentTarget","_allowedSnapPoints","_class","_dt","_energyCost","_maxHeight","_stabilityCheck","_pos2ATL","_lastCheckTime","_rejectMove","_currentOffSet","_dir2","_up2","_isSnap","_snapPos1","_pos_snapObj","_direction","_pos1_snap","_pos2_snap","_ins","_EPOCH_2","_arr_snapPoints","_pos1","_offSet","_snapConfig","_baselineSnapPos","_nearestObjects","_EPOCH_1","_numberOfContacts","_worldspace","_offsetZPos","_currentPos","_object","_item","_objType","_simulClass","_snapChecks","_maxSnapDistance"]; if !(isNil "EPOCH_simulSwap_Lock") exitWith{}; -_object = _this select 0; -_item = _this select 1; +// inputs +_object = param [0,objNull]; +_item = param [1,""]; + +// exit if object is nulll if (isNull _object) exitWith{ EPOCH_target = objNull; }; +// exit if item is not given +if (_item == "") exitWith{ EPOCH_target = objNull; }; if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["Need Energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; @@ -113,7 +142,7 @@ if (_class != "") then { }; if (EPOCH_space) then { - _dir2 = [vectorDir player, EPOCH_buildDirection] call EPOCH_returnVector; + _dir2 = [vectorDir player, EPOCH_buildDirection] call BIS_fnc_returnVector; _up2 = (vectorUp player); EPOCH_space = false; EPOCH_target setVectorDirAndUp [_dir2,_up2]; @@ -231,7 +260,7 @@ if (_class != "") then { _direction = 360 + _direction; }; - _dir2 = [vectorDir _nearestObject, _direction] call EPOCH_returnVector; + _dir2 = [vectorDir _nearestObject, _direction] call BIS_fnc_returnVector; if (_pos2 select 2 > _maxHeight) then { _pos2 set[2, _maxHeight]; diff --git a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf index feca2b01..f16773c7 100644 --- a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf @@ -1,5 +1,33 @@ -if (isNull _this) exitWith{ false }; +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Base building upgrade code + + 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_upgradeBUILD.sqf + + Example: + [cursorTarget,_index] call EPOCH_upgradeBUILD; + + Parameter(s): + _this select 0: OBJECT - Base building object + _this select 1: NUMBER - index of array from (CfgBaseBuilding >> "upgradeBuilding") + + Returns: + NOTHING +*/ +private ["_buildingJammerRange","_buildingCountLimit","_nearestJammer","_ownedJammerExists","_buildingAllowed","_dt","_missingCount","_canUpgrade","_missingParts","_part","_req","_partCheck","_canUpgradePartCount","_removedPartCount","_return","_upgrade","_upgradeParts","_config","_upgrades","_object","_index","_targeter","_stability","_jammer"]; _return = false; +_object = param [0,objNull,[objNull]]; +_index = param [1,-1,[0]]; //EPOCH_UpgradeIndex +if !(_index isEqualTo -1) then {Epoch_upgradeIndex = _index}; +if (isNull _object) exitWith {false}; _buildingAllowed = true; _ownedJammerExists = false; @@ -14,7 +42,7 @@ if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; }; EPOCH_buildOption = 1; -params ["_object"]; + // check if another player has target _targeter = _object getVariable["last_targeter", objNull]; @@ -29,10 +57,6 @@ if (_stability > 0) exitWith{ }; }; - - - - _jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange]; if !(_jammer isEqualTo[]) then { @@ -54,18 +78,22 @@ if !(_jammer isEqualTo[]) then { }; if !(_buildingAllowed)exitWith{ false }; -if (_this isKindOf "Constructions_static_F") then { +if (_object isKindOf "Constructions_static_F") then { // take upgrade item from player here _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - _upgrade = getArray(_config >> (typeOf _this) >> "upgradeBuilding"); - if !(_upgrade isEqualTo []) then { + + _upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding"); + if !(_upgrades isEqualTo []) then { + + // get selected upgrade + _upgrade = _upgrades param [Epoch_upgradeIndex,[]]; _upgradeParts = _upgrade select 1; _canUpgrade = true; _canUpgradePartCount = 0; - _missingParts = []; + _missingParts = ""; { _part = _x select 0; _req = _x select 1; @@ -78,7 +106,7 @@ if (_this isKindOf "Constructions_static_F") then { //diag_log format["DEBUG: _missingCount %1", _missingCount]; _canUpgrade = false; - _missingParts pushBack format["Missing %1 %2", _missingCount, (_part call EPOCH_itemDisplayName)]; + _missingParts = _missingParts + format["Missing %1 %2, ", _missingCount, (_part call EPOCH_itemDisplayName)]; }; _canUpgradePartCount = _canUpgradePartCount + _req; } forEach _upgradeParts; @@ -96,8 +124,9 @@ if (_this isKindOf "Constructions_static_F") then { if (_canUpgradePartCount == _removedPartCount) then { // send to server for upgrade - EPOCH_UPBUILD = [_this,player,Epoch_personalToken]; + EPOCH_UPBUILD = [_object,player,Epoch_upgradeIndex,Epoch_personalToken]; publicVariableServer "EPOCH_UPBUILD"; + Epoch_upgradeIndex = nil; _return = true; _dt = ["Upgraded", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf deleted file mode 100644 index 6d25bff6..00000000 --- a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf +++ /dev/null @@ -1,113 +0,0 @@ -_return = false; -_object = param [0,objNull,[objNull]]; -_index = param [1,-1,[0]]; //EPOCH_UpgradeIndex -if !(_index isEqualTo -1) then {Epoch_upgradeIndex = _index}; -if (isNull _object) exitWith {false}; - -_buildingAllowed = true; -_ownedJammerExists = false; -_nearestJammer = objNull; -_config = 'CfgEpochClient' call EPOCH_returnConfig; -_buildingJammerRange = getNumber(_config >> "buildingJammerRange"); -_buildingCountLimit = getNumber(_config >> "buildingCountLimit"); - -// defaults -if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; -if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; }; - -EPOCH_buildOption = 1; - - - -// check if another player has target -_targeter = _object getVariable["last_targeter", objNull]; - -if (!isNull _targeter && _targeter != player && (player distance _object > _targeter distance _object)) exitWith{ EPOCH_stabilityTarget = objNull; false }; - -_stability = _object getVariable["stability", 100]; -if (_stability > 0) exitWith{ - if (isNull EPOCH_stabilityTarget) then { - _object setVariable["last_targeter", player, true]; - EPOCH_stabilityTarget = _object; - }; -}; - -_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange]; - -if !(_jammer isEqualTo[]) then { - { - if (alive _x) exitWith{ - _nearestJammer = _x; - }; - } foreach _jammer; - - if !(isNull _nearestJammer) then { - if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then { - _ownedJammerExists = true; - } - else { - _buildingAllowed = false; - _dt = ["Upgrade Disallowed: Frequency Blocked", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; - }; - }; -}; -if !(_buildingAllowed)exitWith{ false }; - -if (_object isKindOf "Constructions_static_F") then { - - // take upgrade item from player here - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - - _upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding"); - if !(_upgrades isEqualTo []) then { - - // get selected upgrade - _upgrade = _upgrades param [Epoch_upgradeIndex,[]]; - - _upgradeParts = _upgrade select 1; - - _canUpgrade = true; - _canUpgradePartCount = 0; - _missingParts = ""; - { - _part = _x select 0; - _req = _x select 1; - _partCheck = {_x == _part} count (magazines player); - //diag_log format["DEBUG: _partCheck %1", _partCheck]; - //diag_log format["DEBUG: _x %1", _x]; - if (_partCheck < _req) then { - _missingCount = _req - _partCheck; - - //diag_log format["DEBUG: _missingCount %1", _missingCount]; - - _canUpgrade = false; - _missingParts = _missingParts + format["Missing %1 %2, ", _missingCount, (_part call EPOCH_itemDisplayName)]; - }; - _canUpgradePartCount = _canUpgradePartCount + _req; - } forEach _upgradeParts; - - _removedPartCount = 0; - if (_canUpgrade) then { - { - for "_i" from 1 to (_x select 1) do { - if ((_x select 0) in (magazines player)) then { - player removeMagazine (_x select 0); - _removedPartCount = _removedPartCount + 1; - }; - }; - } forEach _upgradeParts; - - if (_canUpgradePartCount == _removedPartCount) then { - // send to server for upgrade - EPOCH_UPBUILD = [_object,player,Epoch_upgradeIndex,Epoch_personalToken]; - publicVariableServer "EPOCH_UPBUILD"; - Epoch_upgradeIndex = nil; - _return = true; - _dt = ["Upgraded", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; - }; - } else { - _dt = [format["%1", _missingParts], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; - }; - }; -}; -_return diff --git a/Sources/epoch_code/compile/building/test.sqf b/Sources/epoch_code/compile/building/test.sqf deleted file mode 100644 index ed986674..00000000 --- a/Sources/epoch_code/compile/building/test.sqf +++ /dev/null @@ -1,180 +0,0 @@ -EPOCH_buildClasses = ["Land_Obstacle_Bridge_F", - -"Land_Shoot_House_Wall_F", -"Land_Shoot_House_Wall_Stand_F", -"Land_Shoot_House_Wall_Crouch_F", -"Land_Shoot_House_Wall_Prone_F", -"Land_Shoot_House_Wall_Long_F", -"Land_Shoot_House_Wall_Long_Stand_F", -"Land_Shoot_House_Wall_Long_Crouch_F", -"Land_Shoot_House_Wall_Long_Prone_F", -"Land_Shoot_House_Corner_F", -"Land_Shoot_House_Corner_Stand_F", -"Land_Shoot_House_Corner_Crouch_F", -"Land_Shoot_House_Corner_Prone_F", -"Land_Shoot_House_Panels_F", -"Land_Shoot_House_Panels_Crouch_F", -"Land_Shoot_House_Panels_Prone_F", -"Land_Shoot_House_Panels_Vault_F", -"Land_Shoot_House_Panels_Window_F", -"Land_Shoot_House_Panels_Windows_F", -"Land_Shoot_House_Tunnel_F", -"Land_Shoot_House_Tunnel_Stand_F", -"Land_Shoot_House_Tunnel_Crouch_F", -"Land_Shoot_House_Tunnel_Prone_F", - - -"Land_Obstacle_RunAround_F","Land_Obstacle_Saddle_F","Land_RampConcrete_F","Land_RampConcreteHigh_F","Land_GH_Stairs_F","Land_Billboard_F","Land_HBarrier_1_F","Land_HBarrier_3_F","Land_HBarrier_5_F","Land_Razorwire_F","Land_HBarrierWall6_F","WoodFloor_EPOCH","WoodLargeWall_EPOCH","Land_BagFence_Long_F","Land_BagFence_Corner_F","Land_BagFence_End_F","Land_BagFence_Round_F","Land_BagFence_Short_F"]; -EPOCH_buildClassesCount = count EPOCH_buildClasses - 1; -Epoch_selectedBuildClasIndex = 0; -EPOCH_selectedBuildClass = EPOCH_buildClasses select 0; - -EPOCH_snapExtents = []; - -EPOCH_buildWorldspace = [[0,0,0],[0,0,0],[0,0,0]]; -EPOCH_KeyDownFunctionhandler = { - _dikCode = _this select 1; - _shift = _this select 2; - _ctrl = _this select 3; - _alt = _this select 4; - - switch (_dikCode) do { - case 0x39 : { - _worldspace = EPOCH_buildWorldspace; - _newObj = EPOCH_selectedBuildClass createVehicle (_worldspace select 0); - _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2]; - _newObj setposASL (_worldspace select 0); - _handled = true; - }; - case 0xC9 : { - Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex + 1) min EPOCH_buildClassesCount) max 0; - EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex; - - if !(isNull EPOCH_currentBuildObj) then { - deleteVehicle EPOCH_currentBuildObj; - EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0]; - EPOCH_currentBuildObj disableCollisionWith player; - EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"]; - }; - - hint EPOCH_selectedBuildClass; - _handled = true; - }; - case 0xD1 : { - Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex - 1) min EPOCH_buildClassesCount) max 0; - EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex; - hint EPOCH_selectedBuildClass; - - if !(isNull EPOCH_currentBuildObj) then { - deleteVehicle EPOCH_currentBuildObj; - EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0]; - EPOCH_currentBuildObj disableCollisionWith player; - EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"]; - }; - - _handled = true; - }; - }; - _handled -}; - - -[] spawn { - (findDisplay 46) displayRemoveAllEventHandlers "KeyDown"; - (findDisplay 46) displayAddEventHandler["KeyDown",{_this call EPOCH_KeyDownFunctionhandler}]; -}; - - - - -EPOCH_snapExtents = []; -_playerPos = player modelToWorld [0,5,5]; -EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle _playerPos; -EPOCH_currentBuildObj setPosATL _playerPos; -EPOCH_currentBuildObj disableCollisionWith player; -_numberOfContacts = 0; -for "_i" from 0 to 10 do { -}; -_pos1 = EPOCH_currentBuildObj modelToWorld [0,0,10]; -_pos2 = EPOCH_currentBuildObj modelToWorld [0,0,0]; -_ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player]; -if (count _ins == 0) then { -} else { - _pos3 = (_ins select 0 select 0); - if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3}; - _offset = EPOCH_currentBuildObj worldToModelVisual _pos3; - EPOCH_snapExtents pushBack _offset; - _numberOfContacts = _numberOfContacts + 1; - - _fullHeight = _offset select 0; - _halfHeight = _fullHeight/2; - - - - _pos1 = EPOCH_currentBuildObj modelToWorld [0,10,_halfHeight]; - _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight]; - _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player]; - if (count _ins == 0) then { - } else { - _pos3 = (_ins select 0 select 0); - if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3}; - _offset = EPOCH_currentBuildObj worldToModelVisual _pos3; - EPOCH_snapExtents pushBack _offset; - _numberOfContacts = _numberOfContacts + 1; - }; - - _pos1 = EPOCH_currentBuildObj modelToWorld [0,-10,_halfHeight]; - _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight]; - _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player]; - if (count _ins == 0) then { - } else { - _pos3 = (_ins select 0 select 0); - if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3}; - _offset = EPOCH_currentBuildObj worldToModelVisual _pos3; - EPOCH_snapExtents pushBack _offset; - _numberOfContacts = _numberOfContacts + 1; - }; - - _pos1 = EPOCH_currentBuildObj modelToWorld [10,0,_halfHeight]; - _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight]; - _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player]; - if (count _ins == 0) then { - } else { - _pos3 = (_ins select 0 select 0); - if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3}; - _offset = EPOCH_currentBuildObj worldToModelVisual _pos3; - EPOCH_snapExtents pushBack _offset; - _numberOfContacts = _numberOfContacts + 1; - }; - - _pos1 = EPOCH_currentBuildObj modelToWorld [-10,0,_halfHeight]; - _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,_halfHeight]; - _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player]; - if (count _ins == 0) then { - } else { - _pos3 = (_ins select 0 select 0); - if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3}; - _offset = EPOCH_currentBuildObj worldToModelVisual _pos3; - EPOCH_snapExtents pushBack _offset; - _numberOfContacts = _numberOfContacts + 1; - }; - - - _pos1 = EPOCH_currentBuildObj modelToWorld [0,0,-4.5]; - _pos2 = EPOCH_currentBuildObj modelToWorld [0,0,0]; - _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player]; - if (count _ins == 0) then { - } else { - _pos3 = (_ins select 0 select 0); - if !(surfaceIsWater _pos3) then {_pos3 = ASLtoATL _pos3}; - _offset = EPOCH_currentBuildObj worldToModelVisual _pos3; - EPOCH_snapExtents pushBack _offset; - _numberOfContacts = _numberOfContacts + 1; - }; - -}; -onEachFrame { - { - drawIcon3D ["a3\modules_f\data\iconlock_ca.paa", [1,1,1,1], EPOCH_currentBuildObj modelToWorld _x, 1, 1, 45, "Snap", 1, 0.05, "TahomaB"]; - } forEach EPOCH_snapExtents; -}; diff --git a/Sources/epoch_code/config.cpp b/Sources/epoch_code/config.cpp index 7600a908..86e2537c 100644 --- a/Sources/epoch_code/config.cpp +++ b/Sources/epoch_code/config.cpp @@ -100,6 +100,13 @@ class cfgFunctions class initMultiplayer { file = "\x\addons\a3_epoch_code\compile\bis_functions\MP\fn_initMultiplayer.sqf"; }; + + }; + class functions { + // custom Epoch - BIS_fnc_returnVector + class returnVector { + file = "\x\addons\a3_epoch_code\compile\bis_functions\returnVector.sqf"; + }; }; }; class EPOCH @@ -112,6 +119,10 @@ class cfgFunctions class isAny { file = "\x\addons\a3_epoch_code\compile\both\EPOCH_isAny.sqf" }; + class isAny { + file = "\x\addons\a3_epoch_code\compile\both\EPOCH_isAny.sqf" + }; + }; }; }; @@ -161,9 +172,7 @@ class CfgClientFunctions class isBuildAllowed {}; class simulSwap {}; class staticMove {}; - class returnVector {}; class upgradeBUILD {}; - class upgradeBUILDv2 {}; class removeBUILD {}; class changeWallState {}; class checkBuild {}; diff --git a/Sources/epoch_code/gui/Epoch_GUI_Config.hpp b/Sources/epoch_code/gui/Epoch_GUI_Config.hpp index 86662ba6..80721945 100644 --- a/Sources/epoch_code/gui/Epoch_GUI_Config.hpp +++ b/Sources/epoch_code/gui/Epoch_GUI_Config.hpp @@ -164,7 +164,7 @@ class QuickUpgrade y = 0.622266 * safezoneH + safezoneY; w = 0.05875 * safezoneW; h = 0.0282151 * safezoneH; - action = "cursorTarget call EPOCH_upgradeBUILDv2"; + action = "cursorTarget call EPOCH_upgradeBUILD"; }; }; @@ -2582,39 +2582,47 @@ class RscDisplayInventory idc = 1243; x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class BackgroundSlotPrimaryUnderBarrel : BackgroundSlotPrimary { idc = 1200; - x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "28.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class BackgroundSlotPrimaryFlashlight : BackgroundSlotPrimary { idc = 1244; - x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "30.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class BackgroundSlotPrimaryOptics : BackgroundSlotPrimary { idc = 1245; - x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "32.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + class BackgroundSlotPrimaryMagazineGL: BackgroundSlotPrimary + { + idc = 1267; + x = "34.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class BackgroundSlotPrimaryMagazine : BackgroundSlotPrimary { idc = 1246; - x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "36.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; }; class BackgroundSlotSecondary : BackgroundSlotPrimary @@ -2896,43 +2904,52 @@ class RscDisplayInventory idc = 620; x = "26.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = { 0, 0, 0, 0.5 }; }; class SlotPrimaryUnderBarrel : SlotPrimary { idc = 641; - x = "29 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "28.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = { 0, 0, 0, 0.5 }; }; class SlotPrimaryFlashlight : SlotPrimary { idc = 622; - x = "31.4 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "30.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = { 0, 0, 0, 0.5 }; }; class SlotPrimaryOptics : SlotPrimary { idc = 621; - x = "33.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "32.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = { 0, 0, 0, 0.5 }; }; + class SlotPrimaryMagazineGL: SlotPrimary + { + idc = 644; + x = "34.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + colorText[] = {0,0,0,0.5}; + }; class SlotPrimaryMagazine : SlotPrimary { idc = 623; - x = "36.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; + x = "36.6 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "9.1 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; - w = "2.3 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; + w = "1.9 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; h = "2 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; colorText[] = { 0, 0, 0, 0.5 }; }; @@ -3393,6 +3410,9 @@ class RscDisplayInventory }; }; }; + + + class RscDisplayInterrupt: RscStandardDisplay //convert to preprocessFileNumbers { onLoad = "[""onLoad"",_this,""RscDisplayInterrupt"",'GUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay'); _this call EPOCH_InterruptConfig;"; diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf index 295499b2..7e556030 100644 --- a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf @@ -66,7 +66,7 @@ _checkConfigs = { } forEach (_x select 1); _tooltip = format ["%1 >> %2 ",_dName,_tTip]; - _action = format ["[dyna_cursorTarget,%1] call EPOCH_upgradeBUILDv2; true call Epoch_dynamicMenuCleanup;",_forEachIndex]; + _action = format ["[dyna_cursorTarget,%1] call EPOCH_upgradeBUILD; true call Epoch_dynamicMenuCleanup;",_forEachIndex]; _buttonSettings pushBack [ _icon, diff --git a/Sources/epoch_config/Configs/CfgPricing.hpp b/Sources/epoch_config/Configs/CfgPricing.hpp index 4c548af5..5f46e69d 100644 --- a/Sources/epoch_config/Configs/CfgPricing.hpp +++ b/Sources/epoch_config/Configs/CfgPricing.hpp @@ -421,7 +421,7 @@ class CfgPricing class SLAMDirectionalMine_Wire_Mag {price = 40;}; class APERSTripMine_Wire_Mag {price = 30;}; - + // Backpacks class B_AssaultPack_cbr {price = 10;}; class B_AssaultPack_dgtl {price = 10;}; class B_AssaultPack_khk {price = 10;}; @@ -430,32 +430,32 @@ class CfgPricing class B_AssaultPack_rgr {price = 10;}; class B_AssaultPack_sgg {price = 10;}; class B_AssaultPack_blk { price = 10; }; - class B_Carryall_cbr {price = 1;}; - class B_Carryall_khk {price = 10;}; - class B_Carryall_mcamo {price = 10;}; - class B_Carryall_ocamo {price = 10;}; - class B_Carryall_oli {price = 10;}; - class B_Carryall_oucamo {price = 10;}; - class B_FieldPack_blk {price = 10;}; - class B_FieldPack_cbr {price = 10;}; - class B_FieldPack_khk {price = 10;}; - class B_FieldPack_ocamo {price = 10;}; - class B_FieldPack_oli {price = 10;}; - class B_FieldPack_oucamo {price = 10;}; - class B_Kitbag_cbr {price = 10;}; - class B_Kitbag_mcamo {price = 10;}; - class B_Kitbag_rgr {price = 10;}; - class B_Kitbag_sgg {price = 10;}; - class B_Parachute {price = 15;}; - class B_TacticalPack_blk {price = 10;}; - class B_TacticalPack_mcamo {price = 10;}; - class B_TacticalPack_ocamo {price = 10;}; - class B_TacticalPack_oli {price = 10;}; - class B_TacticalPack_rgr {price = 10;}; - class smallbackpack_red_epoch {price = 10;}; - class smallbackpack_green_epoch {price = 10;}; - class smallbackpack_teal_epoch {price = 10;}; - class smallbackpack_pink_epoch {price = 10;}; + class B_Carryall_cbr {price = 40;}; + class B_Carryall_khk {price = 40;}; + class B_Carryall_mcamo {price = 40;}; + class B_Carryall_ocamo {price = 40;}; + class B_Carryall_oli {price = 40;}; + class B_Carryall_oucamo {price = 40;}; + class B_FieldPack_blk {price = 15;}; + class B_FieldPack_cbr {price = 15;}; + class B_FieldPack_khk {price = 15;}; + class B_FieldPack_ocamo {price = 15;}; + class B_FieldPack_oli {price = 15;}; + class B_FieldPack_oucamo {price = 15;}; + class B_Kitbag_cbr {price = 25;}; + class B_Kitbag_mcamo {price = 25;}; + class B_Kitbag_rgr {price = 25;}; + class B_Kitbag_sgg {price = 25;}; + class B_Parachute {price = 25;}; + class B_TacticalPack_blk {price = 20;}; + class B_TacticalPack_mcamo {price = 20;}; + class B_TacticalPack_ocamo {price = 20;}; + class B_TacticalPack_oli {price = 20;}; + class B_TacticalPack_rgr {price = 20;}; + class smallbackpack_red_epoch {price = 22;}; + class smallbackpack_green_epoch {price = 22;}; + class smallbackpack_teal_epoch {price = 22;}; + class smallbackpack_pink_epoch {price = 22;}; // Marksman DLC class U_O_FullGhillie_lsh { price = 7; }; diff --git a/Sources/epoch_config/Configs/CfgVehicles/Fixes.hpp b/Sources/epoch_config/Configs/CfgVehicles/Fixes.hpp index eeff60c6..9dc9c960 100644 --- a/Sources/epoch_config/Configs/CfgVehicles/Fixes.hpp +++ b/Sources/epoch_config/Configs/CfgVehicles/Fixes.hpp @@ -100,3 +100,51 @@ class Land_Communication_F : House_F killed = "if (isServer) then {this call compile preprocessFileLineNumbers ""\A3\Structures_F\Ind\Transmitter_Tower\Scripts\tower_ruins.sqf""};"; }; }; + + +/* + Increase Backpack storage limits to balance for changes since 1.54 +*/ +class Bag_Base; +class B_AssaultPack_Base: Bag_Base +{ + model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Compact"; + descriptionShort = "Load: 360, Mass: 20"; + hiddenSelectionsTextures[] = {"\A3\weapons_f\ammoboxes\bags\data\backpack_compact_khk_co.paa"}; + maximumLoad = 360; + mass = 20; +}; +class B_FieldPack_Base: Bag_Base +{ + model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Gorod"; + descriptionShort = "Load: 400, Mass: 30"; + hiddenSelectionsTextures[] = {"\A3\weapons_f\ammoboxes\bags\data\backpack_gorod_cbr_co.paa"}; + maximumLoad = 400; + mass = 30; +}; +class B_TacticalPack_Base: Bag_Base +{ + model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Small"; + descriptionShort = "Load: 480, Mass: 40"; + hiddenSelectionsTextures[] = {"\A3\weapons_f\ammoboxes\bags\data\backpack_small_co.paa"}; + maximumLoad = 480; + mass = 40; +}; +class B_Kitbag_Base: Bag_Base +{ + picture = "\A3\Weapons_F\ammoboxes\bags\data\ui\icon_B_C_Kitbag_rgr"; + descriptionShort = "Load: 520, Mass: 50"; + model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Fast"; + hiddenSelectionsTextures[] = {"\A3\weapons_f\ammoboxes\bags\data\backpack_fast_rgr_co.paa"}; + maximumLoad = 520; + mass = 50; +}; +class B_Carryall_Base: Bag_Base +{ + model = "\A3\weapons_f\Ammoboxes\bags\Backpack_Tortila"; + descriptionShort = "Load: 550, Mass: 60"; + picture = "\A3\Weapons_F\Ammoboxes\Bags\data\UI\icon_B_C_Tortila_khk.paa"; + hiddenSelectionsTextures[] = {"\A3\weapons_f\ammoboxes\bags\data\backpack_tortila_khk_co.paa"}; + maximumLoad = 550; + mass = 60; +}; diff --git a/Sources/epoch_config/Configs/CfgWeapons.hpp b/Sources/epoch_config/Configs/CfgWeapons.hpp index 555fe72b..fe384dc6 100644 --- a/Sources/epoch_config/Configs/CfgWeapons.hpp +++ b/Sources/epoch_config/Configs/CfgWeapons.hpp @@ -2206,6 +2206,14 @@ class CfgWeapons class WeaponSlotsInfo; class GunParticles; }; + class Rifle_Long_Base_F: Rifle_Base_F + { + class WeaponSlotsInfo: WeaponSlotsInfo + { + allowedSlots[] = {901}; + }; + }; + class UGL_F; class Epoch_weapon_01_Base_F: Rifle_Base_F { @@ -3080,13 +3088,7 @@ class CfgWeapons }; };*/ - class Rifle_Long_Base_F : Rifle_Base_F - { - class WeaponSlotsInfo : WeaponSlotsInfo - { - allowedSlots[] = {901}; - }; - }; + class ItemRadio; class EpochRadio0 : ItemRadio { diff --git a/Sources/epoch_config/config.cpp b/Sources/epoch_config/config.cpp index 567b0b71..6a708e7e 100644 --- a/Sources/epoch_config/config.cpp +++ b/Sources/epoch_config/config.cpp @@ -30,7 +30,7 @@ class CfgPatches units[] = { "Epoch_Female_F", "Epoch_Male_F", "Epoch_Cloak_F", "Epoch_Sapper_F", "Epoch_Ent_Small_F", "Epoch_Ent_Med_F", "Epoch_Ent_Large_F", "Land_Test_House_01_F", "Land_Test_House_01_dam_F", "Land_Test_House_01_ruins_F", "Epoch_Test", "C_Test_Car_01_F", "C_Hatchback_01_EPOCH", "C_Hatchback_02_EPOCH", "C_Offroad_01_EPOCH", "C_Quadbike_01_EPOCH", "C_SUV_01_EPOCH", "C_Rubberboat_EPOCH", "C_Rubberboat_02_EPOCH", "C_Rubberboat_03_EPOCH", "C_Rubberboat_04_EPOCH", "C_Van_01_box_EPOCH", "C_Van_01_transport_EPOCH", "C_Boat_Civil_01_EPOCH", "C_Boat_Civil_01_police_EPOCH", "C_Boat_Civil_01_rescue_EPOCH", "B_Heli_Light_01_EPOCH", "B_Heli_Transport_01_EPOCH", "B_Heli_Transport_01_camo_EPOCH", "B_SDV_01_EPOCH", "B_MRAP_01_EPOCH", "B_Truck_01_transport_EPOCH", "B_Truck_01_covered_EPOCH", "B_Truck_01_mover_EPOCH", "B_Truck_01_box_EPOCH", "O_Truck_02_covered_EPOCH", "O_Truck_02_transport_EPOCH", "O_Truck_03_covered_EPOCH", "O_Truck_02_box_EPOCH", "O_Heli_Light_02_unarmed_EPOCH", "I_Heli_Transport_02_EPOCH", "I_Heli_light_03_unarmed_EPOCH", "O_Test_Tank_01", "Sword_SIM_EPOCH", "SapperHead_SIM_EPOCH", "SapperCorpse_SIM_EPOCH", "MetalFloor_SIM_EPOCH", "WoodRamp_SIM_EPOCH", "CinderWallHalf_SIM_EPOCH", "CinderWall_SIM_EPOCH", "CinderWallDoorway_SIM_EPOCH", "CinderWallSmallDoorway_SIM_EPOCH", "WoodFloor_SIM_EPOCH", "WoodFloorHalf_SIM_EPOCH", "WoodFloorQuarter_SIM_EPOCH", "WoodLargeWall_SIM_EPOCH", "WoodLargeWallCor_SIM_EPOCH", "WoodLargeWallDoorway_SIM_EPOCH", "WoodLargeWallDoor_SIM_EPOCH", "WoodLargeWallWin_SIM_EPOCH", "WoodSmallWallThird_SIM_EPOCH", "WoodStairs_SIM_EPOCH", "WoodLadder_SIM_EPOCH", "WoodStairsSans_SIM_EPOCH", "Shelf_SIM_EPOCH", "Chair_SIM_EPOCH", "ChairRed_SIM_EPOCH", "Filing_SIM_EPOCH", "Fridge_SIM_EPOCH", "Bed_SIM_EPOCH", "Couch_SIM_EPOCH", "Wardrobe_SIM_EPOCH", "Locker_SIM_EPOCH", "Cooker_SIM_EPOCH", "Pelican_SIM_EPOCH", "Land_SIM_EPOCH_WoodDoor_Base", "Land_SIM_EPOCH_WoodDoorLocked_Base", "CinderWallDoor_SIM_EPOCH_Base", "CinderWallDoorLocked_SIM_EPOCH_Base", "Land_SIM_EPOCH_WoodDoor", "Land_SIM_EPOCH_WoodDoorLocked", "Land_SIM_EPOCH_LargeWoodDoor", "Land_SIM_EPOCH_LargeWoodDoorLocked", "Land_SIM_EPOCH_GarageWoodDoor", "Land_SIM_EPOCH_GarageWoodDoorLocked", "CinderWallDoorLocked_SIM_EPOCH", "CinderWallDoor_SIM_EPOCH", "CinderWallDoorSmallLocked_SIM_EPOCH", "CinderWallDoorSmall_SIM_EPOCH", "Foundation_EPOCH", "Foundation_Ghost_EPOCH", "Sword_EPOCH", "MetalFloor_EPOCH", "WoodRamp_EPOCH", "CinderWallHalf_EPOCH", "CinderWall_EPOCH", "CinderWallDoorway_EPOCH", "CinderWallSmallDoorway_EPOCH", "WoodFloor_EPOCH", "WoodFloorHalf_EPOCH", "WoodFloorQuarter_EPOCH", "WoodLargeWall_EPOCH", "WoodLargeWallCor_EPOCH", "WoodLargeWallDoorway_EPOCH", "WoodLargeWallDoor_EPOCH", "WoodLargeWallWin_EPOCH", "WoodSmallWallThird_EPOCH", "WoodStairs_EPOCH", "WoodLadder_EPOCH", "WoodStairsSans_EPOCH", "Shelf_EPOCH", "Fridge_EPOCH", "Pelican_EPOCH", "BedProxy_EPOCH", "Bed_EPOCH", "CouchProxy_EPOCH", "Couch_EPOCH", "ChairProxy_EPOCH", "Chair_EPOCH", "ChairRed_EPOCH", "FilingProxy_EPOCH", "Filing_EPOCH", "Land_EPOCH_WoodDoor_Base", "Land_EPOCH_WoodDoorLocked_Base", "CinderWallDoor_EPOCH_Base", "CinderWallDoorLocked_EPOCH_Base", "Land_EPOCH_WoodDoor", "Land_EPOCH_WoodDoorLocked", "Land_EPOCH_LargeWoodDoor", "Land_EPOCH_LargeWoodDoorLocked", "Land_EPOCH_GarageWoodDoor", "Land_EPOCH_GarageWoodDoorLocked", "CinderWallDoorLocked_EPOCH", "CinderWallDoor_EPOCH", "CinderWallDoorSmallLocked_EPOCH", "CinderWallDoorSmall_EPOCH", "Poppy_EPOCH", "Land_WoodenBox_C_EPOCH", "Land_PaperBox_C_EPOCH", "centerplane_ui" }; weapons[] = { "U_Test_uniform", "U_Test1_uniform", "V_F0_EPOCH", "V_F1_EPOCH", "V_F2_EPOCH", "V_F3_EPOCH", "V_F4_EPOCH", "V_F5_EPOCH", "V_F6_EPOCH", "V_F7_EPOCH", "V_1_EPOCH", "V_2_EPOCH", "V_3_EPOCH", "V_4_EPOCH", "V_5_EPOCH", "V_6_EPOCH", "V_7_EPOCH", "V_8_EPOCH", "V_9_EPOCH", "V_10_EPOCH", "V_11_EPOCH", "V_12_EPOCH", "V_13_EPOCH", "V_14_EPOCH", "V_15_EPOCH", "V_16_EPOCH", "V_17_EPOCH", "V_18_EPOCH", "V_19_EPOCH", "V_20_EPOCH", "V_21_EPOCH", "V_22_EPOCH", "V_23_EPOCH", "V_24_EPOCH", "V_25_EPOCH", "V_26_EPOCH", "V_27_EPOCH", "V_28_EPOCH", "V_29_EPOCH", "V_30_EPOCH", "V_31_EPOCH", "V_32_EPOCH", "V_33_EPOCH", "V_34_EPOCH", "V_35_EPOCH", "V_36_EPOCH", "V_37_EPOCH", "V_38_EPOCH", "V_39_EPOCH", "V_40_EPOCH", "H_F0_EPOCH", "H_F1_EPOCH", "H_F2_EPOCH", "H_F3_EPOCH", "H_F4_EPOCH", "H_F5_EPOCH", "H_11_EPOCH", "H_28_EPOCH", "Rollins_F", "ChainSaw", "ChainSawB", "ChainSawG", "ChainSawP", "ChainSawR", "MultiGun", "Drink", "MeleeSledge", "test_suppressor", "Defib_EPOCH", "Heal_EPOCH", "Repair_EPOCH", , "sr25_epoch", "sr25_ec_epoch", "muzzle_sr25S_epoch", "l85a2_base_epoch", "l85a2_epoch", "l85a2_ris_epoch", "l85a2_ris_ng_epoch", "l85a2_pink_epoch", "l85a2_ugl_epoch" }; requiredVersion = 0.1; - requiredAddons[] = { "a3_map_altis", "a3_map_stratis", "A3_epoch_assets_3", "a3_epoch_weapons", "epoch_objects", "A3_epoch_vehicles", "A3_epoch_assets_1", "A3_epoch_assets", "A3_Soft_F", "A3_Characters_F", "A3_Characters_F_Beta", "A3_Characters_F_EPA", "A3_Characters_F_EPB", "A3_Structures_F", "A3_Armor_F_Beta", "A3_Data_F", "A3_Weapons_F", "A3_Characters_F_Kart", "A3_Soft_F_Kart_Kart_01", "a2_epoch_weapons", "A3_Air_F_Gamma_UAV_01", "A3_Soft_F_Car", "A3_Soft_F_Heli_Car", "A3_Soft_F_Offroad_01", "A3_Soft_F_Quadbike", "A3_Soft_F_Heli_Quadbike", "A3_Soft_F_SUV", "A3_Soft_F_Heli_SUV", "A3_Boat_F_Boat_Transport_01", "A3_Soft_F_Truck", "A3_Soft_F_Heli_Truck", "A3_Soft_F_Bootcamp_Truck", "A3_Boat_F_Civilian_Boat", "A3_Air_F_Heli_Light_01", "A3_Air_F_Heli_Heli_Light_01", "A3_Air_F_Beta_Heli_Transport_01", "A3_Boat_F_SDV_01", "A3_Boat_F_Heli_SDV_01", "A3_Soft_F_MRAP_01", "A3_Soft_F_Heli_MRAP_01", "A3_Soft_F_HEMTT", "A3_Soft_F_Gamma_HEMTT", "A3_Soft_F_TruckHeavy", "A3_Soft_F_Gamma_TruckHeavy", "A3_Soft_F_EPC_Truck_03", "A3_Air_F_Heli_Light_02", "A3_Air_F_Beta_Heli_Transport_02", "A3_Air_F_EPB_Heli_Light_03", "A3_Air_F_Heli_Heli_Transport_04", "A3_Air_F_Heli_Heli_Transport_03", "A3_Animals_F_Dog", "A3_Animals_F_Rabbit", "A3_Animals_F_Chicken", "A3_Characters_F_Common", "A3_Structures_F_Ind_Transmitter_Tower", "a3_epoch_structures" }; + requiredAddons[] = { "a3_map_altis", "a3_map_stratis", "A3_epoch_assets_3", "a3_epoch_weapons", "epoch_objects", "A3_epoch_vehicles", "A3_epoch_assets_1", "A3_epoch_assets", "A3_Soft_F", "A3_Characters_F", "A3_Characters_F_Beta", "A3_Characters_F_EPA", "A3_Characters_F_EPB", "A3_Structures_F", "A3_Armor_F_Beta", "A3_Data_F", "A3_Weapons_F", "A3_Weapons_F_LongRangeRifles_M320", "A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_EBR", "A3_Weapons_F_EPA_LongRangeRifles_DMR_01", "A3_Weapons_F_Machineguns_M200", "A3_Weapons_F_Machineguns_Zafir", "A3_Weapons_F_Mark_LongRangeRifles_DMR_02", "A3_Weapons_F_Mark_LongRangeRifles_DMR_03", "A3_Weapons_F_Mark_LongRangeRifles_DMR_04", "A3_Weapons_F_Mark_LongRangeRifles_DMR_05", "A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Characters_F_Kart", "A3_Soft_F_Kart_Kart_01", "a2_epoch_weapons", "A3_Air_F_Gamma_UAV_01", "A3_Soft_F_Car", "A3_Soft_F_Heli_Car", "A3_Soft_F_Offroad_01", "A3_Soft_F_Quadbike", "A3_Soft_F_Heli_Quadbike", "A3_Soft_F_SUV", "A3_Soft_F_Heli_SUV", "A3_Boat_F_Boat_Transport_01", "A3_Soft_F_Truck", "A3_Soft_F_Heli_Truck", "A3_Soft_F_Bootcamp_Truck", "A3_Boat_F_Civilian_Boat", "A3_Air_F_Heli_Light_01", "A3_Air_F_Heli_Heli_Light_01", "A3_Air_F_Beta_Heli_Transport_01", "A3_Boat_F_SDV_01", "A3_Boat_F_Heli_SDV_01", "A3_Soft_F_MRAP_01", "A3_Soft_F_Heli_MRAP_01", "A3_Soft_F_HEMTT", "A3_Soft_F_Gamma_HEMTT", "A3_Soft_F_TruckHeavy", "A3_Soft_F_Gamma_TruckHeavy", "A3_Soft_F_EPC_Truck_03", "A3_Air_F_Heli_Light_02", "A3_Air_F_Beta_Heli_Transport_02", "A3_Air_F_EPB_Heli_Light_03", "A3_Air_F_Heli_Heli_Transport_04", "A3_Air_F_Heli_Heli_Transport_03", "A3_Animals_F_Dog", "A3_Animals_F_Rabbit", "A3_Animals_F_Chicken", "A3_Characters_F_Common", "A3_Structures_F_Ind_Transmitter_Tower", "a3_epoch_structures", "A3_Weapons_F_Ammoboxes" }; magazines[] = { "30Rnd_test_mag", "5Rnd_rollins_mag", "CSGAS", "sledge_swing", "30Rnd_test_mag_Tracer", "EnergyPack", "1Rnd_Soda", "1Rnd_Food", "WoodLog_EPOCH", "PaintCanBlk", "PaintCanBlu", "PaintCanBrn", "PaintCanGrn", "PaintCanOra", "PaintCanPur", "PaintCanRed", "PaintCanTeal", "PaintCanYel" }; ammo[] = { "B_EnergyPack", "B_Swing", "Sapper_Charge_Ammo", "SapperB_Charge_Ammo", "B_Soda", "B_Food", "B_Test_Caseless", "ChainSaw_Bullet", "SmokeShellCustom" }; epochVersion = "0.3.6.0"; diff --git a/Sources/epoch_server_settings/configs/security/data/custom_vars.h b/Sources/epoch_server_settings/configs/security/data/custom_vars.h index 9c27559c..85d955d2 100644 --- a/Sources/epoch_server_settings/configs/security/data/custom_vars.h +++ b/Sources/epoch_server_settings/configs/security/data/custom_vars.h @@ -124,7 +124,7 @@ bis[] = { }; epoch[] = { "epoch_localcleanup","epoch_client_publiceh","epoch_clientinit","epoch_oneachframe","epoch_masterloop","epoch_client_rejectplayer","epoch_clientrespawn","epoch_clientrevive","epoch_starttradereq","epoch_starttrade","epoch_traderequest","epoch_tradeloop","epoch_countdown", - "epoch_fnc_selecttarget","epoch_fnc_selecttargetbuild","epoch_isbuildallowed","epoch_simulswap","epoch_staticmove","epoch_returnvector","epoch_upgradebuild","epoch_removebuild","epoch_startinteract","epoch_startinteractnpc","epoch_interactnpc","epoch_npctraderadd", + "epoch_fnc_selecttarget","epoch_fnc_selecttargetbuild","epoch_isbuildallowed","epoch_simulswap","epoch_staticmove","BIS_fnc_returnVector","epoch_upgradebuild","epoch_removebuild","epoch_startinteract","epoch_startinteractnpc","epoch_interactnpc","epoch_npctraderadd", "epoch_npctraderadd2","epoch_npctraderadd3","epoch_startnpctradermenu","epoch_npctradermenufilter","epoch_startnpctrade","epoch_makep2ptrade","epoch_tradefilter","epoch_takecrypto","epoch_startbanktransfer","epoch_keydown","epoch_onchar", "epoch_fnc_playerdeath","epoch_fnc_playerfired","epoch_fnc_isinsidebuilding","epoch_fnc_weather","epoch_fnc_findsafepos","epoch_pushcustomvar","epoch_itempicture","epoch_itemdisplayname","epoch_fnc_findrandomposbehind","epoch_fnc_stringleft", "epoch_sortarraybydistance","epoch_client_earthquake","epoch_client_loadanimalbrain","epoch_client_biteplayer","epoch_client_repairvehicle","epoch_client_lockvehicle","epoch_client_fillvehicle","epoch_client_gearvehicle","epoch_mission_accept","epoch_mission_hover_uav",