Merge pull request #1011 from EpochModTeam/experimental

Release 1.3.3
This commit is contained in:
EpochModTeamInternal 2020-06-03 14:04:59 -05:00 committed by GitHub
commit 9c222bb556
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
78 changed files with 803 additions and 1421 deletions

View File

@ -223,5 +223,4 @@ forceRestartTime = 14400; // 4 hour restarts
hiveAdminCmdTime = 5; // how many seconds between each command queue call.
// DEBUG
useOldLoadVehicles = "false";
enableUnitTestOnStart = 1; // enable extra debug for database calls. 1 = enabled.

View File

@ -8,20 +8,20 @@
5 assignAs !"assignAsCargo" !="_unit assignAsGunner _axeCopter;" !="_driver assignAsDriver _axeCopter;" !="axeVIP assignAsDriver vehicle axeVIP;"
5 assignAsCargo !="_x assignAsCargo axeGeneralsBoat;" !="axeVIP assignAsCargo vehicle player;" !="axeVIP assignAsCargo vehicle axeVIP;"
5 allowDamage !="_unit allowDamage false;" !="_unit allowDamage true;" !="player allowDamage true;" !="vehicle player allowDamage true;" !="player allowDamage false;" !="_target allowDamage true;" !="_cargo allowDamage false;" !="if (_god) then {_vehicle allowdamage"
5 addWeaponCargo !="_acceptHolder addWeaponCargo [_wWeapon, 1] ;" !="CBA_fnc_addWeaponCargo" !="\\fnc_addWeaponCargo" !="\"addWeaponCargo" !="cba_fAddWeaponCargo"
5 addWeaponCargo !="_acceptHolder addWeaponCargo [_wWeapon, 1] ;" !="CBA_fnc_addWeaponCargo" !="\\fnc_addWeaponCargo" !="\"addWeaponCargo" !="cba_fAddWeaponCargo" !="_loot addweaponcargoglobal [_weapon,_weaponAmount];"
5 onMapSingleClick !="onMapSingleClick '';" !="\"onmapsingleclick\""
5 addMagazine !"addMagazineCargo" !="player addMagazine [_item,_count];" !="player addMagazine \"sledge_swing\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine \"stick_swing\";" !="_wh addMagazineAmmoCargo[_item, 1, _count];" !="CBA_fnc_addMagazine" !="\\fnc_addMagazine" !="\"addMagazine" !="vehicle player addMagazineTurret" !="vehicle player addMagazineTurret" !="EPOCH_fnc_addMagazineOverflow" !="_vehicle addMagazineTurret [_ammotype, _turret, _ammocount]" !="_container addMagazineAmmoCargo _x;"
5 addMagazineCargo !="_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;" !="CBA_fnc_addMagazineCargo" !="\\fnc_addMagazineCargo" !="\"addMagazineCargo" !="cba_fAddMagazineCargo"
5 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" !="CBA_fnc_addItem" !="\\fnc_addItem" !="\"addItem" !="fnc_addItemCargo" !="wH = _nearByHolder select 0;\n};\nif !(isNull _wh) then {\n_wh addItemCargoGlobal [_item,1];\n};\n};\n};\n\n_fnc_findItemInContainers = " !="player addItem 'ItemRope';" !="_container addItemCargoGlobal [_type,_cnt];"
5 addMagazineCargo !="_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;" !="CBA_fnc_addMagazineCargo" !="\\fnc_addMagazineCargo" !="\"addMagazineCargo" !="cba_fAddMagazineCargo" !="_loot addmagazinecargoglobal [_magazine,_magazineAmount];"
5 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" !="CBA_fnc_addItem" !="\\fnc_addItem" !="\"addItem" !="fnc_addItemCargo" !="wH = _nearByHolder select 0;\n};\nif !(isNull _wh) then {\n_wh addItemCargoGlobal [_item,1];\n};\n};\n};\n\n_fnc_findItemInContainers = " !="player addItem 'ItemRope';" !="_container addItemCargoGlobal [_type,_cnt];" !="_loot additemcargoglobal [_item,_itemAmount];"
5 addBackPack !="fnc_addBackpackCargo" !="_newPlyr addBackpack _bpack;"
5 addMissionEventHandler !="CBA_clientID = [0, 2] select isMultiplayer;\naddMissionEventHandler [\"PlayerConnected\", {\nparams [\"_id\", \"_uid\", \"_name\"" !="addMissionEventHandler [\"EachFrame\", {call cba_common_fnc_onFrame}];" !="addMissionEventHandler [\"HandleDisconnect\"," !="addMissionEventHandler [\"Loaded\"," !="addMissionEventHandler ['Draw3D',_var + \"call Epoch_gui3DCooldownEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dModelPosEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dWorldPosEH;\"];" !="addMissionEventHandler [\n\"ended\",\n{\n\nBIS_fnc_missionHandlers_end = _this;" !="private _ehId = addMissionEventHandler [_event select [2], _code];" !="addMissionEventHandler [\"PlayerViewChanged\", {if (cameraView isEqualTo \"GROUP\") then {vehicle player switchCamera \"Internal\";};}];" !="addMissionEventHandler [\"EachFrame\",\n{\n;\n\n\nmissionNamespace setVariable [\"BIS_"
5 removeMissionEventHandler !="removeMissionEventHandler [\"Draw3D\", _id];" !="removeMissionEventHandler [_event select [2], _x select 1];"
5 removeAllWeapons !="removeAllWeapons axeGeneral;"
5 setViewDistance !="setViewDistance 1600"
5 createGroup !="EPOCH_server_createGroup" !="_grp = createGroup [RESISTANCE, true];" !="if (isserver) then {\n_group = creategroup sidelogic;" !="grpVIPGeneral = createGroup [RESISTANCE, true];" !="_grp = createGroup side _plyr;" !="_grp = createGroup [_side, true];" !="_grp = createGroup [(side _plyr), true];" !="createcenter sidelogic;\n_grpLogic = creategroup sidelogic;\nbis_functions_mainscope" !="_group = createGroup [west, true];"
5 createGroup !="EPOCH_server_createGroup" !="_grp = createGroup [RESISTANCE, true];" !="if (isserver) then {\n_group = creategroup sidelogic;" !="grpVIPGeneral = createGroup [RESISTANCE, true];" !="_grp = createGroup side _plyr;" !="_grp = createGroup [_side, true];" !="_grp = createGroup [(side _plyr), true];" !="createcenter sidelogic;\n_grpLogic = creategroup sidelogic;\nbis_functions_mainscope" !="_group = createGroup [west, true];" !="_newgroup = creategroup civilian;"
5 createVehicleCrew !="createvehiclecrew _x;"
5 createVehicleLocal !="\"Sign_Arrow_Direction_Yellow_F\" createVehicleLocal" !="\"#particlesource\" createVehicleLocal" !="\"#lightpoint\" createVehicleLocal" !="\"BloodSplat\" createVehicleLocal" !="[\"lightning1_F\", \"lightning2_F\"] call BIS_fnc_selectRandom;\n_lighting = _class createVehicleLocal" !="SLX_XEH_DUMMY createVehicleLocal [0, 0, 0];" !="CBA_eventHandlers = \"Logic\" createVehicleLocal [0, 0];"
5 createUnit !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit [\"I_officer_F\", axeGeneralPos, [], 1, \"CAN_COLLIDE\"];" !="bis_functions_mainscope = _grpLogic createunit [\"Logic\",[9,9,9],[],0,\"none\"];" !="_unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, \"FORM\"];" !="_driver = (group player) createUnit[\"I_UAV_AI\", position axeUAV, [], 0, \"CAN_COLLIDE\"];"
5 createUnit !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit [\"I_officer_F\", axeGeneralPos, [], 1, \"CAN_COLLIDE\"];" !="bis_functions_mainscope = _grpLogic createunit [\"Logic\",[9,9,9],[],0,\"none\"];" !="_unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, \"FORM\"];" !="_driver = (group player) createUnit[\"I_UAV_AI\", position axeUAV, [], 0, \"CAN_COLLIDE\"];" !="_unit = _grp createUnit [\"C_Man_1\", [0,0,0], [], 0, \"CAN_COLLIDE\"];"
5 createAgent !="bis_revive_ratioLethal = createAgent [\"Logic\", [10,10,0], [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent [\"Epoch_Sapper_F\", getPos _cage2, [], 0, \"FORM\"];" !="_unit = createAgent[_unitClass, position player, [], _zRange, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 0, \"CAN_COLLIDE\"];" !="_axeSapper = createAgent [\"Epoch_Sapper_F\", _pos, [], 12, \"FORM\"];" !="_nestMate = createAgent [\"Epoch_Sapper_F\", _garrPos, [], 0, \"FORM\"];"
5 createDialog !="createDialog 'server_info_picture'" !="createdialog 'epoch_tablet_gui'" !="createdialog 'Epoch_CamDialog'" !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" !="createDialog \"Epoch_myTempGroup\";" !="createDialog (if ((Epoch_my_tempGroupUID == \"\") && (Epoch_my_tempGroup isEqualTo [])) then {\"EPOCH_createTempGrp\"} else {\"Epoch_myTempGroup\"});" !="createDialog \"tempGroupRequests\";" !="createdialog 'EPOCH_SimpleInput';" !="createdialog 'PlayerStatsDialog'" !="'ServerStatsDialog'"
5 createDisplay !="createDisplay \"rmx_dynamenu\";" !="createDisplay \"rmx_moveDynamicHUD\";" !="_parent createdisplay _displayClass;" !="finddisplay 151 createdisplay 'RscDisplayOptionsLayout'" !="_display createdisplay \"RscDisplayDLCPreview\";"
@ -31,13 +31,13 @@
5 assignItem !="axeVIP assignItem _item;" !="unassignItem"
5 ctrlSetEventHandler !="ctrlSetEventHandler [\"mouseButtonDown\", _action];" !="_ctrlButtonOK ctrlseteventhandler [\"buttonclick\"," !="ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," !="_ctrl ctrlSetEventHandler [\"mouseEnter\"" !="_ctrlBtn ctrlSetEventHandler [\"MouseButtonDblClick\", _verAct];" !="_button_gen ctrlSetEventHandler [\"ButtonClick\",_btn_code + \"(uiNamespace getVariable [\"" !="t \"#(rgb,8,8,3)color(1,1,1,0.1)\";\n_c ctrlCommit 0;\n_c ctrlSetEventHandler [\"MouseButtonUp\",format[\"['remove',%1,(_this select 1)" !="ctrlSetEventHandler [\"ButtonClick\",\"_slider = ((finddisplay 602) displayCtrl 654001);"
5 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !="player addeventhandler [\"PostReset\",{BIS_EnginePPReset = true;} ];" !="player addEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="\"CBA_fnc_addEventHandler\"" !="\\fnc_addEventHandler" !="\"addEventHandler" !="_eventFunc = _eventFunc + \"(_this select 0) addEventHandler ['Respawn', \" + str _eventFunc + \"];\";" !="_unit addEventHandler [\"hitpart\"," !="CBA_fnc_addEventHandler" !="_unit addEventHandler [_x, format ['call cba_xeh_fnc_%1', _x]];" !="_ship addEventHandler [\"AttributesChanged3DEN\"" !="addEventHandler [\"HandleDamage\",bis_fnc_reviveOnPlayerHandleDamage];" !="_unit addEventHandler [\"FiredNear\"" !="_smokeEH = _plyr addEventHandler [\"FiredNear\", \"airDropHandle setFSMVariable" !="_onContactEH = _currentTarget addEventHandler[\"EpeContactStart"" !="_object addeventhandler [\"local\",{[[_this select 0],\"bis_fnc_objectVar\""
5 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="displayaddeventhandler [\"mousemoving\"," !="_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" !="_display displayaddeventhandler [_x,_fnc_animate];" !="Development\") then\n{\n_display displayaddeventhandler [\n\"keydown\"" !="CBA_fnc_addDisplayHandler" !="_display displayAddEventHandler [\"MouseMoving" !="private _handler = _display displayAddEventHandler [_key, _code];" !="_display displayAddEventHandler [\"KeyDown\", \"_this call cba_keybinding_fnc_onKeyDown\"" !="isplay 602};\n\n_display = (findDisplay 602);\n_display displayAddEventHandler [\"MouseButtonUp\",\"[] spawn {rmx_var_fav_selected = f" !="displayaddeventhandler\n[\n\"mousemoving\"" !="_ctrlBohemia ctrlcommit 0;\n\n\n_display displayaddeventhandler"
5 ctrlAddEventHandler !="_control = _display displayctrl 37305; \n_control ctrladdeventhandler" !="_ctrlMap = _display displayctrl 101;\n_ctrlMap ctrladdeventhandler" !="_display displayctrl 21995;\n_assetsButton ctrladdeventhandler [\"buttonclick\"," !="_display displayctrl 2406; \n_control ctrladdeventhandler [\"buttonclick\"," !="_display displayctrl 2400;\n_control ctrladdeventhandler [\"buttonclick\"," !="ctrladdeventhandler [\"lbselchanged\"," !="ctrladdeventhandler [\n\"lbselchanged\"," !="_ButtonGeneral ctrladdeventhandler [\"buttonclick\"," !="_ctrlExecuteLocal ctrladdeventhandler [\"buttonclick\"," !="_bg ctrlAddEventHandler [\"MouseEnter\"," !="_container ctrlAddEventHandler [\"LBDblClick\",\"_this call EPOCH_itemInteractClick\"];" !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="_ctrl ctrlSetEventHandler [\"mouseEnter\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseExit\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseButtonDown\", (format [\"call %1;\",(_buttonSettings select _e select 2)])];" !="_prevButton ctrlAddEventHandler [\"MouseButtonUp\", {_this call cba_diagnostic_fnc_debug" !="BIS_RscRespawnControlsMap_ctrlHeaderRespawnButton ctrlAddEventhandler [\"ButtonDown\"" !="_control = _display displayctrl 105;\n_control ctrladdeventhandler [\"MouseButtonUp\"" !="ctrlHeaderRespawnButton\", controlNull]) ctrlAddEventhandler [\"ButtonDown\"" !="_selected = false;\n{\n_c = _display displayCtrl _x;\n_c ctrlAddEventHandler [\"LBDrag\",\"rmx_var_favBar_Item = (_this call epoch_fav" !="_ctrlMouseArea ctrladdeventhandler [\"setfocus\",{with uinamespace do {[\"dlcClear\",[ctrlpar" !="13484 ctrlAddEventHandler [\"ButtonClick\", {[\"executeButton\"," !="_ctrlButtonPurchase ctrladdeventhandler"
5 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="displayaddeventhandler [\"mousemoving\"," !="_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" !="_display displayaddeventhandler [_x,_fnc_animate];" !="Development\") then\n{\n_display displayaddeventhandler [\n\"keydown\"" !="CBA_fnc_addDisplayHandler" !="_display displayAddEventHandler [\"MouseMoving" !="private _handler = _display displayAddEventHandler [_key, _code];" !="_display displayAddEventHandler [\"KeyDown\", \"_this call cba_keybinding_fnc_onKeyDown\"" !="isplay 602};\n\n_display = (findDisplay 602);\n_display displayAddEventHandler [\"MouseButtonUp\",\"[] spawn {rmx_var_fav_selected = f" !="displayaddeventhandler\n[\n\"mousemoving\"" !="_ctrlBohemia ctrlcommit 0;\n\n\n_display displayaddeventhandler" !="(findDisplay 46) displayAddEventHandler [\"KeyDown\", {\nprivate _code = _this select 1;"
5 ctrlAddEventHandler !="_control = _display displayctrl 37305; \n_control ctrladdeventhandler" !="_ctrlMap = _display displayctrl 101;\n_ctrlMap ctrladdeventhandler" !="_display displayctrl 21995;\n_assetsButton ctrladdeventhandler [\"buttonclick\"," !="_display displayctrl 2406; \n_control ctrladdeventhandler [\"buttonclick\"," !="_display displayctrl 2400;\n_control ctrladdeventhandler [\"buttonclick\"," !="ctrladdeventhandler [\"lbselchanged\"," !="ctrladdeventhandler [\n\"lbselchanged\"," !="_ButtonGeneral ctrladdeventhandler [\"buttonclick\"," !="_ctrlExecuteLocal ctrladdeventhandler [\"buttonclick\"," !="_bg ctrlAddEventHandler [\"MouseEnter\"," !="_container ctrlAddEventHandler [\"LBDblClick\",\"_this call EPOCH_itemInteractClick\"];" !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="_ctrl ctrlSetEventHandler [\"mouseEnter\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseExit\", (format [\"_c = _this select 0;" !="_ctrl ctrlSetEventHandler [\"mouseButtonDown\", (format [\"call %1;\",(_buttonSettings select _e select 2)])];" !="_prevButton ctrlAddEventHandler [\"MouseButtonUp\", {_this call cba_diagnostic_fnc_debug" !="BIS_RscRespawnControlsMap_ctrlHeaderRespawnButton ctrlAddEventhandler [\"ButtonDown\"" !="_control = _display displayctrl 105;\n_control ctrladdeventhandler [\"MouseButtonUp\"" !="ctrlHeaderRespawnButton\", controlNull]) ctrlAddEventhandler [\"ButtonDown\"" !="_selected = false;\n{\n_c = _display displayCtrl _x;\n_c ctrlAddEventHandler [\"LBDrag\",\"rmx_var_favBar_Item = (_this call epoch_fav" !="_ctrlMouseArea ctrladdeventhandler [\"setfocus\",{with uinamespace do {[\"dlcClear\",[ctrlpar" !="13484 ctrlAddEventHandler [\"ButtonClick\", {[\"executeButton\"," !="_ctrlButtonPurchase ctrladdeventhandler" !="ctrlAddEventHandler [ \"Draw\",{[2, _this] call BIS_fnc_OM_handleMapControls"
5 removeAllEventHandlers !"ctrlRemoveAllEventHandlers" !"displayRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_unit removeAllEventHandlers \"Hit\";\n_unit removeAllEventHandlers \"FiredNear\";" !="{_ship removeAllEventHandlers _x;} forEach [\"AttributesChanged3DEN\"" !="_zombie removeAllEventHandlers \"Hit\";" !="_zombie removeAllEventHandlers \"FiredNear\";"
5 displayRemoveAllEventHandlers !="_display displayRemoveAllEventHandlers _x;" !="if !(isMultiplayer) then { { (findDisplay 46) displayRemoveAllEventHandlers _x } forEach [\"KeyUp\", \"KeyDown\"] };"
5 removeAllMissionEventHandlers
5 ctrlRemoveAllEventHandlers !="(uiNamespace getVariable 'ESP_map') ctrlRemoveAllEventHandlers 'Draw';" !="ctrlAddEventHandler ['MouseButtonDown'"
5 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !="_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !=" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="player removeEventHandler [_x, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler"
5 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !="_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !=" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="player removeEventHandler [_x, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler" !="getvariable \"BIS_OM_HandleMapControls_mapHandler\") ctrlRemoveEventHandler [_x select 0, _x select 1]"
5 switchCamera !="vehicle player switchCamera" !="_antagonist switchCamera \"Internal\";"
5 remoteControl !="fn_moduleRemoteControl.sqf" !="\"BIS_fnc_moduleRemoteControl\""
5 drawIcon3D !="EPOCH_drawIcon3dStability" !="EPOCH_drawIcon3d" !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !="drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !="drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !="if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\"" !="drawIcon3D\n[\n(_x getVariable [\"bis_fnc_reviveGet3dIcons_textures" !="drawIcon3D[\"x\addons\a3_epoch_code\Data\UI\snap_ca.paa\"" !="drawIcon3D [\"\a3\ui_f\data\map\diary\icons\unitgroup_ca.paa\""
@ -45,5 +45,5 @@
5 ctrlCreate !="_parent ctrlcreate [\"RscMessageBox\",2351];" !="_c = _dsp ctrlCreate [\"rmx_drag_RscActivePicture\", call epoch_getIDC];" !="_c = _dsp ctrlCreate [\"rmx_t1\", call epoch_getIDC];" !="ctrlCreate [\"RscProgress\",_idc + 1];" !="ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\"" !="ctrlCreate [_x,call _getIDC];" !="_mainGrp = _display ctrlCreate [\"Epoch_main_config_group\",_value];" !="ctrlCreate !="_prevButton = _display ctrlCreate [\"RscButtonMenu\", 90110, _dbg];" [\"RscControlsGroupNoScrollbars\",call epoch_getIDC];" !="ctrlCreate [\"rmx_rscPicture\",(66600 + _e)];" !="ctrlCreate [\"RscStructuredText\",call epoch_getIDC];" !="_bar = _display ctrlCreate [\"RscCustomProgress\"" !="_group = _dsp ctrlCreate [\"rmx_rscControlsGroup\", call Epoch_getIDC]" !="_control = _display ctrlCreate [\"RscControlsGroupNoScrollbars\", 5678910];"
5 deleteVehicleCrew !="fn_deleteVehicleCrew.sqf" !="\"BIS_fnc_deleteVehicleCrew\""
5 selectPlayer !="selectPlayer _playerObject;"
5 playSound3D !="playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange];" !="playSound3D ['a3\sounds_f\air\heli_attack_02\alarm.wss', player, false,getposasl _object, 1, 1, 300];" !="playSound3D [\"a3\Sounds_F\environment\animals\Goats\Goat_\" + selectRandom"
5 playSound3D !="playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange];" !="playSound3D ['a3\sounds_f\air\heli_attack_02\alarm.wss', player, false,getposasl _object, 1, 1, 300];" !="playSound3D [\"a3\Sounds_F\environment\animals\Goats\Goat_\" + selectRandom" !="playsound3d [_vehicleSplat, _zombie"
5 setUnitLoadout !="Epoch_SetUnitLoadout" !="_newPlyr setunitloadout _loadout;"

View File

@ -22,6 +22,9 @@ _canAutoRun = true;
if !(alive player) exitwith {
false
};
if (lifeState player == "INCAPACITATED") exitwith {
false
};
/*
if !(istouchingground player) exitwith {
false

View File

@ -61,7 +61,7 @@ _mycams spawn {
Epoch_CamFilmGrain = ppEffectCreate ["FilmGrain", 2000 + 25];
};
Epoch_CamFilmGrain ppEffectEnable true;
_intensity = ((player distance Epoch_ActiveCam) / 10000) min 1;
_intensity = ((player distance Epoch_ActiveCam) / 4000) min 1;
_sharpness = 1.25 - _intensity;
Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true];
Epoch_CamFilmGrain ppEffectCommit 0;
@ -81,8 +81,11 @@ _mycams spawn {
_EpochCam camSetTarget _targetpos;
_EpochCam camCommit 0;
_dirs = [5,10,15,20,25,30,35,40,45,40,35,30,25,20,15,10,5,0,-5,-10,-15,-20,-25,-30,-35,-40,-45,-40,-35,-30,-25,-20,-15,-10,-5,0];
_GrainUpdateIntervall = 5;
_nextgrainupdate = diag_ticktime;
while {!isnull _display} do {
Epoch_CamAdjust params ["_dir","_height","_zoom"];
_playerdist = player distance Epoch_ActiveCam;
_AutoCam = Epoch_AutoCam;
if !(_ActiveCam isequalto Epoch_ActiveCam) then {
_ActiveCam = Epoch_ActiveCam;
@ -96,11 +99,14 @@ _mycams spawn {
_EpochCam cameraEffect ['internal', 'front'];
_EpochCam camCommit 0;
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
_intensity = ((player distance Epoch_ActiveCam) / 10000) min 1;
(_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1];
};
if (_nextgrainupdate <= diag_ticktime) then {
_intensity = (_playerdist / 4000) min 1;
_sharpness = 1.25 - _intensity;
Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true];
Epoch_CamFilmGrain ppEffectCommit 0;
(_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1];
Epoch_CamFilmGrain ppEffectCommit _GrainUpdateIntervall;
_nextgrainupdate = diag_ticktime + _GrainUpdateIntervall;
};
if !(Epoch_AutoCam) then {
_targetheight = ((_targetheight + _height) min 50) max -150;

View File

@ -89,3 +89,26 @@ if (_woman == 1) then {
};
};
};
_tocheckfor = switch _item do {
case (uniform player): {uniformcontainer player};
case (vest player): {vestcontainer player};
case (backpack player): {backpackcontainer player};
default {objnull};
};
if (!isnull _tocheckfor) then {
{
_target = _x;
_subcontainers = everyContainer _target;
{
_subcontainer = _x;
if (_tocheckfor == (_subcontainer select 1)) then {
switch _item do {
case (uniform player): {removeUniform player;};
case (vest player): {removeVest player;};
case (backpack player): {removeBackpack player;};
};
};
} foreach _subcontainers;
} foreach (nearestobjects [player,['WeaponHolder','WeaponHolderSimulated','MAN','Landvehicle','SHIP','AIR','ReammoBox_F'],10]);
};

View File

@ -13,11 +13,16 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_HandleDamage.sqf
*/
params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"];
_this call EPOCH_custom_EH_HandleDamage;
if !(_source isEqualTo _unit) then {
if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) > diag_ticktime) exitwith {}; // prevent multiple actions here
EPOCH_HandleDamageTimeOut = diag_ticktime + 0.1;
if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) - diag_ticktime > 5) exitwith {_damage = 1;};
switch _projectile do {
case "B_EnergyPack": {
_damage = 0;
if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) > diag_ticktime) exitwith {}; // prevent multiple actions here
EPOCH_HandleDamageTimeOut = diag_ticktime + 0.1;
if (_source distance _unit > 10) exitwith {};
if !(missionnamespace getvariable ["EPOCH_OldRevive",false]) then {
_attachments = handgunItems _source;
@ -58,6 +63,9 @@ if !(_source isEqualTo _unit) then {
case "bbag_pvc";
case "xbow_tranq";
case "tranq_dart": {
_damage = 0;
if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) > diag_ticktime) exitwith {}; // prevent multiple actions here
EPOCH_HandleDamageTimeOut = diag_ticktime + 0.1;
if !(lifeState _unit == "INCAPACITATED") then {
EPOCH_HandleDamageTimeOut = diag_ticktime + 1;
_unit setUnconscious true;
@ -69,6 +77,7 @@ if !(_source isEqualTo _unit) then {
case "B_Swing";
case "B_Stick";
case "B_Hatchet": {
if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) > diag_ticktime) exitwith {}; // prevent multiple actions here
if !(lifeState _unit == "INCAPACITATED") then {
if ((random 100) < (["CfgEpochClient", "UnconsciousChance", 30] call EPOCH_fnc_returnConfigEntryV2)) then {
EPOCH_HandleDamageTimeOut = diag_ticktime + 1;

View File

@ -16,4 +16,7 @@ params ["_unit","_container"];
if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2];
EPOCH_arr_interactedObjs = [];
};
if !(player == Vehicle Player) then {
call EPOCH_ReloadLoadout;
};

View File

@ -55,7 +55,32 @@ if(_deathMarkerON && ('ItemGPS' in (assignedItems _unit)))then{
profileNameSpace setVariable["EPOCHLastKnownDeath",getPos _unit];
};
[player,_killer,toArray profileName,Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayer",2];
// Check, if Player got killed by another Player (opponent) in his Base
_homekill = false;
if (_unit !=_killer) then {
if (isplayer _killer) then {
if !(_killer in (units (group Player))) then {
_SupressBaseSpawnOnHomekillTime = ["CfgEpochClient", "SupressBaseSpawnOnHomekillTime", 0] call EPOCH_fnc_returnConfigEntryV2;
if (_SupressBaseSpawnOnHomekillTime > 0) then {
_jammer = nearestObjects[player, call EPOCH_JammerClasses, ["CfgEpochClient", "minJammerDistance", 650] call EPOCH_fnc_returnConfigEntryV2];
if !(_jammer isEqualTo []) then {
_nearestJammer = _jammer select 0;
if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
_CfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig;
_JammerConfig = (_CfgEpochClient >> "CfgJammers" >> (typeof _nearestJammer));
_buildingJammerRange = getnumber (_JammerConfig >> "buildingJammerRange");
if (_unit distance _nearestJammer < _buildingJammerRange) then {
_homekill = true;
[format ["Base Spawn disabled for %1 minutes (killed in your Territory)",(_SupressBaseSpawnOnHomekillTime/60) tofixed 1],5] call Epoch_Message;
};
};
};
};
};
};
};
[player,_killer,toArray profileName,Epoch_personalToken,_homekill] remoteExec ["EPOCH_server_deadPlayer",2];
// disable build mode
EPOCH_buildMode = 0;

View File

@ -290,9 +290,9 @@ if (_dikCode in (actionKeys "NightVision")) then {
if(!_ctrl && (_dikCode in (actionKeys "HeliRopeAction")))then{
if (player == vehicle player) exitwith {};
_msg = "";
if(EPOCH_ArmaSlingLoad)then{
if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then {
if(driver vehicle player isEqualTo player)then{
if(currentPilot vehicle player isEqualTo player)then{
if(EPOCH_ArmaSlingLoad)then{
if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then {
_slung = ropeAttachedObjects vehicle player;
if(_slung isEqualTo [])then{
if!('ItemRope' in magazines player) then {
@ -305,10 +305,10 @@ if(!_ctrl && (_dikCode in (actionKeys "HeliRopeAction")))then{
player addItem 'ItemRope';
};
};
}else{
_msg = "Hook/Unhook Malfunction, overrode by R3F or AdvSlingLoad";
_handled = true;
};
}else{
_msg = "Hook/Unhook Malfunction, overrode by R3F or AdvSlingLoad";
_handled = true;
};
if!(_msg isEqualTo "")then{
[_msg,5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack;

View File

@ -172,7 +172,11 @@ if (EPOCH_debugMode) then {
if (_x == "Temp") then {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2°F | %3°C</t><br/>", _x,_val,_val call EPOCH_convertTemp];
} else {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>", _x,_val];
if (_x == "Crypto") then {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>", _x,Epoch_PlayerCrypto];
} else {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>", _x,_val];
};
};
}
}forEach _customVarNames;

View File

@ -239,8 +239,10 @@ _PlayTimeTimer = diag_ticktime;
_UpdateTopStats = false;
EPOCH_MyStatsPublic = !((missionnamespace getvariable ["EPOCH_totalPublicStats",1]) isEqualTo 0);
_LastLootCall = diag_ticktime - 30;
_lootBubble = {
private["_jammer", "_others", "_objects", "_nearObjects", "_building", "_lootDist", "_lootLoc", "_playerPos", "_distanceTraveled","_AddBias","_dir","_minlootdist","_maxlootdist"];
if (diag_ticktime - _LastLootCall < 12) exitwith {};
if (!alive player) exitwith {};
if (speed vehicle player > 30) exitwith {};
_playerPos = getPosATL vehicle player;
@ -369,6 +371,7 @@ _lootBubble = {
} foreach _objects;
// systemchat format ["Spawned Loot in %1 Buildings", count _LootsArray];
if !(_LootsArray isEqualTo []) then {
_LastLootCall = diag_Ticktime;
[player,Epoch_personalToken,_LootsArray] remoteExec ["EPOCH_server_spawnLoot",2];
};
};

File diff suppressed because it is too large Load Diff

View File

@ -14,11 +14,12 @@
/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/
class CfgEpochClient
{
epochVersion = "1.3.2";
epochVersion = "1.3.3";
ArmAVersion = 176;
debug = "true"; // true = enable extra rpt debug lines, false to disable
debug = "false"; // true = enable extra rpt debug lines, false to disable
ForceGender = ""; // Force Players to spawn as "Male" or "Female"
RemoveLaserfromUAV = "true"; // remove LaserDesignator from assembled UAV's
RemoveTIfromUAV = "true"; // remove Thermal from assembled UAV's
UseOldRevive = "false"; // Revive / Heal Player has been changed to use "HandleDamage" Eventhandler. If scripts are breaking it for you, set it to true (not recommended!)
UnconsciousChance = 30; // Change in percent to get unconscious by a hit with an Axe / Sledge / Sword
@ -40,6 +41,7 @@ class CfgEpochClient
baseThirstLoss = 2; // increase number to speed up rate of Thirst loss
accelerateHTALoss = "false"; // use server's time acceleration to increase the rate of Hunger, Thirst and Alcohol loss
SupressBaseSpawnOnHomekillTime = 1200; // Suppress Base Spawn for xxx seconds, when Player got Killed by an opponent in his own Territory
buildingNearbyMilitary = 0; //1 to allow building nearby
buildingNearbyMilitaryRange = 300; //Define radius of blocked area
buildingNearbyMilitaryClasses[] = {"Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"};
@ -54,6 +56,7 @@ class CfgEpochClient
splitCountLimits = 0; //1 = distinguish buildingCountLimit from storageCountLimit (ex.: buildingCountLimit=100, storageCountLimit=100 >> you can build 100 baseparts AND additional 100 storage objects like safes, lockboxes...)
MaxBuildingTilt = 180; // Max degrees players can tilt building elements
EnablePhysicsOnBuild = "true"; // Building parts need Snap (hold) points to not fall on the ground while building
BaseCamOnlyHome = "true"; // set to false, to allow BaseCam usage outside Players PlotPole range (doubleclick on BaseCam Terminal in Inventory)
class CfgJammers {
class PlotPole_EPOCH // Jammer Classname
@ -261,7 +264,7 @@ class CfgEpochClient
{"NPCTrades","Trades at Trader"},
{"BuildingsSet","Placed Buildings"},
{"CraftedItems","Crafted Items"},
{"Karma","Karma","round %1"},
{"AntagonistKills","Killed Antagonists"},
{"Murders","Player Kills"},
{"AIKills","AI Kills"},
{"Deaths","Deaths by Player"},
@ -282,7 +285,7 @@ class CfgEpochClient
Killed = "_this call EPOCH_fnc_playerDeath;_this call Epoch_custom_EH_Killed";
HandleRating = "0";
HandleScore = "";
HandleDamage = "_this call EPOCH_HandleDamage;_this call EPOCH_custom_EH_HandleDamage";
HandleDamage = "_this call EPOCH_HandleDamage";
HandleHeal = "";
Dammaged = "";
Hit = "_this call EPOCH_custom_EH_Hit";
@ -291,7 +294,7 @@ class CfgEpochClient
GetOutMan = "_this call EPOCH_getOutMan;_this call Epoch_custom_EH_GetOutMan";
SeatSwitchedMan = "_this call EPOCH_custom_EH_SeatSwitchedMan";
FiredNear = "_this call EPOCH_custom_EH_FiredNear";
WeaponAssembled = "clearItemCargoGlobal (_this select 1);if (['CfgEpochClient','RemoveLaserfromUAV',true] call EPOCH_fnc_returnConfigEntryV2) then {(_this select 1) removeWeaponTurret ['Laserdesignator_mounted',[0]]}; if ((_this select 1) isKindOf 'UAV_01_base_F' || (_this select 1) isKindOf 'UAV_06_base_F') then {['UAV assembled - Connect it with DynaMenu (Space)',5] call Epoch_Message}";
WeaponAssembled = "clearItemCargoGlobal (_this select 1);if (['CfgEpochClient','RemoveTIfromUAV',true] call EPOCH_fnc_returnConfigEntryV2) then {(_this select 1) disableTIEquipment true}; if (['CfgEpochClient','RemoveLaserfromUAV',true] call EPOCH_fnc_returnConfigEntryV2) then {(_this select 1) removeWeaponTurret ['Laserdesignator_mounted',[0]]}; if ((_this select 1) isKindOf 'UAV_01_base_F' || (_this select 1) isKindOf 'UAV_06_base_F') then {['UAV assembled - Connect it with DynaMenu (Space)',5] call Epoch_Message}";
// suppress these units from spawning near Jammer or Traders
nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"};
nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"};

View File

@ -269,7 +269,7 @@ class CfgItemSort
"V_PlateCarrierSpec_blk",
"V_HarnessO_ghex_F",
"V_HarnessOGL_ghex_F",
"V_PlateCarroer2_tna_F",
"V_PlateCarrier2_tna_F",
"V_PlateCarrierGL_tna_F",
"V_PlateCarrier2_blk"
};

View File

@ -2568,6 +2568,10 @@ class CfgPricing
{
price = 150;
};
class srifle_DMR_04_F
{
price = 150;
};
class srifle_DMR_04_Tan_F
{
price = 150;
@ -4194,6 +4198,58 @@ class CfgPricing
{
price = 5;
};
class V_Press_F
{
price = 5;
};
class V_PlateCarrier1_tna_F
{
price = 10;
};
class V_TacChestrig_grn_F
{
price = 10;
};
class V_TacChestrig_oli_F
{
price = 10;
};
class V_TacChestrig_cbr_F
{
price = 10;
};
class V_PlateCarrierSpec_tna_F
{
price = 10;
};
class V_PlateCarrierSpec_mtp
{
price = 10;
};
class V_PlateCarrierSpec_blk
{
price = 10;
};
class V_HarnessO_ghex_F
{
price = 10;
};
class V_HarnessOGL_ghex_F
{
price = 10;
};
class V_PlateCarrier2_tna_F
{
price = 10;
};
class V_PlateCarrierGL_tna_F
{
price = 10;
};
class V_PlateCarrier2_blk
{
price = 10;
};
class H_1_EPOCH
{
price = 3;

View File

@ -186,8 +186,9 @@ class CfgServicePoint {
};
class I_LT_01_cannon_F {
MagsTurrets[] = {
{"SmokeLauncherMag",{0},2,50},
{"200Rnd_762x51_Belt_Yellow",{0},1,300}
{"SmokeLauncherMag",{0},1,50},
// {"60Rnd_20mm_HE_shells",{0},60,4,9999999},
{"200Rnd_762x51_Belt_Yellow",{0},4,300}
};
};
class I_LT_01_scout_F {
@ -202,16 +203,10 @@ class CfgServicePoint {
};
class I_MRAP_03_hmg_F {
MagsTurrets[] = {
{"500Rnd_127x99_mag_Tracer_Red",{0},3,1500},
{"200Rnd_127x99_mag_Tracer_Red",{0},3,600},
{"SmokeLauncherMag",{1},2,50}
};
};
class O_MRAP_02_EPOCH1 {
MagsTurrets[] = {
{"SmokeLauncherMag",{-1},2,50}
};
};
class B_Heli_Transport_01_F {
MagsTurrets[] = {
{"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150},
@ -231,20 +226,26 @@ class CfgServicePoint {
class B_G_Offroad_01_armed_EPOCH2 : B_G_Offroad_01_armed_F {};
class B_G_Offroad_01_armed_EPOCH3 : B_G_Offroad_01_armed_F {};
class B_G_Offroad_01_armed_EPOCH4 : B_G_Offroad_01_armed_F {};
class I_MRAP_03 {
MagsTurrets[] = {
{"SmokeLauncherMag",{0},1,150}
};
};
class I_MRAP_03_EPOCH {
MagsTurrets[] = {
};
};
class O_MRAP_02_F {
MagsTurrets[] = {
{"SmokeLauncherMag",{-1},1,150}
{"SmokeLauncherMag",{-1},1,50}
};
};
class O_MRAP_02_EPOCH1 : O_MRAP_02_F {};
class O_MRAP_02_EPOCH2 : O_MRAP_02_F {};
class O_MRAP_02_EPOCH3 : O_MRAP_02_F {};
class O_MRAP_02_EPOCH4 : O_MRAP_02_F {};
class I_MRAP_03 {
MagsTurrets[] = {
// {"Laserbatteries",{0},1,1.0002e+007,2},
{"SmokeLauncherMag",{0},1,50}
};
};
class I_MRAP_03_EPOCH : I_MRAP_03 {};
class I_MRAP_03_EPOCH1 : I_MRAP_03 {};
class I_MRAP_03_EPOCH2 : I_MRAP_03 {};
class I_MRAP_03_EPOCH3 : I_MRAP_03 {};
class I_MRAP_03_EPOCH4 : I_MRAP_03 {};
class B_LSV_01_armed_olive_F {
MagsTurrets[] = {
{"100Rnd_127x99_mag_Tracer_Red",{0},3,200},
@ -297,6 +298,7 @@ class CfgServicePoint {
};
};
class I_Heli_Transport_02_EPOCH : I_Heli_Transport_02_F {};
class C_IDAP_Heli_Transport_02_F : I_Heli_Transport_02_F {};
class B_Heli_Transport_03_F {
MagsTurrets[] = {
{"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150},

View File

@ -0,0 +1 @@
epoch_server

View File

@ -53,109 +53,10 @@ if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{
// if normal storage device dump items on ground.
if (_building isKindOf "Buildable_Storage") then {
// may not be needed but should prevent <null> in DB.
_wepsItemsCargo = weaponsItemsCargo _building;
if (isNil "_wepsItemsCargo") then{
_wepsItemsCargo = [];
};
_magsAmmoCargo = magazinesAmmoCargo _building;
if (isNil "_magsAmmoCargo") then{
_magsAmmoCargo = [];
};
// dump items on ground
_inventory = [
_wepsItemsCargo,
_magsAmmoCargo,
getBackpackCargo _building,
getItemCargo _building
];
_inventory = _building call EPOCH_server_CargoSave;
[_building, _player] call EPOCH_server_save_killedStorage;
deleteVehicle _building;
{
_objType = _forEachIndex;
_objTypes = _x;
_objQty = [];
if (_objType in[2, 3]) then{
_objTypes = _x select 0;
_objQty = _x select 1;
};
{
switch _objType do {
case 0: {
if (_x isEqualType []) then{
_arrCount = count _x;
if (_arrCount >= 4) then{
_gwh addWeaponCargoGlobal[_x deleteAt 0, 1];
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray = _x;
}
else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
// add all attachments to vehicle
// TODO replace with adding attachments directly to gun (Arma feature dependant)
{
_gwh addItemCargoGlobal[_x, 1];
} forEach _attachments;
if (_wMags) then{
if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{
_gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
};
};
};
};
};
case 1: {
if (_x isEqualType []) then{
if ((count _x) == 2) then{
_magazineName = _x select 0;
_magazineSize = _x select 1;
if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then{
_gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize];
};
};
};
};
case 2: {
if (_x isEqualType "STRING") then{
_qty = _objQty select _forEachIndex;
_gwh addBackpackCargoGlobal[_x, _qty];
};
};
case 3: {
if (_x isEqualType "STRING") then{
_qty = _objQty select _forEachIndex;
_gwh addItemCargoGlobal[_x, _qty];
};
};
};
}forEach _objTypes;
}forEach _inventory;
[_gwh,_inventory] call EPOCH_server_CargoFill;
} else {
// Remove trap object

View File

@ -15,7 +15,7 @@
//[[[cog import generate_private_arrays ]]]
private ["_bankBalance","_bankData","_cIndex","_current_crypto","_defaultVars","_playerName","_playerUID","_pos","_response","_triggerType","_vars","_killerUID","_deathType","_killerCommunityStats","_mIndex","_current_murders","_communityStats","_sIndex","_current_suicides","_dIndex","_current_deaths","_playerKarmaAdj","_killerKarmaAdj","_kIndex","_playerCStats","_playerKarma","_playerIsNeutral","_playerIsBandit","_playerIsHero","_killerCStats","_killerKarma","_karmaLimitsArray","_lowKarmaLevel1","_highKarmaLevel1"];
//[[[end]]]
params ["_playerObj","_killer","_playerName",["_token","",[""]] ];
params ["_playerObj","_killer","_playerName",["_token","",[""]], ["_homekill",false]];
// handle token check and isnull for _player
if !([_playerObj, _token] call EPOCH_server_getPToken) exitWith{};
@ -141,3 +141,20 @@ if (EPOCH_cloneCost > 0) then {
["Bank", _playerUID, EPOCH_expiresBank, [_bankBalance]] call EPOCH_fnc_server_hiveSETEX;
};
};
// Check for BaseKill and skip Base Spawn for the next xxx seconds
if (_homekill) then {
_SupressBaseSpawnOnHomekillTime = ["CfgEpochClient", "SupressBaseSpawnOnHomekillTime", 0] call EPOCH_fnc_returnConfigEntryV2;
if (isnil "Epoch_BaseSpawnSkips") then {
Epoch_BaseSpawnSkips = [[],[]];
};
Epoch_BaseSpawnSkips params ["_SpawnSkipUIDs","_SpawnSkipTimers"];
_idx = _SpawnSkipUIDs find _playerUID;
if (_idx > -1) then {
_SpawnSkipTimers set [_idx,diag_ticktime + _SupressBaseSpawnOnHomekillTime];
}
else {
_SpawnSkipUIDs pushback _playerUID;
_SpawnSkipTimers pushback (diag_ticktime + _SupressBaseSpawnOnHomekillTime);
};
};

View File

@ -145,6 +145,16 @@ if (!isNull _player) then {
};
};
if (_newLocation isEqualType [] && {(count _newLocation) == 3}) then {
// Check for BaseKill and skip Base Spawn
Epoch_BaseSpawnSkips params ["_SpawnSkipUIDs","_SpawnSkipTimers"];
_SpawnSkipTime = 0;
_idx = _SpawnSkipUIDs find _playerUID;
if (_idx > -1) then {
_SpawnSkipTime = _SpawnSkipTimers select _idx;
};
if (_SpawnSkipTime > diag_ticktime) exitwith {};
_CheckLocation = _newLocation;
if (surfaceiswater _newLocation) then {
_CheckLocation = ATLToASL _newLocation;

View File

@ -59,10 +59,10 @@ if (_sIndex > -1) then {
_currentStat = _playerStats select _sIndex;
//set the new stat value
if (_isTotal) then {
_playerStats set[_sIndex, _adjust];
_playerStats set[_sIndex, _adjust min 3.4028235e+37 max -3.4028235e+37]; // +/- 3.4028235e+38 is Epoch Extension limit!
}
else {
_playerStats set[_sIndex, _currentStat + _adjust];
_playerStats set[_sIndex, (_currentStat + _adjust) min 3.4028235e+37 max -3.4028235e+37];
};
//set the new stats array back onto this playerObj
_playerObj setVariable["COMMUNITY_STATS", _playerStats];

View File

@ -24,7 +24,7 @@ if !((_playerUID isequalto '') || (_vars isequalto [])) then {
if !(_publicindex isequalto -1) then {
_makepublic = _vars select _publicindex;
};
_tempStats = EPOCH_TopStats;
_tempStats = +EPOCH_TopStats;
{
_ThisStatArr = _x;
_playerisin = false;
@ -51,7 +51,9 @@ if !((_playerUID isequalto '') || (_vars isequalto [])) then {
};
};
} foreach _tempStats;
EPOCH_TopStats = _tempStats;
["CommunityStats", "0_TopStats", EPOCH_expiresCommunityStats, EPOCH_TopStats] call EPOCH_fnc_server_hiveSETEX;
publicvariable "EPOCH_TopStats";
if !(EPOCH_TopStats isEqualTo _tempStats) then {
EPOCH_TopStats = _tempStats;
["CommunityStats", "0_TopStats", EPOCH_expiresCommunityStats, EPOCH_TopStats] call EPOCH_fnc_server_hiveSETEX;
publicvariable "EPOCH_TopStats";
};
};

View File

@ -42,6 +42,8 @@ _TraderDeco = [_serverSettingsConfig, "TraderDeco", true] call EPOCH_fnc_returnC
_WinterDeco = (Epoch_ServerRealtime select 1) == 12 && (Epoch_ServerRealtime select 2) > 20 && _TraderDeco;
_HelloweenDeco = (((Epoch_ServerRealtime select 1) == 10 && (Epoch_ServerRealtime select 2) >= 24) || ((Epoch_ServerRealtime select 1) == 11 && (Epoch_ServerRealtime select 2) <= 3)) && _TraderDeco;
_StoredVehiclesTmp = [];
_TraderInit = {
_this allowdamage !_TraderGodMode;
_this setDir _dir;
@ -95,34 +97,8 @@ _TraderItemsClean = {
}
else {
if (_item isKindOf "Air" || _item isKindOf "Ship" || _item isKindOf "LandVehicle" || _item isKindOf "Tank") then {
_newstock = 0;
for "_k" from 1 to _currentStock do {
if (EPOCH_storedVehicleCount < _storedVehicleLimit) then {
_newstock = _newstock + 1;
EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + 1;
if !(_item in EPOCH_traderStoredVehicles) then {
EPOCH_traderStoredVehicles pushBack _item;
EPOCH_traderStoredVehiclesCnt pushBack 1;
}
else {
_indexStock = EPOCH_traderStoredVehicles find _item;
if (_indexStock != -1) then {
_existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock;
EPOCH_traderStoredVehiclesCnt set [_indexStock, (_existingStock + 1)];
};
};
};
};
if !(_newstock == _currentStock) then {
_arrchanged = true;
if (_newstock > 0) then {
// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Changed stock of %2 from Trader | _currentStock: %3 | _newstock: %4 | EPOCH_storedVehicleCount: %5 | _storedVehicleLimit: %6",_i,str _item,_currentStock,_newstock,EPOCH_storedVehicleCount,_storedVehicleLimit];
(_arr select 1) set [_idx,_newstock];
}
else {
// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Removed %2 from Trader | EPOCH_storedVehicleCount: %3 | _storedVehicleLimit: %4",_i,str _item,EPOCH_storedVehicleCount,_storedVehicleLimit];
_delete = true;
};
_StoredVehiclesTmp pushback [_i,_item];
};
};
};
@ -234,4 +210,47 @@ for "_i" from 0 to (_maxTraderLimit-1) do {
};
};
};
// Remove random overloaded Vehicles from Traders
for "_i" from 1 to ((count _StoredVehiclesTmp) - _storedVehicleLimit) do {
_selected = _StoredVehiclesTmp deleteat (((round random (count _StoredVehiclesTmp))-1) max 0);
_selected params ["_AiSlot","_Item"];
{
if ((_x getvariable ["AI_SLOT",-1]) isEqualTo _AiSlot) exitwith {
_arr = _x getVariable ["AI_ITEMS", [[],[]]];
_arr params ["_itemsarr","_cntarray"];
_idx = _itemsarr find _Item;
if (_idx > -1) then {
if ((_cntarray select _idx) > 1) then {
_cntarray set [_idx,(_cntarray select _idx) - 1];
}
else {
_itemsarr deleteat _idx;
_cntarray deleteat _idx;
};
_x setVariable ["AI_ITEMS", _arr, true];
_objHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _AiSlot];
["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX;
};
};
} foreach EPOCH_Traders;
};
// Count all left over Vehicles in Trader Stock
{
EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + 1;
_x params ["","_item"];
if !(_item in EPOCH_traderStoredVehicles) then {
EPOCH_traderStoredVehicles pushBack _item;
EPOCH_traderStoredVehiclesCnt pushBack 1;
}
else {
_indexStock = EPOCH_traderStoredVehicles find _item;
if (_indexStock != -1) then {
_existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock;
EPOCH_traderStoredVehiclesCnt set [_indexStock, (_existingStock + 1)];
};
};
} foreach _StoredVehiclesTmp;
true

View File

@ -91,8 +91,7 @@ if (_slot != -1) then {
removeFromRemainsCollector [_vehicle];
deleteVehicle _vehicle;
_vehHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot];
_VAL = [];
["Vehicle", _vehHiveKey, _VAL] call EPOCH_fnc_server_hiveSET;
["Vehicle", _vehHiveKey] call EPOCH_fnc_server_hiveDEL;
EPOCH_VehicleSlots pushBack _vehSlot;
missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true];
};

View File

@ -1,281 +0,0 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Description:
Load Vehicles
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_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_actualHitpoints","_allHitpoints","_allVehicles","_arr","_arrNum","_attachments","_class","_color","_colors","_config","_count","_damage","_dataFormat","_dataFormatCount","_diag","_dmg","_found","_hitpoints","_immuneVehicleSpawn","_immuneVehicleSpawnTime","_location","_magazineName","_magazineSize","_magazineSizeMax","_marker","_objQty","_objType","_objTypes","_qty","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_simulationHandler","_textureSelectionIndex","_textures","_vehHiveKey","_vehicle","_vehicleSlotIndex","_wMags","_wMagsArray","_worldspace"];
//[[[end]]]
params [["_maxVehicleLimit",0]];
_diag = diag_tickTime;
_dataFormat = ["", [], 0, [], 0, [], [], 0];
_dataFormatCount = count _dataFormat;
EPOCH_VehicleSlots = [];
_allVehicles = [];
_serverSettingsConfig = configFile >> "CfgEpochServer";
_immuneVehicleSpawn = [_serverSettingsConfig, "immuneVehicleSpawn", false] call EPOCH_fnc_returnConfigEntry;
_removeweapons = [_serverSettingsConfig, "removevehweapons", []] call EPOCH_fnc_returnConfigEntry;
_removemagazinesturret = [_serverSettingsConfig, "removevehmagazinesturret", []] call EPOCH_fnc_returnConfigEntry;
_disableVehicleTIE = [_serverSettingsConfig, "disableVehicleTIE", true] call EPOCH_fnc_returnConfigEntry;
for "_i" from 1 to _maxVehicleLimit do {
_vehicleSlotIndex = EPOCH_VehicleSlots pushBack str(_i);
_vehHiveKey = format ["%1:%2", call EPOCH_fn_InstanceID,_i];
_response = ["Vehicle", _vehHiveKey] call EPOCH_fnc_server_hiveGETRANGE;
if ((_response select 0) == 1 && (_response select 1) isEqualType []) then {
_arr = _response select 1;
_arrNum = count _arr;
if (_arrNum == _dataFormatCount) then {
// Validate and replace invaild data
{
if !((_arr select _forEachIndex) isEqualType _x) then {_arr set[_forEachIndex, _x]};
} forEach _dataFormat;
_class = _arr select 0;
_worldspace = _arr select 1;
_damage = _arr select 2;
if (_class != "" && _damage < 1) then {
_worldspace params [["_location",[]],["_VectorDir",[0,0,0]],["_VectorUp",[0,0,1]],["_useposworld",false]];
if !(_location isEqualTo []) then {
// increased position precision
if (count _location == 2) then{
_location = (_location select 0) vectorAdd (_location select 1);
};
EPOCH_VehicleSlots deleteAt _vehicleSlotIndex;
// temp for changes in class names
_found = ["O_Heli_Transport_04_F","O_Heli_Transport_04_bench_F","O_Heli_Transport_04_box_F","O_Heli_Transport_04_covered_F","B_Heli_Transport_03_unarmed_F","O_Truck_03_covered_F"] find _class;
if (_found != -1) then {
_class = ["O_Heli_Transport_04_EPOCH","O_Heli_Transport_04_bench_EPOCH","O_Heli_Transport_04_box_EPOCH","O_Heli_Transport_04_covered_EPOCH","B_Heli_Transport_03_unarmed_EPOCH","O_Truck_03_covered_EPOCH"] select _found;
};
_vehicle = createVehicle [_class, [random 500, random 500,500], [], 0, "CAN_COLLIDE"];
_allVehicles pushBack _vehicle;
_vehicle call EPOCH_server_setVToken;
if (_useposworld) then {
_vehicle setposWorld _location;
}
else {
_vehicle setposATL _location;
};
_vehicle setVectorDirAndUp [_VectorDir,_VectorUp];
_vehicle setDamage _damage;
_allHitpoints = getAllHitPointsDamage _vehicle;
if !(_allHitpoints isEqualTo []) then{
_actualHitpoints = _allHitpoints select 0;
_hitpoints = _arr select 3;
if ((count _actualHitpoints) == (count _hitpoints)) then{
{
_dmg = _hitpoints param [_forEachIndex,0];
if (_x in ["HitFuel", "HitEngine"]) then {
_dmg = _dmg min 0.9;
};
_vehicle setHitIndex [_forEachIndex, _dmg];
} forEach _actualHitpoints;
};
};
if (_immuneVehicleSpawn) then{
_vehicle allowDamage false;
};
_vehicle setFuel (_arr select 4);
_vehicle call EPOCH_server_vehicleInit;
_config = configFile >> "CfgVehicles" >> _class >> "availableColors";
if (isArray(_config)) then {
_color = _arr select 7;
_colors = getArray(_config);
_textureSelectionIndex = configFile >> "CfgVehicles" >> _class >> "textureSelectionIndex";
_selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] };
_count = (count _colors) - 1;
{
_textures = _colors select 0;
if (_count >= _forEachIndex) then {
_textures = _colors select _forEachIndex;
};
_vehicle setObjectTextureGlobal [_x, _textures select _color];
} forEach _selections;
_vehicle setVariable ["VEHICLE_TEXTURE", _color];
};
clearWeaponCargoGlobal _vehicle;
clearMagazineCargoGlobal _vehicle;
clearBackpackCargoGlobal _vehicle;
clearItemCargoGlobal _vehicle;
if !(_removeweapons isequalto []) then {
{
_vehicle removeWeaponGlobal _x;
} foreach _removeweapons;
};
if !(_removemagazinesturret isequalto []) then {
{
_vehicle removeMagazinesTurret _x;
} foreach _removemagazinesturret;
};
if (_disableVehicleTIE) then {
_vehicle disableTIEquipment true;
};
_vehicle lock true;
_vehicle setVariable ["VEHICLE_SLOT", str(_i), true];
//diag_log format ["FILLING: _vehicle %1 pos: %2", _vehicle, (getPosATL _vehicle)];
{
_objType = _forEachIndex;
_objTypes = _x;
_objQty = [];
if (_objType in [1, 2, 3]) then {
_objTypes = _x select 0;
_objQty = _x select 1;
};
{
switch _objType do {
// Weapon cargo
case 0: {
if (_x isEqualType []) then {
if ((count _x) >= 4) then {
_vehicle addWeaponCargoGlobal[_x deleteAt 0, 1];
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray = _x;
}
else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
// add all attachments to vehicle
// TODO replace with adding attachments directly to gun (Arma feature dependant)
{
_vehicle addItemCargoGlobal[_x, 1];
} forEach _attachments;
if (_wMags) then{
if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{
_vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
};
};
};
};
};
// Magazine cargo
case 1: {
_magazineName = _x;
_magazineSize = _objQty select _forEachIndex;
if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then {
_magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count");
if (_magazineSizeMax >= 1) then {
// Add full magazines cargo
_vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax];
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
_vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)];
};
};
};
};
// Backpack cargo
case 2: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addBackpackCargoGlobal [_x, _qty];
};
};
// Item cargo
case 3: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_vehicle addItemCargoGlobal [_x, _qty];
};
};
};
} forEach _objTypes;
} forEach (_arr select 5);
// remove and add back magazines
if !((_arr select 6) isequalto []) then {
if ((_arr select 6 select 0) isequaltype true) then {
{
_vehicle removeMagazinesTurret [_x select 0, _x select 1];
} foreach magazinesAllTurrets _vehicle;
{
if ((_x select 2) > 0) then {
_vehicle addMagazineTurret [_x select 0,_x select 1,_x select 2];
};
} foreach (_arr select 6 select 1);
}
else {
{_vehicle removeMagazineGlobal _x}count (magazines _vehicle);
{_vehicle addMagazine _x}count (_arr select 6);
};
};
if (EPOCH_DEBUG_VEH) then {
_marker = createMarker [str(_location) , _location];
_marker setMarkerShape "ICON";
_marker setMarkerType "mil_dot";
_marker setMarkerText _class;
_marker setMarkerColor "ColorGreen";
};
};
};
};
};
};
// re-enable damage to vehicles after we wait
if (_immuneVehicleSpawn) then{
_immuneVehicleSpawnTime = [_serverSettingsConfig, "immuneVehicleSpawnTime", 120] call EPOCH_fnc_returnConfigEntry;
[_allVehicles,_immuneVehicleSpawnTime] spawn{
sleep (_this select 1);
{_x allowDamage true} count (_this select 0);
};
};
addToRemainsCollector _allVehicles;
diag_log format ["Epoch: Vehicle SPAWN TIMER %1, LOADED %2 VEHICLES", diag_tickTime - _diag, count _allVehicles];
true

View File

@ -25,6 +25,16 @@
params [["_vehicle",objnull],["_items",[]]];
private ["_subcontainersuffix"];
_subcontainersuffix = [];
if !(_vehicle iskindof "weaponholder") then {
clearweaponcargoglobal _vehicle;
clearitemcargoglobal _vehicle;
clearmagazinecargoglobal _vehicle;
clearbackpackcargoglobal _vehicle;
};
{
_objType = _forEachIndex;
_objTypes = _x;
@ -78,26 +88,23 @@ params [["_vehicle",objnull],["_items",[]]];
};
// Sub-Containers
case 4: {
_type = _x select 0;
_subContainers = (everycontainer _vehicle) select {(_x select 0) isequalto _type && magazinesAmmoCargo (_x select 1) isequalto [] && weaponsItemsCargo (_x select 1) isequalto []};
if !(_subContainers isequalto []) then {
_subContainer = _subContainers select 0 select 1;
[_subContainer,_x select 1] call EPOCH_server_CargoFill;
}
else {
if (_type isKindOf "Bag_Base") then {
_vehicle addBackpackCargoGlobal [_type, 1];
}
else {
_vehicle addItemCargoGlobal [_type, 1];
};
_subContainers = (everycontainer _vehicle) select {(_x select 0) isequalto _type && magazinesAmmoCargo (_x select 1) isequalto [] && weaponsItemsCargo (_x select 1) isequalto []};
if !(_subContainers isequalto []) then {
_subContainer = _subContainers select 0 select 1;
[_subContainer,_x select 1] call EPOCH_server_CargoFill;
};
};
_subcontainersuffix pushback _x;
};
};
} forEach _objTypes;
} forEach _items;
_subContainers = (everycontainer _vehicle);
{
clearweaponcargoglobal (_x select 1);
clearitemcargoglobal (_x select 1);
clearmagazinecargoglobal (_x select 1);
clearbackpackcargoglobal (_x select 1);
} foreach _subContainers;
{
_type = _x select 0;
_subContainers = (everycontainer _vehicle) select {(_x select 0) isequalto _type && magazinesAmmoCargo (_x select 1) isequalto [] && weaponsItemsCargo (_x select 1) isequalto []};
if !(_subContainers isequalto []) then {
_subContainer = _subContainers select 0 select 1;
[_subContainer,_x select 1] call EPOCH_server_CargoFill;
};
} foreach _subcontainersuffix;

View File

@ -29,114 +29,17 @@ if (_class isKindOf 'Constructions_lockedstatic_F') then {
_posWH = getPosATL _unit;
// may not be needed but should prevent <null> in DB.
_wepsItemsCargo = weaponsItemsCargo _unit;
if (isNil "_wepsItemsCargo") then {
_wepsItemsCargo = [];
};
_magsAmmoCargo = magazinesAmmoCargo _unit;
if (isNil "_magsAmmoCargo") then {
_magsAmmoCargo = [];
};
// dump items on ground
_inventory = [
_wepsItemsCargo,
_magsAmmoCargo,
getBackpackCargo _unit,
getItemCargo _unit
];
_inventory = _unit call EPOCH_server_CargoSave;
[_unit, _player] call EPOCH_server_save_killedStorage;
deleteVehicle _unit;
_gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"];
_gwh setPosATL _posWH;
[_gwh,_inventory] call EPOCH_server_CargoFill;
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
_returnItems = getArray(_config >> _class >> "returnOnPack");
{
_gwh addMagazineCargoGlobal _x;
} forEach _returnItems;
{
_objType = _forEachIndex;
_objTypes = _x;
_objQty = [];
if (_objType in[2, 3]) then {
_objTypes = _x select 0;
_objQty = _x select 1;
};
{
switch _objType do {
case 0: {
if (_x isEqualType []) then {
_arrCount = count _x;
if (_arrCount >= 4) then {
_gwh addWeaponCargoGlobal[_x deleteAt 0, 1];
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray = _x;
}
else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
// add all attachments to vehicle
// TODO replace with adding attachments directly to gun (Arma feature dependant)
{
_gwh addItemCargoGlobal[_x, 1];
} forEach _attachments;
if (_wMags) then{
if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{
_gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1];
};
};
};
};
};
case 1: {
if (_x isEqualType []) then {
if ((count _x) == 2) then {
_magazineName = _x select 0;
_magazineSize = _x select 1;
if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then {
_gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize];
};
};
};
};
case 2: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_gwh addBackpackCargoGlobal[_x, _qty];
};
};
case 3: {
if (_x isEqualType "STRING") then {
_qty = _objQty select _forEachIndex;
_gwh addItemCargoGlobal[_x, _qty];
};
};
};
}forEach _objTypes;
}forEach _inventory;
};
};

View File

@ -95,7 +95,6 @@ class CfgServerFunctions
class server_save_killedStorage {};
class server_save_killedBuilding {};
class load_vehicles {};
class load_vehicles_old {};
class load_storage {};
class server_save_storage {};
class spawn_vehicles {};
@ -152,7 +151,7 @@ class CfgServerFunctions
};
class CfgServerVersion
{
client = "1.3.2";
config = "1.3.2";
client = "1.3.3";
config = "1.3.3";
hive = "0.6.0.0";
};

View File

@ -216,11 +216,7 @@ _vehicleSlotLimit = 0;
{_vehicleSlotLimit = _vehicleSlotLimit + (_x select 1)} forEach _allowedVehiclesList;
_ReservedVehSlots = [_serverSettingsConfig, "ReservedVehSlots", 50] call EPOCH_fnc_returnConfigEntry;
_vehicleSlotLimit = _vehicleSlotLimit + _ReservedVehSlots;
if (EPOCH_useOldLoadVehicles) then {
_vehicleSlotLimit call EPOCH_load_vehicles_old;
} else {
_vehicleSlotLimit call EPOCH_load_vehicles;
};
_vehicleSlotLimit call EPOCH_load_vehicles;
diag_log "Epoch: Spawning vehicles";
_allowedVehiclesListArray = [];
{

View File

@ -61,7 +61,6 @@ private _configArray = [
["hiveAdminSavePlayerList", true],
["hiveAdminCmdTime", 5],
["DEBUG_VEH", false],
["useOldLoadVehicles", false],
["enableUnitTestOnStart", 0],
["forcedVehicleSpawnTable",""],
["forcedLootSpawnTable",""]

View File

@ -0,0 +1 @@
epoch_server_core

View File

@ -0,0 +1 @@
epoch_server_debris_event

View File

@ -0,0 +1 @@
epoch_server_events

View File

@ -0,0 +1 @@
epoch_server_settings

View File

@ -20,7 +20,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
epochVersion = "1.3.2";
epochVersion = "1.3.3";
requiredAddons[] = {};
#include "build.hpp"
};

View File

@ -838,7 +838,7 @@ class CfgLootTable
class Pistols_Vanilla
{
items[] = {
{ { "Hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "MultiGun", "weapon" }, 5 },
{ { "hgun_Pistol_heavy_01_F", "weapon" }, 9 },
{ { "hgun_P07_F", "weapon" }, 10 },
@ -1575,7 +1575,13 @@ class CfgLootTable
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
{ { "U_C_Paramedic_01_F", "item" }, 1 },
{ { "U_C_Mechanic_01_F", "item" }, 1 }
{ { "U_C_Mechanic_01_F", "item" }, 1 },
{ { "U_C_IDAP_Man_cargo_F", "item" }, 1 },
{ { "U_C_IDAP_Man_jeans_F", "item" }, 1 },
{ { "U_C_IDAP_Man_TeeShorts_F", "item" }, 1 },
{ { "U_C_IDAP_Man_Tee_F", "item" }, 1 },
{ { "U_C_IDAP_Man_casual_F", "item" }, 1 },
{ { "U_C_IDAP_Man_shorts_F", "item" }, 1 }
};
};
class Uniforms_Male_ApexDLC
@ -1756,7 +1762,7 @@ class CfgLootTable
{ { "V_PlateCarrierSpec_blk", "item" }, 1 },
{ { "V_HarnessO_ghex_F", "item" }, 1 },
{ { "V_HarnessOGL_ghex_F", "item" }, 1 },
{ { "V_PlateCarroer2_tna_F", "item" }, 1 },
{ { "V_PlateCarrier2_tna_F", "item" }, 1 },
{ { "V_PlateCarrierGL_tna_F", "item" }, 1 }
};
};

View File

@ -838,7 +838,7 @@ class CfgLootTable_CUP
class Pistols_Vanilla
{
items[] = {
{ { "Hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "MultiGun", "weapon" }, 5 },
{ { "hgun_Pistol_heavy_01_F", "weapon" }, 9 },
{ { "hgun_P07_F", "weapon" }, 10 },
@ -1575,7 +1575,13 @@ class CfgLootTable_CUP
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
{ { "U_C_Paramedic_01_F", "item" }, 1 },
{ { "U_C_Mechanic_01_F", "item" }, 1 }
{ { "U_C_Mechanic_01_F", "item" }, 1 },
{ { "U_C_IDAP_Man_cargo_F", "item" }, 1 },
{ { "U_C_IDAP_Man_jeans_F", "item" }, 1 },
{ { "U_C_IDAP_Man_TeeShorts_F", "item" }, 1 },
{ { "U_C_IDAP_Man_Tee_F", "item" }, 1 },
{ { "U_C_IDAP_Man_casual_F", "item" }, 1 },
{ { "U_C_IDAP_Man_shorts_F", "item" }, 1 }
};
};
class Uniforms_Male_ApexDLC

View File

@ -838,7 +838,7 @@ class CfgLootTable_MAD
class Pistols_Vanilla
{
items[] = {
{ { "Hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "MultiGun", "weapon" }, 5 },
{ { "hgun_Pistol_heavy_01_F", "weapon" }, 9 },
{ { "hgun_P07_F", "weapon" }, 10 },
@ -1575,7 +1575,13 @@ class CfgLootTable_MAD
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
{ { "U_C_Paramedic_01_F", "item" }, 1 },
{ { "U_C_Mechanic_01_F", "item" }, 1 }
{ { "U_C_Mechanic_01_F", "item" }, 1 },
{ { "U_C_IDAP_Man_cargo_F", "item" }, 1 },
{ { "U_C_IDAP_Man_jeans_F", "item" }, 1 },
{ { "U_C_IDAP_Man_TeeShorts_F", "item" }, 1 },
{ { "U_C_IDAP_Man_Tee_F", "item" }, 1 },
{ { "U_C_IDAP_Man_casual_F", "item" }, 1 },
{ { "U_C_IDAP_Man_shorts_F", "item" }, 1 }
};
};
class Uniforms_Male_ApexDLC

View File

@ -838,7 +838,7 @@ class CfgLootTable_MADCUP
class Pistols_Vanilla
{
items[] = {
{ { "Hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "hgun_Pistol_Signal_F", "weapon" }, 4 },
{ { "MultiGun", "weapon" }, 5 },
{ { "hgun_Pistol_heavy_01_F", "weapon" }, 9 },
{ { "hgun_P07_F", "weapon" }, 10 },
@ -1575,7 +1575,13 @@ class CfgLootTable_MADCUP
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
{ { "U_C_Paramedic_01_F", "item" }, 1 },
{ { "U_C_Mechanic_01_F", "item" }, 1 }
{ { "U_C_Mechanic_01_F", "item" }, 1 },
{ { "U_C_IDAP_Man_cargo_F", "item" }, 1 },
{ { "U_C_IDAP_Man_jeans_F", "item" }, 1 },
{ { "U_C_IDAP_Man_TeeShorts_F", "item" }, 1 },
{ { "U_C_IDAP_Man_Tee_F", "item" }, 1 },
{ { "U_C_IDAP_Man_casual_F", "item" }, 1 },
{ { "U_C_IDAP_Man_shorts_F", "item" }, 1 }
};
};
class Uniforms_Male_ApexDLC

View File

@ -0,0 +1 @@
epoch_server_vip_event

View File

@ -1,6 +1,40 @@
# Change Log
All changes for [Arma 3](https://arma3.com/) [Epoch Mod](https://epochmod.com) are listed in this changelog.
## [1.3.3.0] - 2020-06-03
### Added
- Some Dupe fixes
### Fixed
- In some Cases, Players were not able to use Binocular in cargo of Vehicles by using R3F or AdvSlingLoad
- Player Krypto was not updated in Debug Monitor
- Ground Loot now shows as "ground" instead of "crate" in inventory
- Snappoint for half cinder walls on top was not 100% correct
### Changed
- Some cleanups for no longer needed scripts
- Reduced Server calls for Loot Spawn (but not reduced Loot in general!)
- Replaced Karma by AntagonistKills in Topstats (because Karma is currently broken a bit)
- Better randomize left Vehicles in Traders (Do not only store Vehicles in Trader Slots order)
- Removed Thermal from assembled UAVs (by default)
### Server Owners
- Reworked CfgServicePoint a bit (added Vehicles + smaller tweaks)
- Cleaned up some scripts - more usage of already existing sub functions (EPOCH_server_CargoSave / EPOCH_server_CargoLoad)
- Option in cfgepochclient "SupressBaseSpawnOnHomekillTime" to prevent Base spawn for xxx seconds after BaseKill
- Karma variable is currently broken and caused community stats to not save correctly.
- Community save should be fixed now. Karma is still WIP
- Added a Config "BaseCamOnlyHome" in cfgepochclient to allow Players to use Basecamterminal (from Inventory) outside their Base
- Picture get more and more noisy by distance
- Fixed an issue, that new expansion Backpacks could get doubled on restarts
- Added some more IDAP-Uniforms that don't require the Orange-DLC:
- U_C_IDAP_Man_cargo_F
- U_C_IDAP_Man_jeans_F
- U_C_IDAP_Man_TeeShorts_F
- U_C_IDAP_Man_Tee_F
- U_C_IDAP_Man_casual_F
- U_C_IDAP_Man_shorts_F
## [1.3.2.0] - 2019-11-02
### Added
- Non Lethal Weapons