Merge pull request #999 from EpochModTeam/experimental

Release 1.3.1
This commit is contained in:
vbawol 2019-03-28 11:34:06 -05:00 committed by GitHub
commit 01eabacf75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
94 changed files with 775 additions and 248 deletions

View File

@ -88,6 +88,7 @@ forceRestartTime = 14400; // 4 hour restarts
// BaseBuilding
StorageSlotsLimit = 1500; // Max storage slots allowed. Warning! Higher the number lower performance.
BuildingSlotsLimit = 1500; // Max building slots allowed. Warning! Higher the number lower performance.
AutoLockStorages = "false"; // Auto Lock Lockable Storages on Server Start / Restart (if true, unlocked storages will get locked after restarts)
UseIndestructible = "false"; // Enable / Disable Indestructible BaseObjects
IndestructibleBaseObjects[] = { // Can be Names or Classes
"Constructions_static_F",
@ -107,6 +108,8 @@ forceRestartTime = 14400; // 4 hour restarts
UseDeSimulateObjects = "true"; // Disable Simulation for specifed Base Objects
DeSimulateObjects[] = { // Base Objects to disable Simulation. Can be Names or Classes
"PlotPole_EPOCH",
"PlotPole_L_EPOCH",
"PlotPole_XL_EPOCH",
"WoodFoundation_EPOCH","Foundation_EPOCH",
"WoodQuarterFloor_EPOCH","WoodHalfFloor_EPOCH","WoodFloor_EPOCH",
"MetalQuarterFloor_EPOCH","MetalHalfFloor_EPOCH","MetalFloor_EPOCH",

View File

@ -1 +1 @@
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_(checkplayer|save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player) \[.+\]" !="epoch_server_((upgrade|updateplayer|inviteplayer|create|delete)(Temp|)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(upgrade_vehicle|knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(paycrypto|tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject|fnc_updateplayerstats) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]" !="epoch_server_(setfinalplayerpos|defusebomb) \[.+\]"
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_(checkplayer|save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player) \[.+\]" !="epoch_server_((upgrade|updateplayer|inviteplayer|create|delete)(Temp|)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(upgrade_vehicle|knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(paycrypto|tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject|fnc_updateplayerstats) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]" !="epoch_server_(setfinalplayerpos|defusebomb|putcrypto) \[.+\]"

View File

@ -2,12 +2,12 @@
5 "BIS_fnc_dynamictext" !="\"BIS_fnc_dynamictext\"" !="'BIS_fnc_dynamictext'"
5 forceRespawn !="ForceRespawnDuration" !="reviveHandleForceRespawnAction" !="forcerespawn player;"
5 setWeaponReloadingTime !="_unit setWeaponReloadingTime [_unit,_weapon,1];" !="_unit setWeaponReloadingTime [_unit,_weapon,1];" !="player fire [_muzzle, _muzzle, _item];\nplayer setWeaponReloadingTime [player, _muzzle, 0];"
5 allMissionObjects !="[\"Epoch_Plotpoles\",allmissionobjects 'PlotPole_EPOCH']" !="allMissionObjects \"Timeline_F\""
5 allMissionObjects !="[\"Epoch_Plotpoles\",allmissionobjects 'PlotPole_EPOCH']" !="allMissionObjects \"Timeline_F\"" !="_allplots append (allmissionobjects _x)"
5 showCommandingMenu !="showCommandingMenu '';" !="showCommandingMenu '#USER:"
5 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" !="_this select 0 setvelocity (_this select 1)" !="_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];" !="_smokeg setVelocity _Gvel;"
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;"
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 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]"
@ -23,16 +23,16 @@
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 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\";"
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';"
5 createDisplay !="createDisplay \"rmx_dynamenu\";" !="createDisplay \"rmx_moveDynamicHUD\";" !="_parent createdisplay _displayClass;" !="finddisplay 151 createdisplay 'RscDisplayOptionsLayout'" !="_display createdisplay \"RscDisplayDLCPreview\";"
5 deleteMarker !="deleteMarkerLocal _mName;"
5 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent" !="_mName setMarkerShapeLocal _mShape;" !="_mName setMarkerTypeLocal _mType;" !="(_x select 0) setMarkerPosLocal (position player);" !="_zoomMarker setMarkerSizeLocal"
5 createMarker !="CBA_fnc_createMarker\"" !="\\fnc_createMarker" !="\"createMarker" !="cba_fCreateMarker" !="createMarkerLocal [_mName, _mPos];"
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)"
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\""
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\","
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 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

View File

@ -109,7 +109,6 @@ class FSM
"_checkFreq = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""reflexSpeed"");" \n
"_welcomeWait = random 4;" \n
"_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n
"_jammerRange = getNumber(_config >> ""buildingJammerRange"");" \n
"_zSmell = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""smell"");" \n
"_zSight = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""sight"");" \n
"_zHear = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""hearing"");" \n
@ -251,7 +250,6 @@ class FSM
"axeDebug = _doDebug ;" \n
"if(_doDebug)then{" \n
"axeDebug = true;" \n
"_jammerRange = 75;" \n
"axeZed = _zombie;" \n
"_debugDo = ""START"";" \n
"_mkrName = """";" \n

View File

@ -1076,7 +1076,7 @@ class FSM
"if (_playerCheck) then {" \n
" _PlayerPosCheck = !((_playerObject getVariable [""FinalDest"",[]]) isequalto []);" \n
" if (_PlayerPosCheck) then {" \n
" _playerCheckMass = (_loadabs == (loadabs _playerObject));" \n
" _playerCheckMass = ((_loadabs toFixed 2) isEqualTo ((loadabs _playerObject) toFixed 2));" \n
" if (_playerCheckMass) then {" \n
" _state = true;" \n
" };" \n

View File

@ -12,12 +12,15 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_CamUse.sqf
*/
private ["_mycams","_buildingJammerRange","_curcam"];
private ["_mycams","_curcam"];
_mycams = EPOCH_BaseCams select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]};
if (["CfgEpochClient", "BaseCamOnlyHome",true] call EPOCH_fnc_returnConfigEntryV2) then {
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange",75] call EPOCH_fnc_returnConfigEntryV2;
_mycams = _mycams select {!(((nearestobjects [_x,["Plotpole_EPOCH"],_buildingJammerRange]) select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]}) isequalto [])};
_mycams = _mycams select {
_cam = _x;
_jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {_cam distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
!((_jammer select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]}) isequalto [])
};
};
if !(_mycams isequalto []) then {
_curcam = _mycams find Epoch_ActiveCam;

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_consumeItem.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_buildClass","_buildingCountLimit","_buildingJammerRange","_canCapacity","_cfgBaseBuilding","_cfgItemInteractions","_color","_currentDMG","_currentFuel","_currentHIT","_fuelCapacity","_ghostClass","_highestDMG","_inputCount","_interactAttributes","_interactOption","_interactReturnOnUse","_isOk","_isStorage","_magazineSize","_magazineSizeMax","_magazinesAmmoFull","_msg","_newDMG","_newFuel","_object","_otherObjects","_output","_paintCanColor","_paintCanIndex","_partCheck","_pos","_removeItem","_transportFuel","_unifiedInteract","_vehicle","_vehicles"];
private ["_buildClass","_buildingCountLimit","_canCapacity","_cfgBaseBuilding","_cfgItemInteractions","_color","_currentDMG","_currentFuel","_currentHIT","_fuelCapacity","_ghostClass","_highestDMG","_inputCount","_interactAttributes","_interactOption","_interactReturnOnUse","_isOk","_isStorage","_magazineSize","_magazineSizeMax","_magazinesAmmoFull","_msg","_newDMG","_newFuel","_object","_otherObjects","_output","_paintCanColor","_paintCanIndex","_partCheck","_pos","_removeItem","_transportFuel","_unifiedInteract","_vehicle","_vehicles"];
//[[[end]]]
EPOCH_InteractedItem params ["_text","_item","_pic"];
@ -114,8 +114,6 @@ switch _interactOption do {
case 2: _unifiedInteract; //Drink 2
case 3: { // Build 3
closeDialog 0;
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_buildingCountLimit = ["CfgEpochClient", "buildingCountLimit", 200] call EPOCH_fnc_returnConfigEntryV2;
_partCheck = _item in (magazines player);
_buildClass = getText(_cfgItemInteractions >> "buildClass");
@ -141,7 +139,7 @@ switch _interactOption do {
if (_buildClass isKindOf "ThingX") then {
// prevent spawning if another simulated object exists still
_otherObjects = nearestObjects[player, [_buildClass], _buildingJammerRange];
_otherObjects = nearestObjects[player, [_buildClass], 100];
if (_otherObjects isEqualTo []) then {
_object=createVehicle[_buildClass,_pos,[],0,"CAN_COLLIDE"];
_object setDir ((getDir player) - 180);

View File

@ -91,8 +91,7 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
};
if (!isNull _bankTerminal) then {
_AtmBlockedAtPlot = ["CfgEpochClient", "AtmBlockedAtPlot", false] call EPOCH_fnc_returnConfigEntryV2;
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
_jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
if (!(_jammer isequalto []) && _AtmBlockedAtPlot) exitwith {
["Bank Terminal blocked by Jammer Signal",5] call Epoch_Message;
};

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_aiskill","_arrSkills","_arrUnits","_arrVals","_bomb","_config","_currentLimit","_disableAI","_driver","_grp","_index","_jammerRange","_jammers","_loop","_minAISkill","_missionConfig","_nonJammer","_nonTrader","_nonTraderAIRange","_playerSpawnArray","_playerSpawnArrayKeyFinal","_pos","_restricted","_sapperHndl","_sapperNum","_spawnLimit","_targetPos","_unit","_units"];
private ["_aiskill","_arrSkills","_arrUnits","_arrVals","_bomb","_config","_currentLimit","_disableAI","_driver","_grp","_index","_jammers","_loop","_minAISkill","_missionConfig","_nonJammer","_nonTrader","_nonTraderAIRange","_playerSpawnArray","_playerSpawnArrayKeyFinal","_pos","_restricted","_sapperHndl","_sapperNum","_spawnLimit","_targetPos","_unit","_units"];
//[[[end]]]
params ["_unitClass",["_trgt",player],["_doVariable",false],["_unitCount",1],["_extraData",[]] ];
@ -41,9 +41,7 @@ _unit = objNull;
_targetPos = getPosATL _trgt;
_targetPos set [2,0];
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_jammerRange = getNumber(_config >> "buildingJammerRange");
_jammers = nearestObjects[_targetPos, ["PlotPole_EPOCH"], _jammerRange];
_jammers = (nearestObjects[_targetPos, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {_targetPos distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
if(!(_jammers isEqualTo []) && (_unitClass in _nonJammer))exitWith{};
_restricted = nearestObjects [_targetPos, ["ProtectionZone_Invisible_F"], _nonTraderAIRange];

View File

@ -23,7 +23,7 @@
BOOL
*/
//[[[cog import generate_private_arrays ]]]
private ["_StorageClasses","_BuildingClasses","_CamCountLimit","_alljammer","_buildingAllowed","_buildingCountLeader","_buildingCountLimit","_buildingCountPerMember","_buildingJammerRange","_bypassJammer","_c","_cfgBaseBuilding","_config","_ghostClass","_isAllowed","_jammer","_jammerGLOnly","_jammerPerGroup","_limitNearby","_maxBuildingHeight","_membercount","_minJammerDistance","_myPosATL","_nearestJammer","_obj","_objType","_objectscount","_ownedJammerExists","_range","_restricted","_restrictedArray","_restrictedLocations","_restrictedLocationsArray","_restrictedLocationsRange","_simulClass","_staticClass","_storageCountLeader","_storageCountLimit","_storageCountPerMember","_useGroupCountLimits","_useSplitCountLimits"];
private ["_StorageClasses","_BuildingClasses","_CamCountLimit","_alljammer","_buildingAllowed","_buildingCountLeader","_buildingCountLimit","_buildingCountPerMember","_buildingJammerRange","_bypassJammer","_c","_cfgBaseBuilding","_config","_ghostClass","_isAllowed","_jammer","_jammerGLOnly","_jammerPerGroup","_limitNearby","_maxBuildingHeight","_membercount","_myPosATL","_nearestJammer","_obj","_objType","_objectscount","_ownedJammerExists","_range","_restricted","_restrictedArray","_restrictedLocations","_restrictedLocationsArray","_restrictedLocationsRange","_simulClass","_staticClass","_storageCountLeader","_storageCountLimit","_storageCountPerMember","_useGroupCountLimits","_useSplitCountLimits"];
//[[[end]]]
_buildingAllowed = true;
@ -38,32 +38,21 @@ if (vehicle player != player)exitWith{["Building Disallowed: Inside Vehicle", 5]
// defaults
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_JammerConfig = (_config >> "CfgJammers");
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
_buildingCountLimit = getNumber(_config >> "buildingCountLimit");
_storageCountLimit = getNumber(_config >> "storageCountLimit");
_buildingCountLeader = getNumber(_config >> "buildingCountLeader");
_buildingCountPerMember = getNumber(_config >> "buildingCountPerMember");
_storageCountLeader = getNumber(_config >> "storageCountLeader");
_storageCountPerMember = getNumber(_config >> "storageCountPerMember");
_minJammerDistance = getNumber(_config >> "minJammerDistance");
_maxBuildingHeight = getNumber(_config >> "maxBuildingHeight");
_jammerPerGroup = getNumber(_config >> "jammerPerGroup");
_CamCountLimit = getNumber(_config >> "maxCams");
if(getNumber(_config >> "useGroupCountLimits") == 0)then{_useGroupCountLimits=false};
if(getNumber(_config >> "splitCountLimits") == 1)then{_useSplitCountLimits=true};
if(getNumber(_config >> "jammerGLOnly") == 0)then{_jammerGLOnly=false};
if(_buildingJammerRange == 0)then{_buildingJammerRange = 75};
if(_buildingCountLimit == 0)then{_buildingCountLimit = 200};
if(_buildingCountLeader == 0)then{_buildingCountLeader = _buildingCountLimit};
if(_storageCountLeader == 0)then{_storageCountLeader = 100};
if(_minJammerDistance == 0)then{_minJammerDistance = _buildingJammerRange*3};
if(_maxBuildingHeight == 0)then{_maxBuildingHeight = 100};
if(_jammerPerGroup == 0)then{_jammerPerGroup = 2};
if(_CamCountLimit == 0)then{_CamCountLimit = 2};
_StorageClasses = ["Buildable_Storage","Buildable_Storage_SIM","Buildable_Storage_Ghost","Constructions_lockedstatic_F","Secure_Storage_Temp"];
_BuildingClasses = ["Constructions_static_F","Constructions_foundation_F","Const_Ghost_EPOCH"];
_StorageClasses = ["CfgEpochClient", "StorageClasses", ["Buildable_Storage","Buildable_Storage_SIM","Buildable_Storage_Ghost","Constructions_lockedstatic_F","Secure_Storage_Temp"]] call EPOCH_fnc_returnConfigEntryV2;
_BuildingClasses = ["CfgEpochClient", "BuildingClasses", ["Constructions_static_F","Constructions_foundation_F","Const_Ghost_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2;
_minJammerDistance = ["CfgEpochClient", "minJammerDistance", 650] call EPOCH_fnc_returnConfigEntryV2;
_maxBuildingHeight = ["CfgEpochClient", "maxBuildingHeight", 100] call EPOCH_fnc_returnConfigEntryV2;
_jammerPerGroup = ["CfgEpochClient", "jammerPerGroup", 1] call EPOCH_fnc_returnConfigEntryV2;
_JammerClasses = call EPOCH_JammerClasses;
_JammerGhosts = call EPOCH_JammerGhosts;
_JammerCheckClasses = _JammerClasses + _JammerGhosts;
// input
params ["_objType"];
@ -79,9 +68,9 @@ _ghostClass = getText(_cfgBaseBuilding >> _objType >> "GhostPreview");
_bypassJammer = getNumber(_cfgBaseBuilding >> _staticClass >> "bypassJammer");
// Jammer
_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _minjammerdistance];
_jammer = (nearestObjects[player, _JammerCheckClasses, _minJammerDistance]-[_obj]);
if !(_jammer isEqualTo []) then {
if (_objType in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then {
if (_objType in _JammerCheckClasses) then {
{
if (alive _x) exitWith{
_buildingAllowed = false;
@ -91,8 +80,9 @@ if !(_jammer isEqualTo []) then {
}
else {
{
if (alive _x && (_x distance player) <= _buildingJammerRange) exitWith{
if (alive _x && player distance _x < (getnumber (_JammerConfig >> (typeof _x) >> "buildingJammerRange"))) exitWith{
_nearestJammer = _x;
_JammerConfig = (_JammerConfig >> (typeof _nearestJammer));
};
} foreach _jammer;
if !(isNull _nearestJammer) then {
@ -101,19 +91,20 @@ if !(_jammer isEqualTo []) then {
["Building Disallowed: Frequency Blocked", 5] call Epoch_message;
};
_ownedJammerExists = true;
if(_useGroupCountLimits)then{
_membercount = 0;
Epoch_my_Group params [
["_groupName",""],
["_leaderName",""],
["_groupSize",0],
["_modArray",[]],
["_memberArray",[]]
];
_membercount = count _modArray + count _memberArray;
_storageCountLimit = _storageCountLeader + (_storageCountPerMember * _membercount);
_buildingCountLimit = _buildingCountLeader + (_buildingCountPerMember * _membercount);
};
_membercount = 0;
Epoch_my_Group params [
["_groupName",""],
["_leaderName",""],
["_groupSize",0],
["_modArray",[]],
["_memberArray",[]]
];
_membercount = count _modArray + count _memberArray;
_buildingJammerRange = getnumber (_JammerConfig >> "buildingJammerRange");
_storageCountLimit = (getnumber (_JammerConfig >> "storageCountLimit")) + ((getnumber (_JammerConfig >> "storageCountPerMember")) * _membercount);
_buildingCountLimit = (getnumber (_JammerConfig >> "buildingCountLimit")) + ((getnumber (_JammerConfig >> "buildingCountPerMember")) * _membercount);
_CamCountLimit = getnumber (_JammerConfig >> "maxCams");
if (_useSplitCountLimits) then {
if({_objType iskindof _x} count _StorageClasses > 0) then {
if ((count (nearestObjects[_nearestJammer,_StorageClasses,_buildingJammerRange]-[_obj])) >= _storageCountLimit) exitwith {
@ -148,7 +139,7 @@ if !(_jammer isEqualTo []) then {
};
}
else {
if (_objType in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then {
if (_objType in _JammerCheckClasses) then {
if (!(EPOCH_my_groupUID isequalto "") && !((getplayeruid player) isequalto EPOCH_my_groupUID) && _jammerGLOnly) exitwith {
_buildingAllowed = false;
["The Group Leader must place the Jammer!", 5] call Epoch_message;
@ -158,7 +149,7 @@ else {
if ((_x getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
_c = _c+1;
};
} foreach (missionnamespace getvariable ["Epoch_Plotpoles",allmissionobjects 'PlotPole_EPOCH']);
} foreach (missionnamespace getvariable ["Epoch_Plotpoles",call {_allplots = [];{_allplots append (allmissionobjects _x)} foreach (call EPOCH_JammerClasses);_allplots}]);
if (_c >= _jammerPerGroup) then {
_buildingAllowed = false;
[format["Building Disallowed: Max %1 Jammer per Group!", _jammerPerGroup], 5] call Epoch_message;
@ -173,7 +164,7 @@ if (!_ownedJammerExists) then{
if (_limitNearby > 0) then{
// remove current target from objects
_objectscount = count (nearestObjects[player, [_staticClass, _simulClass], _buildingJammerRange]-[_obj]);
_objectscount = count (nearestObjects[player, [_staticClass, _simulClass], 100]-[_obj]);
if (_objectscount >= _limitNearby) then{
_buildingAllowed = false;
[format["Building Disallowed: Limit %1", _limitNearby], 5] call Epoch_message;
@ -184,7 +175,7 @@ if !(_buildingAllowed)exitWith{ false };
// require jammer check if not found as owner of jammer
if (getNumber(_config >> "buildingRequireJammer") == 1 && _bypassJammer == 0) then{
if !(_objType in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then {
if !(_objType in _JammerCheckClasses) then {
_buildingAllowed = _ownedJammerExists;
if !(_buildingAllowed) then {
["Building Disallowed: Frequency Jammer Needed", 5] call Epoch_message;

View File

@ -22,14 +22,10 @@
BOOL
*/
//[[[cog import generate_private_arrays ]]]
private ["_buildingJammerRange","_config","_jammed","_jammer"];
private ["_jammed","_jammer"];
//[[[end]]]
_config = "CfgEpochClient" call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
_jammer = nearestObjects[cameraon, ["PlotPole_EPOCH"], _buildingJammerRange];
_jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
_jammed = false;
if !(_jammer isEqualTo[]) then {
{

View File

@ -22,13 +22,12 @@
NOTHING
*/
//[[[cog import generate_private_arrays ]]]
private ["_buildingJammerRange","_config","_maintainCount","_rnd"];
private ["_buildingJammerRange","_maintainCount","_rnd"];
//[[[end]]]
if !(isNil "EPOCH_maintainLockout") exitWith {["Already Maintaining a base.", 5] call Epoch_message;};
if (EPOCH_playerCrypto > 0) then {
_config = "CfgEpochClient" call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_config >> "buildingJammerRange");
_buildingJammerRange = getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _this) >> "buildingJammerRange");;
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
_maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange];

View File

@ -22,19 +22,12 @@
BOOL - true if removed
*/
//[[[cog import generate_private_arrays ]]]
private ["_buildingAllowed","_buildingCountLimit","_buildingJammerRange","_config","_jammer","_nearestJammer","_objType","_ownedJammerExists","_removeParts","_return","_stability","_targeter"];
private ["_buildingAllowed","_jammer","_nearestJammer","_objType","_ownedJammerExists","_removeParts","_return","_stability","_targeter"];
//[[[end]]]
_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 = 0;
@ -57,14 +50,14 @@ if (_stability > 0) exitWith{
};
};
if (_objType == "PlotPole_EPOCH") then {
if (_objType in (call EPOCH_JammerClasses)) then {
if ((_object getVariable["BUILD_OWNER", "-1"]) != getPlayerUID player) then{
_buildingAllowed = false;
["Remove Disallowed: Frequency Blocked", 5] call Epoch_message;
};
}
else {
_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
_jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
if !(_jammer isEqualTo[]) then{
{
if (alive _x) exitWith{

View File

@ -23,7 +23,7 @@
NOTHING
*/
//[[[cog import generate_private_arrays ]]]
private ["_buildingAllowed","_buildingCountLimit","_buildingJammerRange","_canUpgrade","_canUpgradePartCount","_config","_config2","_countdoors","_countgates","_doors","_gates","_jammer","_maxdoors","_maxgates","_missingCount","_missingParts","_nearestJammer","_ownedJammerExists","_part","_partCheck","_removedPartCount","_req","_return","_stability","_targeter","_upgrade","_upgradeParts","_upgrades","_upgradeto"];
private ["_buildingAllowed","_canUpgrade","_canUpgradePartCount","_config","_config2","_countdoors","_countgates","_doors","_gates","_jammer","_maxdoors","_maxgates","_missingCount","_missingParts","_nearestJammer","_ownedJammerExists","_part","_partCheck","_removedPartCount","_req","_return","_stability","_targeter","_upgrade","_upgradeParts","_upgrades","_upgradeto","_buildingJammerRange","_JammerConfig","_CryptoCosts"];
//[[[end]]]
params [
["_object",objNull,[objNull]],
@ -37,13 +37,6 @@ 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;
@ -58,38 +51,25 @@ if (_stability > 0) exitWith{
};
};
_jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange];
_jammer = (nearestObjects[_object, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {alive _x && {_object distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "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;
["Upgrade Disallowed: Frequency Blocked", 5] call Epoch_message;
};
};
_nearestJammer = _jammer select 0;
if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
_ownedJammerExists = true;
}
else {
_buildingAllowed = false;
["Upgrade Disallowed: Frequency Blocked", 5] call Epoch_message;
};
};
if !(_buildingAllowed)exitWith{ false };
if (_object isKindOf "Constructions_static_F") then {
if (_object isKindOf "Constructions_static_F" || {(typeof _object) in (call EPOCH_JammerClasses)}) then {
// take upgrade item from player here
_config = 'CfgBaseBuilding' call EPOCH_returnConfig;
_config2 = 'CfgEpochClient' call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_config2 >> "buildingJammerRange");
_maxdoors = getNumber(_config2 >> "maxdoors");
_maxgates = getNumber(_config2 >> "maxgates");
if (_buildingJammerRange == 0) then {_buildingJammerRange = 150};
if (_maxdoors == 0) then {_maxdoors = 12};
if (_maxgates == 0) then {_maxgates = 10};
_config2 = getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _object);
_upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding");
if !(_upgrades isEqualTo []) then {
@ -102,10 +82,17 @@ if (_object isKindOf "Constructions_static_F") then {
_canUpgrade = true;
_canUpgradePartCount = 0;
_missingParts = "Missing: ";
_CryptoCosts = 0;
{
_part = _x select 0;
_req = _x select 1;
_partCheck = {_x == _part} count (magazines player);
_partCheck = if (_part IsEqualTo "Krypto") then {
_CryptoCosts = _CryptoCosts + _req;
EPOCH_PlayerCrypto
}
else {
{_x == _part} count (magazines player)
};
if (_partCheck < _req) then {
_missingCount = _req - _partCheck;
@ -116,9 +103,16 @@ if (_object isKindOf "Constructions_static_F") then {
_canUpgradePartCount = _canUpgradePartCount + _req;
} forEach _upgradeParts;
_doors = ["WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH","WoodStairs3_EPOCH","JailWallDoor_EPOCH"];
_gates = ["CinderWallGarage_EPOCH","WoodWallGarage_EPOCH","MetalWallGarage_EPOCH"];
if (_canUpgrade) then {
_doors = ["CfgEpochClient", "DoorClasses", ["WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH","WoodStairs3_EPOCH","JailWallDoor_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2;
_gates = ["CfgEpochClient", "GateClasses", ["CinderWallGarage_EPOCH","WoodWallGarage_EPOCH","MetalWallGarage_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2;
_JammerConfig = getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _nearestJammer);
_buildingJammerRange = getnumber (_JammerConfig >> "buildingJammerRange");
_maxdoors = getnumber (_JammerConfig >> "maxdoors");
_maxgates = getnumber (_JammerConfig >> "maxgates");
if (_maxdoors == 0) then {_maxdoors = 12};
if (_maxgates == 0) then {_maxgates = 10};
_upgradeto = _upgrade select 0;
if (_upgradeto in _doors) then {
_countdoors = count (nearestobjects [_nearestJammer,_doors,_buildingJammerRange]);
@ -139,17 +133,23 @@ if (_object isKindOf "Constructions_static_F") then {
_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;
_x params ["_part","_req"];
if !(_part IsEqualTo "Krypto") then {
for "_i" from 1 to _req do {
if (_part in (magazines player)) then {
player removeMagazine _part;
_removedPartCount = _removedPartCount + 1;
};
};
}
else {
_removedPartCount = _removedPartCount + _req;
};
} forEach _upgradeParts;
if (_canUpgradePartCount == _removedPartCount) then {
// send to server for upgrade
[_object,player,Epoch_upgradeIndex,Epoch_personalToken] remoteExec ["EPOCH_server_upgradeBUILD",2];
[_object,player,Epoch_upgradeIndex,Epoch_personalToken,_CryptoCosts] remoteExec ["EPOCH_server_upgradeBUILD",2];
Epoch_upgradeIndex = nil;
_return = true;
["Upgraded", 5] call Epoch_message;

View File

@ -52,14 +52,17 @@ else {
_savecontainer = _sec;
};
};
if (!isnull _savecontainer && !_blocked) then {
if (!_blocked) then {
_savecontainer spawn {
waituntil {!isnull (findDisplay 602)};
while {!isnull (findDisplay 602)} do {
_stored = [itemcargo _this, magazinecargo _this, backpackcargo _this];
waituntil {uisleep 0.5; !(_stored isequalto [itemcargo _this, magazinecargo _this, backpackcargo _this]) || isnull (findDisplay 602)};
if !(_stored isequalto [itemcargo _this, magazinecargo _this, backpackcargo _this]) then {
_this call EPOCH_interact;
call EPOCH_CryptoButtons;
if (!isnull _this) then {
while {!isnull (findDisplay 602)} do {
_stored = [itemcargo _this, magazinecargo _this, backpackcargo _this];
waituntil {uisleep 0.5; !(_stored isequalto [itemcargo _this, magazinecargo _this, backpackcargo _this]) || isnull (findDisplay 602)};
if !(_stored isequalto [itemcargo _this, magazinecargo _this, backpackcargo _this]) then {
_this call EPOCH_interact;
};
};
};
};

View File

@ -29,4 +29,9 @@ if (_unit == player) then {
1 fadeSound 0.15;
};
};
if (_vehicle getvariable ["Vehicle_Slot","-1"] isequalto "-1") then {
if (!(_vehicle iskindof "Paraglide") && !(_vehicle iskindof "Ejection_Seat_Base_F")) then {
['WARNING! This is a temp Vehicle and will despawn after Restart!',5] call Epoch_Message;
};
};
};

View File

@ -0,0 +1,47 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Description:
Run scheduled animations on objects
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_AnimateScheduled.sqf
Example:
[
_object, // object
[ // animationarray
['door1',1],
['door2',1],
['handle1',1],
['handle2',1]
],
[0,1,0] // delays
] remoteexec ['EPOCH_fnc_AnimateScheduled',_player];
Parameter(s):
_this select 0: OBJ - Object for the animations
_this select 1: ARRAY - Array of animations and their final state
_this select 2: ARRAY - Array of delays between each animation
Returns:
NOTHING
*/
private ["_ins","_target"];
params [["_object",objnull], ["_animarray",[]], ["_delays",[]]];
if (isnull _object) exitwith {};
if !(_animarray isEqualType []) exitwith {};
if !(_delays isEqualType []) exitwith {};
{
if (_x isEqualType []) then {
_x params [["_animation",""],["_state",0]];
_object animate [_animation,_state];
uisleep (_delays param [_foreachindex,0]);
};
} foreach _animarray;

View File

@ -0,0 +1,82 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description: Adds a Slider into the inventory to put Crypto on the Ground
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_CryptoButtons.sqf
Usage:
on opened Inventory: call EPOCH_CryptoButtons
RETURNS: NOTHING
*/
private ["_display","_ctrl_ground","_ContainerBG","_PlayerBg","_ContainerBgPos","_ctrl_groundPos","_PlayerBgPos","_KryptoButton","_border","_slider1","_KryptoText"];
_display = finddisplay 602;
_ctrl_ground = _display displayCtrl 6321;
_ContainerBG = _display displayCtrl 1001;
_PlayerBg = _display displayCtrl 1002;
_ContainerBgPos = ctrlPosition _ContainerBG;
_ctrl_groundPos = ctrlPosition _ctrl_ground;
_PlayerBgPos = ctrlPosition _PlayerBG;
_KryptoButton = _display ctrlCreate['RSCButton', -1];
_KryptoButton ctrlSetPosition [
(_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2,
(_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5 + (_ctrl_groundPos select 3)/2*0,
(_ContainerBgPos select 2)/2,
(_ctrl_groundPos select 3)*1.5
];
_KryptoButton ctrlCommit 0;
_KryptoButton ctrlSetText 'Crypto to Ground';
_KryptoButton ctrlsettextcolor [1,1,0,1];
_KryptoButton ctrlEnable true;
_KryptoButton ctrlSetEventHandler ["ButtonClick","_slider = ((finddisplay 602) displayCtrl 654001);_sliderPos = sliderPosition _slider;_value = round (epoch_playercrypto * (_sliderPos/10)); if (_value > 0 && _value <= Epoch_PlayerCrypto) then {finddisplay 602 closedisplay 0; [player,_value,Epoch_personalToken] remoteexec ['EPOCH_server_PutCrypto',2]};"];
_border = _display ctrlCreate['RscFrame', -1];
_border ctrlSetPosition [
(_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2,
(_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5 + (_ctrl_groundPos select 3)/2*0,
(_ContainerBgPos select 2)/2,
(_ctrl_groundPos select 3)*1.5
];
_border ctrlCommit 0;
_slider1 = _display ctrlCreate['RscXSliderH', 654001];
_slider1 ctrlSetPosition [
(_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2,
(_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5*2,
(_ContainerBgPos select 2)/2,
(_ctrl_groundPos select 3)*0.75
];
_slider1 ctrlCommit 0;
_KryptoText = _display ctrlCreate['RSCText', 654002];
_KryptoText ctrlSetPosition [
(_PlayerBgPos select 0)+(_PlayerBgPos select 2) + (_ctrl_groundPos select 3)/2,
(_ContainerBgPos select 1) + (_ctrl_groundPos select 3)*1.5*2 + (_ctrl_groundPos select 3)*0.75,
(_ContainerBgPos select 2)/2,
(_ctrl_groundPos select 3)*0.75
];
_KryptoText ctrlSetBackgroundColor [0,0,0,1];
[] spawn {
disableSerialization;
_display = finddisplay 602;
_slider1 = (_display displayCtrl 654001);
_KryptoText = (_display displayCtrl 654002);
_slider1 sliderSetPosition 0;
while {!isNull _display} do {
_sliderPos = sliderPosition _slider1;
_value = round (epoch_playercrypto * (_sliderPos/10));
_KryptoText ctrlSetText format['Put %1 Crypto',_value];
_KryptoText ctrlCommit 0;
uiSleep 0.1;
};
};

View File

@ -62,6 +62,10 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
if !(isNil "_playerBloodPKey") then {_playerBloodPKeyFinal = _playerBloodPKey};
missionNamespace setVariable [_playerBloodPKeyFinal, 120];
_playerToxicityKeyFinal = "EPOCH_playerToxicity";
if !(isNil "_playerToxicityKey") then {_playerToxicityKeyFinal = _playerToxicityKey};
missionNamespace setVariable [_playerToxicityKeyFinal, 0];
// Wait until _playerObject is local before adding Rating and EH's
waituntil {local _playerObject};

View File

@ -31,7 +31,7 @@ if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then {
if (_cursorTarget isKindOf "AllVehicles") then {
_currentTarget = _cursorTarget;
} else {
if (_cursorTarget isKindOf "Constructions_modular_F" || _cursorTarget isKindOf "Constructions_static_F") then {
if (_cursorTarget isKindOf "Constructions_modular_F" || {_cursorTarget isKindOf "Constructions_static_F"} || {(typeof _cursorTarget) in (call Epoch_JammerClasses)}) then {
_currentTargetMode = 1;
_currentTarget = _cursorTarget;
};

View File

@ -206,7 +206,6 @@ missionNamespace setVariable [_playerSpawnArrayKey, _playerSpawnArray];
} forEach assignedItems player;
// lootBubble Init
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig;
_lootClasses = [];
@ -276,7 +275,7 @@ _lootBubble = {
_objects resize 4;
};
// diag_log format["DEBUG: loot objects %1",_objects];
_jammer = (_lootLoc nearObjects ["PlotPole_EPOCH", _buildingJammerRange + 50]) + (_lootLoc nearObjects ["ProtectionZone_Invisible_F", 25]);
_jammer = ((nearestObjects [_lootLoc, call EPOCH_JammerClasses, ((call EPOCH_MaxJammerRange) + 50)]) select {_x distance _lootLoc < ((getnumber (getmissionconfig "cfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))+50)}) + (_lootLoc nearObjects ["ProtectionZone_Invisible_F", 25]);
if (!(_objects isEqualTo[]) && (_jammer isEqualTo[])) then {
_building = selectRandom _objects;
if (_building getvariable ["EPOCH_Skiploot",false]) exitwith {};

View File

@ -1,17 +1,27 @@
//[[[cog import generate_private_arrays ]]]
private ["_getCrypto"];
private ["_nearCrypto","_CryptoItems","_getCrypto","_addmoney"];
//[[[end]]]
if !(isNil "EPOCH_takeCryptoLock") exitWith {};
EPOCH_takeCryptoLock = true;
if (!isNull _this) then {
_getCrypto = _this getVariable["Crypto", 0];
if (_getCrypto > 0) then {
[player, Epoch_personalToken, _this] remoteExec ["EPOCH_server_takeCrypto",2];
[format["You found %1 Crypto", _getCrypto], 5] call Epoch_message;
} else {
["No Crypto found", 5] call Epoch_message;
_nearCrypto = (nearestobjects [player,[],5]) select {(_x getvariable ["Crypto",0]) > 0};
_CryptoItems = [];
_getCrypto = 0;
{
_addmoney = (_x getvariable ['Crypto',0]);
if (_addmoney > 0) then {
_CryptoItems pushback _x;
};
_getCrypto = _getCrypto + _addmoney;
} foreach _nearCrypto;
if (_getCrypto > 0) then {
[player, Epoch_personalToken, _CryptoItems] remoteExec ["EPOCH_server_takeCrypto",2];
[format['You found %1 Crypto', _getCrypto], 5] call Epoch_message;
}
else {
['No Crypto found', 5] call Epoch_message;
};
[] spawn{
uiSleep 2;
EPOCH_takeCryptoLock = nil;

View File

@ -13,10 +13,12 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_currentDMG"];
private ["_currentDMG","_god"];
//[[[end]]]
params ["_vehicle","_value"];
if (local _vehicle) then {
_god = !(isDamageAllowed _vehicle);
if (_god) then {_vehicle allowdamage true;};
{
if ((_x select 0) isequaltype 0) then {
_vehicle setHitIndex [_x select 0, _x select 1];
@ -25,6 +27,7 @@ if (local _vehicle) then {
_vehicle setHitPointDamage [_x select 0, _x select 1];
};
} foreach _value;
if (_god) then {_vehicle allowdamage false;};
if !({_x > 0} count ((getAllHitPointsDamage _vehicle) select 2) > 0) then {
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];

View File

@ -0,0 +1,35 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
change license plates from 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/release/Sources/epoch_code/compile/vehicles/EPOCH_vehicle_ChangeLicensePlate.sqf
*/
private ["_display","_maintxt","_txt","_bottomtxt","_savebutton"];
params ['_vehicle',['_player',player]];
if (isnull _vehicle) exitwith {};
if (_player distance _vehicle > 10) exitwith {};
if (!alive _vehicle) exitwith {};
if (!local _vehicle) exitwith {
['Go in as driver first',5] call Epoch_Message;
};
Epoch_PlateVehicle = _vehicle;
createdialog 'EPOCH_SimpleInput';
waituntil {!isnull (finddisplay -1200)};
disableSerialization;
_display = (finddisplay -1200);
_maintxt = _display displayctrl 20;
_txt = _display displayctrl 23;
_bottomtxt = _display displayctrl 22;
_savebutton = _display displayctrl 30;
_maintxt ctrlSetText (format ['Change Licenseplate for %1',(typeof _vehicle) call Epoch_ItemDisplayName]);
_txt ctrlSetText 'New Plate:';
_savebutton buttonSetAction 'if (player distance Epoch_PlateVehicle > 10) exitwith {}; Epoch_PlateVehicle setPlateNumber (ctrlText (finddisplay -1200 displayctrl 21)); closedialog 0; Epoch_PlateVehicle call EPOCH_interact; Epoch_PlateVehicle = nil';

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/both_init.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_communityStatsInit","_customVarsInit","_dynSimToggle"];
private ["_communityStatsInit","_customVarsInit","_dynSimToggle","_JammerConfig","_JammerClass","_preview"];
//[[[end]]]
// Check if Advanced Vehicle Repair is enabled
@ -71,3 +71,34 @@ EPOCH_group_upgrade_lvl = ["CfgEpochClient", "group_upgrade_lvl", [4,"100",6,"30
// disable remote sensors on server and client as all Epoch AI is local to the side controlling it.
disableRemoteSensors (["CfgEpochClient", "disableRemoteSensors", true] call EPOCH_fnc_returnConfigEntryV2);
// preload multiple used Jammer Configs
EPOCH_JammerClasses = [];
EPOCH_JammerGhosts = [];
EPOCH_MaxJammerRange = 75;
_JammerConfig = (getmissionconfig "CfgEpochClient" >> "CfgJammers");
if !(isclass _JammerConfig) exitwith {
diag_log "EPOCH_debug: Error: No Jammerclasses defined in CfgEpochClient";
};
{
private ["_JammerRangeX"];
EPOCH_JammerClasses pushback (configname _x);
_JammerRangeX = getnumber (_x >> "buildingJammerRange");
if (_JammerRangeX > EPOCH_MaxJammerRange) then {
EPOCH_MaxJammerRange = _JammerRangeX;
};
} foreach ("true" configClasses _JammerConfig);
if (EPOCH_JammerClasses isEqualTo []) then {
diag_log "EPOCH_debug: Error: Jammerconfig in CfgEpochClient seems to be wrong";
};
{
_JammerClass = _x;
{
_preview = gettext (getmissionconfig "CfgBaseBuilding" >> _JammerClass >> _x);
if !(_preview isEqualTo "" || _preview isEqualTo _JammerClass) then {
EPOCH_JammerGhosts pushBackUnique _preview;
};
} foreach ["GhostPreview","simulClass"];
} foreach EPOCH_JammerClasses;
EPOCH_JammerClasses = compilefinal (str EPOCH_JammerClasses);
EPOCH_MaxJammerRange = compilefinal (str EPOCH_MaxJammerRange);
EPOCH_JammerGhosts = compilefinal (str EPOCH_JammerGhosts)

View File

@ -49,7 +49,7 @@ class CfgActionMenu
dyna_deathMarkerAvail = "!(dyna_deathMarker isEqualTo [])";
dyna_mapDeathMarker = "(((getArray(('CfgMarkerSets' call EPOCH_returnConfig) >> 'DeathMarker' >> 'markerArray') select 0) select 0) in allMapMarkers)";
dyna_AtHome = "call {_config = 'CfgEpochClient' call EPOCH_returnConfig;_buildingJammerRange = getNumber(_config >> 'buildingJammerRange');_nearjammers = nearestobjects [player,['Plotpole_EPOCH'],_buildingJammerRange];if (_nearjammers isEqualTo []) exitwith {false};_nearestJammer = _nearjammers select 0;((_nearestJammer getVariable['BUILD_OWNER', '-1']) in[getPlayerUID player, Epoch_my_GroupUID])}";
dyna_AtHome = "call {_nearjammers = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig 'cfgEpochClient' >> 'CfgJammers' >> (typeof _x) >> 'buildingJammerRange'))};if (_nearjammers isEqualTo []) exitwith {false};_nearestJammer = _nearjammers select 0;((_nearestJammer getVariable['BUILD_OWNER', '-1']) in[getPlayerUID player, Epoch_my_GroupUID])}";
dyna_Watersource = "call {_nearObjects = nearestObjects [player, [], 2];_check = 'water';_ok = false;{if (alive _x) then {_ok = [_x, _check] call EPOCH_worldObjectType;};if (_ok) exitWith {};} forEach _nearObjects;_ok}";
};

View File

@ -78,7 +78,7 @@ class tra_shop
class player_takeCrypto
{
condition = "dyna_isDeadPlayer || (dyna_cursorTarget getVariable [""Crypto"",0]) > 0";
condition = "dyna_isDeadPlayer || !(((nearestobjects [player,[],5]) select {(_x getvariable ['Crypto',0]) > 0}) isEqualTo [])";
action = "dyna_cursorTarget call EPOCH_takeCrypto;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa";
tooltip = "Take Crypto";
@ -101,14 +101,14 @@ class player_trade_accept
//User action replacement
class maintain_jammer
{
condition = "dyna_cursorTargetType isEqualTo 'PlotPole_EPOCH' && (damage dyna_cursorTarget < 1)";
condition = "dyna_cursorTargetType in (call EPOCH_JammerClasses) && (damage dyna_cursorTarget < 1)";
action = "dyna_cursorTarget call EPOCH_maintainIT;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa";
tooltip = "Maintain";
};
class select_jammer
{
condition = "dyna_cursorTargetType isEqualTo 'PlotPole_EPOCH' && (damage dyna_cursorTarget < 1)";
condition = "dyna_cursorTargetType in (call EPOCH_JammerClasses) && (damage dyna_cursorTarget < 1)";
action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec [""EPOCH_server_makeSP"",2];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\spawnpoint.paa";
tooltip = "Make Spawnpoint";
@ -131,14 +131,14 @@ class lock_lockbox
};
class unlock_safe
{
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa";
tooltip = "Unlock Safe";
};
class lock_safe
{
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa";
tooltip = "Lock Safe";
@ -154,7 +154,7 @@ class pack_lockbox
};
class pack_safe
{
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec ['EPOCH_server_packStorage',2];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_pack.paa";
tooltip = "Pack Safe";
@ -530,6 +530,13 @@ class VehMaintanance
tooltipcode = "format ['Upgrade to %1 - %2',(Ignatz_VehicleUpgradeArray select 4 select 2),(Ignatz_VehicleUpgradeArray select 4 select 3)]";
};
};
class ChangePlate
{
condition = "{dyna_cursorTarget iskindof _x} count ['Van_01_base_F','Van_02_base_F','SUV_01_base_F','Hatchback_01_base_F','Offroad_01_base_F','Offroad_02_base_F'] > 0";
action = "[dyna_cursorTarget,player] spawn EPOCH_vehicle_ChangeLicensePlate";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Epoch_LicensePlate.paa";
tooltip = "Change License Plate";
};
};
//Groups

View File

@ -187,6 +187,7 @@ class CfgBaseBuilding
};
class PlotPole_EPOCH : Default
{
upgradeBuilding[] = {{"PlotPole_M_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}};
removeParts[] = {{"KitPlotPole",1}};
GhostPreview = "PlotPole_EPOCH";
staticClass = "PlotPole_EPOCH";
@ -195,6 +196,63 @@ class CfgBaseBuilding
};
class PlotPole_SIM_EPOCH : PlotPole_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
};
class PlotPole_M_EPOCH : Default
{
upgradeBuilding[] = {{"PlotPole_L_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}};
removeParts[] = {{"KitPlotPole_M",1}};
GhostPreview = "PlotPole_M_EPOCH";
staticClass = "PlotPole_M_EPOCH";
simulClass = "PlotPole_M_SIM_EPOCH";
bypassJammer = 1;
};
class PlotPole_M_SIM_EPOCH : PlotPole_M_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
};
class PlotPole_L_EPOCH : Default
{
upgradeBuilding[] = {{"PlotPole_XL_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}};
removeParts[] = {{"KitPlotPole_L",1}};
GhostPreview = "PlotPole_L_EPOCH";
staticClass = "PlotPole_L_EPOCH";
simulClass = "PlotPole_L_SIM_EPOCH";
bypassJammer = 1;
};
class PlotPole_L_SIM_EPOCH : PlotPole_L_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
};
class PlotPole_XL_EPOCH : Default
{
upgradeBuilding[] = {{"PlotPole_XXL_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}};
removeParts[] = {{"KitPlotPole_XL",1}};
GhostPreview = "PlotPole_XL_EPOCH";
staticClass = "PlotPole_XL_EPOCH";
simulClass = "PlotPole_XL_SIM_EPOCH";
bypassJammer = 1;
};
class PlotPole_XL_SIM_EPOCH : PlotPole_XL_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
};
class PlotPole_XXL_EPOCH : Default
{
upgradeBuilding[] = {};
removeParts[] = {{"KitPlotPole_XXL",1}};
GhostPreview = "PlotPole_XXL_EPOCH";
staticClass = "PlotPole_XXL_EPOCH";
simulClass = "PlotPole_XXL_SIM_EPOCH";
bypassJammer = 1;
};
class PlotPole_XXL_SIM_EPOCH : PlotPole_XXL_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
};
class WoodRamp_EPOCH : Default
@ -1356,6 +1414,36 @@ class CfgBaseBuilding
{
returnOnPack[] = {};
};
class Safe_s_EPOCH : Default
{
returnOnPack[] = {{"ItemSafe_s",1}};
simulClass = "Safe_s_SIM_EPOCH";
staticClass = "Safe_s_EPOCH";
weaponHolderProxy = "SafeProxy_EPOCH";
GhostPreview = "Safe_s_EPOCH";
bypassJammer = 1;
limitNearby = 2;
isSecureStorage = 1;
};
class Safe_s_SIM_EPOCH : Safe_EPOCH
{
returnOnPack[] = {};
};
class GunSafe_EPOCH : Default
{
returnOnPack[] = {{"ItemGunSafe",1}};
simulClass = "GunSafe_SIM_EPOCH";
staticClass = "GunSafe_EPOCH";
weaponHolderProxy = "SafeProxy_EPOCH";
GhostPreview = "GunSafe_EPOCH";
bypassJammer = 1;
limitNearby = 2;
isSecureStorage = 1;
};
class GunSafe_SIM_EPOCH : GunSafe_EPOCH
{
returnOnPack[] = {};
};
class Jack_EPOCH : Default
{
simulClass = "Jack_SIM_EPOCH";

View File

@ -171,6 +171,7 @@ class CfgClientFunctions
class fnc_setVariableLimited {};
class fnc_createLocalMarkerSet {};
class fnc_deleteLocalMarkerSet {};
class fnc_AnimateScheduled {};
};
class environment
{
@ -192,6 +193,7 @@ class CfgClientFunctions
class client_VehicleMaintananceDo {};
class vehicle_checkTurretAmmo {};
class vehicle_removeTurretAmmo {};
class vehicle_ChangeLicensePlate {};
};
class missions
{
@ -213,6 +215,7 @@ class CfgClientFunctions
class equip {};
class itemTypeSlot {};
class usedItemRepack {};
class CryptoButtons {};
};
class servicepoint
{

View File

@ -14,7 +14,7 @@
/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/
class CfgEpochClient
{
epochVersion = "1.3.0";
epochVersion = "1.3.1";
ArmAVersion = 176;
debug = "true"; // true = enable extra rpt debug lines, false to disable
@ -40,24 +40,55 @@ class CfgEpochClient
restrictedLocations[] = {"NameCityCapital"};
restrictedLocationsRange = 300;
buildingRequireJammer = 1; //1 = require jammer to build
buildingJammerRange = 75; // jammer range in meters
buildingJammerRange = 125; // Unused by Epoch, but leave it to prevent issues with custom scripts (should be set to the max possible JammerRange from cfgJammers)
jammerPerGroup = 1; // allowed number of jammers per group.
jammerGLOnly = 1; // allow only group leader to place Jammer
minJammerDistance = 650; // min distance to next Jammer
maxBuildingHeight = 100; // Max Height, building is allowed.
buildingCountLimit = 200; //overall building limit in range of jammer (overridden if "useGroupCountLimits=1")
storageCountLimit = 100; //overall storage limit in range of jammer (triggers only if "splitCountLimits=1" & "useGroupCountLimits=0")
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...)
useGroupCountLimits = 1; //1 = enable leader and member counts (doesn´t affect "splitCountLimits")
buildingCountLeader = 250; //ignore if "useGroupCountLimits=0"
buildingCountPerMember = 5; //ignore if "useGroupCountLimits=0"
storageCountLeader = 10; //ignore if "splitCountLimits=0" & "useGroupCountLimits=0"
storageCountPerMember = 5; //ignore if "splitCountLimits=0" & "useGroupCountLimits=0"
maxdoors = 10; // Max allowed doors per Group
maxgates = 5; // Max allowed Gates per Group
maxCams = 2; // Max allowed BaseCams per Group
MaxBuildingTilt = 180; // Max degrees players can tilt building elements
class CfgJammers {
class PlotPole_EPOCH // Jammer Classname
{
buildingJammerRange = 75; // jammer range in meters
buildingCountLimit = 200; // Max Building Elements per Base
storageCountLimit = 100; // Max Storage Elements per Base
buildingCountPerMember = 5; // Additional Building elements per Member
storageCountPerMember = 5; // Additional Storage elements per Member
maxdoors = 10; // Max Doors per Base
maxgates = 5; // Max Gates per Base
maxCams = 2; // Max Cams per Base
};
class PlotPole_M_EPOCH : PlotPole_EPOCH // inherits from "PlotPole_EPOCH" (not defined values will be taken from PlotPole_EPOCH)
{
buildingJammerRange = 100; // jammer range in meters
buildingCountLimit = 215; // Max Building Elements per Base
storageCountLimit = 115; // Max Storage Elements per Base
};
class PlotPole_L_EPOCH : PlotPole_M_EPOCH
{
buildingJammerRange = 125; // jammer range in meters
buildingCountLimit = 230; // Max Building Elements per Base
storageCountLimit = 130; // Max Storage Elements per Base
};
class PlotPole_XL_EPOCH : PlotPole_L_EPOCH
{
buildingJammerRange = 150; // jammer range in meters
buildingCountLimit = 245; // Max Building Elements per Base
storageCountLimit = 145; // Max Storage Elements per Base
};
class PlotPole_XXL_EPOCH : PlotPole_XL_EPOCH
{
buildingJammerRange = 175; // jammer range in meters
buildingCountLimit = 260; // Max Building Elements per Base
storageCountLimit = 160; // Max Storage Elements per Base
};
};
StorageClasses[] = {"Buildable_Storage","Buildable_Storage_SIM","Buildable_Storage_Ghost","Constructions_lockedstatic_F","Secure_Storage_Temp"};
BuildingClasses[] = {"Constructions_static_F","Constructions_foundation_F","Const_Ghost_EPOCH"};
DoorClasses[] = {"WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH","WoodStairs3_EPOCH","JailWallDoor_EPOCH"};
GateClasses[] = {"CinderWallGarage_EPOCH","WoodWallGarage_EPOCH","MetalWallGarage_EPOCH"};
AtmBlockedAtPlot = "true"; // Block ATM's in Plotpole-Range
disableRemoteSensors = "true"; // disableRemoteSensors true/false

View File

@ -249,6 +249,14 @@ class CfgItemInteractions
{
buildClass = "Safe_SIM_EPOCH";
};
class ItemSafe_s : Item_Build_base
{
buildClass = "Safe_s_SIM_EPOCH";
};
class ItemGunSafe : Item_Build_base
{
buildClass = "GunSafe_SIM_EPOCH";
};
class JackKit : Item_Build_base
{
buildClass = "Jack_SIM_EPOCH";
@ -499,6 +507,22 @@ class CfgItemInteractions
{
buildClass = "PlotPole_SIM_EPOCH";
};
class KitPlotPole_M : Item_Build_base
{
buildClass = "PlotPole_M_SIM_EPOCH";
};
class KitPlotPole_L : Item_Build_base
{
buildClass = "PlotPole_L_SIM_EPOCH";
};
class KitPlotPole_XL : Item_Build_base
{
buildClass = "PlotPole_XL_SIM_EPOCH";
};
class KitPlotPole_XXL : Item_Build_base
{
buildClass = "PlotPole_XXL_SIM_EPOCH";
};
class KitCinderWall : Item_Build_base
{
buildClass = "CinderWallHalf_EPOCH";

View File

@ -726,7 +726,6 @@ class CfgItemSort
"20Rnd_762x51_DMR",
"20Rnd_762x51_FNFAL",
"30Rnd_556x45_G36",
"a2_akyellow_mag_EPOCH",
"10Rnd_303",
"100Rnd_556x45_BetaCMag",
"10Rnd_762x54_SVD",
@ -1132,6 +1131,10 @@ class CfgItemSort
"KitWoodFoundation",
"KitFoundation",
"KitPlotPole",
"KitPlotPole_M",
"KitPlotPole_L",
"KitPlotPole_XL",
"KitPlotPole_XXL",
"KitCinderWall",
"KitSolarGen",
"KitSolarCharger",
@ -1152,6 +1155,8 @@ class CfgItemSort
"ItemLockbox",
"Pelt_EPOCH",
"ItemSafe",
"ItemSafe_s",
"ItemGunSafe",
"ItemSolar",
"ItemCables",
"ItemBattery",

View File

@ -330,6 +330,16 @@ class CfgPricing
price = 1250;
tax = 0.5;
};
class ItemSafe_s
{
price = 1250;
tax = 0.5;
};
class ItemGunSafe
{
price = 1250;
tax = 0.5;
};
class ItemCompass
{
price = 3;
@ -2766,11 +2776,6 @@ class CfgPricing
price = 5;
tax = 0.9;
};
class a2_akyellow_mag_EPOCH
{
price = 5;
tax = 0.9;
};
class 10Rnd_303
{
price = 5;
@ -3434,6 +3439,22 @@ class CfgPricing
{
price = 250;
};
class KitPlotPole_M
{
price = 350;
};
class KitPlotPole_L
{
price = 450;
};
class KitPlotPole_XL
{
price = 550;
};
class KitPlotPole_XXL
{
price = 650;
};
class KitSolarGen
{
price = 325;

View File

@ -26,6 +26,11 @@ class CfgRemoteExec
{
mode = 1;
jip = 0;
class EPOCH_server_PutCrypto
{
allowedTargets=2;
jip = 0;
};
class EPOCH_server_SetFinalPlayerPos
{
allowedTargets=2;

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_Simulated","_DamageAllowed","_ExceptedBaseObjects","_IndestructibleBaseObjects","_UseIndestructible","_VAL","_ammoClass","_ammoObj","_anims","_animsData","_arr","_arrCount","_baseObj","_buildingJammerRange","_cfgBaseBuilding","_cfgEpochClient","_class","_color","_damage","_location","_marker","_maxTTL","_owner","_response","_serverSettingsConfig","_storageSlot","_textureSlot","_ttl","_vehHiveKey","_worldspace"];
private ["_Simulated","_DamageAllowed","_ExceptedBaseObjects","_IndestructibleBaseObjects","_UseIndestructible","_VAL","_ammoClass","_ammoObj","_anims","_animsData","_arr","_arrCount","_baseObj","_cfgBaseBuilding","_class","_color","_damage","_location","_marker","_maxTTL","_owner","_response","_serverSettingsConfig","_storageSlot","_textureSlot","_ttl","_vehHiveKey","_worldspace"];
//[[[end]]]
EPOCH_BaseCams = [];
EPOCH_Plotpoles = [];
@ -27,10 +27,7 @@ _UseDeSimulateObjects = [_serverSettingsConfig, "UseDeSimulateObjects", true] ca
_DeSimulateObjects = [_serverSettingsConfig, "DeSimulateObjects", []] call EPOCH_fnc_returnConfigEntry;
_ExceptedDeSymObjects = [_serverSettingsConfig, "ExceptedDeSymObjects", []] call EPOCH_fnc_returnConfigEntry;
_DisableDoorsOnObj = [_serverSettingsConfig, "DisableDoorsOnObj", []] call EPOCH_fnc_returnConfigEntry;
_cfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig;
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_cfgEpochClient >> "buildingJammerRange");
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
_VAL = ["", [], "", "", 0, []];
@ -154,7 +151,7 @@ for "_i" from 0 to _this do {
};
// Handle Jammers and create marker if EPOCH_SHOW_JAMMERS set true.
if (_class in ["PlotPole_EPOCH","BaseCam_EPOCH"]) then {
if (_class in ((call EPOCH_JammerClasses) + ["BaseCam_EPOCH"])) then {
if (_owner != "-1") then {
_baseObj setVariable ["BUILD_OWNER", _owner, true];
};
@ -165,7 +162,7 @@ for "_i" from 0 to _this do {
// Set PubVar later after all Cams are loaded in
};
if (_class isequalto "PlotPole_EPOCH") then {
if (_class in (call EPOCH_JammerClasses)) then {
EPOCH_Plotpoles pushbackunique _baseObj;
if (EPOCH_SHOW_JAMMERS) then {
_marker = createMarker [str(_location), _location];

View File

@ -26,7 +26,7 @@
NOTHING
*/
//[[[cog import generate_private_arrays ]]]
private ["_buildingJammerRange","_cIndex","_cfgEpochClient","_counter","_current_crypto","_objSlot","_playerCryptoLimit","_playerUID","_storSlot","_vars"];
private ["_cIndex","_counter","_current_crypto","_objSlot","_playerCryptoLimit","_playerUID","_storSlot","_vars"];
//[[[end]]]
params [["_object",objNull],"_player","_maintCount",["_token","",[""]] ];
@ -34,14 +34,10 @@ if !([_player, _token] call EPOCH_server_getPToken) exitWith{};
if (isNull _object) exitWith{};
if (_player distance _object > 20) exitWith{};
_cfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig;
_buildingJammerRange = getNumber(_cfgEpochClient >> "buildingJammerRange");
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
_playerUID = getPlayerUID _player;
_counter = 0;
if (typeOf _object == "PlotPole_EPOCH") then {
if (typeOf _object in (call EPOCH_JammerClasses)) then {
_objSlot = _object getVariable["BUILD_SLOT", -1];
if (_objSlot != -1) then {
@ -76,7 +72,7 @@ if (typeOf _object == "PlotPole_EPOCH") then {
};
};
if (_counter > _maintCount) exitWith{};
} forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange];
} forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], call EPOCH_MaxJammerRange];
// effect crypto
_playerCryptoLimit = EPOCH_customVarLimits select _cIndex;

View File

@ -53,6 +53,11 @@ if (isText _staticClassConfig) then {
if (getNumber(_cfgBaseBuilding >> _staticClass >> "isSecureStorage") == 1) then{
_storageObj setVariable["EPOCH_Locked", false, true];
if (_storageObj isKindOf "GunSafe_EPOCH") then {
{
_storageObj animate [_x,1];
} foreach ["door1","door2","handle1","handle2"];
};
};
_storageObj setVariable["STORAGE_OWNERS", [_playerUID]];
@ -69,7 +74,7 @@ if (isText _staticClassConfig) then {
} else {
// TODO: optimize by using config var
if (_vehicle isKindOf "ThingX" || _vehicle isKindOf "Const_Ghost_EPOCH" || _vehicle isKindOf "PlotPole_EPOCH") then {
if (_vehicle isKindOf "ThingX" || _vehicle isKindOf "Const_Ghost_EPOCH" || ({_vehicle isKindOf _x} count (call EPOCH_JammerClasses) > 0)) then {
_objSlot = _vehicle getVariable["BUILD_SLOT", -1];
if (_objSlot == -1) then{
@ -100,7 +105,8 @@ if (isText _staticClassConfig) then {
else {
_newVehicle setVariable["BUILD_OWNER", _playerUID, true];
};
if (_newVehicle isKindOf "PlotPole_EPOCH") then {
if ({_newVehicle isKindOf _x} count (call EPOCH_JammerClasses) > 0) then {
EPOCH_Plotpoles = EPOCH_Plotpoles - [ObjNull];
EPOCH_Plotpoles pushBackUnique _newVehicle;
publicvariable "EPOCH_Plotpoles";
};

View File

@ -13,13 +13,30 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_cfgBaseBuilding","_class","_newObj","_objSlot","_objType","_upgrade","_upgrades"];
private ["_cfgBaseBuilding","_class","_newObj","_objSlot","_objType","_upgrade","_upgrades","_Skip"];
//[[[end]]]
params ["_object","_player",["_index",0],["_token","",[""]] ];
params ["_object","_player",["_index",0],["_token","",[""]],["_CryptoCosts",0]];
if (isNull _object) exitWith{};
if !([_player, _token] call EPOCH_server_getPToken) exitWith{};
_Skip = false;
if (_CryptoCosts > 0) then {
_cIndex = EPOCH_customVars find "Crypto";
_vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar];
_current_crypto = _vars select _cIndex;
if (_current_crypto < _CryptoCosts) Exitwith {
_Skip = true;
};
_playerCryptoLimit = EPOCH_customVarLimits select _cIndex;
_playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"];
_current_crypto = ((_current_crypto - _CryptoCosts) min _playerCryptoLimitMax) max _playerCryptoLimitMin;
_current_crypto remoteExec ['EPOCH_effectCrypto',_player];
_vars set[_cIndex, _current_crypto];
_player setVariable["VARS", _vars];
};
if (_Skip) exitwith {};
_objSlot = _object getVariable["BUILD_SLOT", -1];
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
if (_objSlot != -1) then {

View File

@ -1,13 +1,29 @@
// _newObj = [_class,_object] call EPOCH_swapBuilding;
//[[[cog import generate_private_arrays ]]]
private ["_newObj","_objectPos"];
private ["_newObj","_objectPos","_owner","_UpdatePlots"];
//[[[end]]]
params [["_class",""],["_object",objNull],["_method",0]];
params [["_class",""],["_object",objNull],["_method",1]];
_newObj = objNull;
if (!isNull _object && !(_class isEqualTo "")) then {
_objectPos = getPosWorld _object;
_newObj = createVehicle [_class, ASLtoAGL _objectPos, [], 0, "CAN_COLLIDE"];
if (!isNull _newObj) then {
_owner = _object getvariable ["Build_Owner",""];
if !(_owner isEqualTo "") then {
_newObj setVariable ["BUILD_OWNER", _owner, true];
};
_UpdatePlots = false;
if (_object in EPOCH_Plotpoles) then {
EPOCH_Plotpoles = EPOCH_Plotpoles - [_object];
_UpdatePlots = true;
};
if (_class in (call EPOCH_JammerClasses)) then {
EPOCH_Plotpoles pushback _newObj;
_UpdatePlots = true;
};
if (_UpdatePlots) then {
publicvariable 'EPOCH_Plotpoles';
};
_object hideObjectGlobal true;
switch (_method) do {
case 0: {
@ -17,6 +33,7 @@ if (!isNull _object && !(_class isEqualTo "")) then {
};
case 1: {
_newObj attachTo [_object,[0,0,0]];
detach _newObj;
};
/*
case 2: {

View File

@ -143,7 +143,7 @@ if (!isNull _player) then {
if (surfaceiswater _newLocation) then {
_CheckLocation = ATLToASL _newLocation;
};
_jammers = nearestObjects[_CheckLocation, ["PlotPole_EPOCH"], 6];
_jammers = nearestObjects[_CheckLocation, call EPOCH_JammerClasses, 6];
if !(_jammers isEqualTo[]) then {
// get nearby object
_jammer = _jammers param [0,objNull];

View File

@ -0,0 +1,46 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description: Puts Crypto Items on the Ground
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server\compile\epoch_server\EPOCH_server_PutCrypto.sqf
Usage:
[player,_value,Epoch_personalToken] remoteexec ['EPOCH_server_PutCrypto',2]
RETURNS: NOTHING
*/
private ["_cIndex","_vars","_current_crypto","_pos","_dist","_direction","_randomPos","_itemclass","_var","_item"];
params ["_player","_Putcrypto",["_token","",[""]]];
diag_log format ["PutCrypto Server Side - %1",_this];
if !([_player, _token] call EPOCH_server_getPToken) exitWith{};
_cIndex = EPOCH_customVars find 'Crypto';
_vars = _player getVariable['VARS', call EPOCH_defaultVars_SEPXVar];
_current_crypto = _vars select _cIndex;
if (_current_crypto < _Putcrypto) exitwith {
["Not enough money",5] remoteexec ["Epoch_Message",_player];
};
_current_crypto = _current_crypto - _Putcrypto;
_vars set[_cIndex, _current_crypto];
_player setVariable['VARS', _vars];
_current_crypto remoteExec ['EPOCH_effectCrypto',_player];
[format ["You put %1 Crypto on the Ground",_Putcrypto],5] remoteexec ["Epoch_Message",_player];
[_player,_vars,_token] call EPOCH_fnc_savePlayer;
_pos = getposatl _player;
while {_Putcrypto > 0} do {
_itemclass = if (_Putcrypto >= 1000) then {"Land_Suitcase_F"} else {"Land_Money_F"};
_var = if (_Putcrypto >= 1000) then {1000} else {_Putcrypto min 100};
_Putcrypto = _Putcrypto - _var;
_item = createVehicle [_itemclass,_pos,[],1,"CAN_COLLIDE"];
_item setvariable ["RemoveOnTake",true];
_item allowdamage false;
_item enablesimulationglobal false;
_item setvariable ["Crypto",_var,true];
};

View File

@ -8,7 +8,7 @@
_position - position on map
_traderCheck - BOOL - check _position distance near ProtectionZone_Invisible_F
_jammerCheck - BOOL - check _position distance near PlotPole_EPOCH
_jammerCheck - BOOL - check _position distance near PlotPoles
_playerCheck - BOOL - check _position distance near other Players
_others - ARRAY - positions to check with _distFromOthers
_distFromOthers - NUMBER - How far away from _others array in meters
@ -30,7 +30,7 @@ if(_traderCheck)then{
//CHECK FOR JAMMERS IN THE AREA WITHIN CONFIG RANGE
if(_jammerCheck)then{
_jammers = nearestObjects[_position, ["PlotPole_EPOCH"], _distFromJammers];
_jammers = nearestObjects[_position, call EPOCH_JammerClasses, _distFromJammers];
if(count _jammers > 0) then {
_return = false;
};

View File

@ -16,7 +16,7 @@
private [ "_TraderGodMode","_StaticTraderItemPurge","_DynamicTraderRespawnCount","_TraderItemsDeleteRestart","_TraderInit","_TraderItemsClean","_newstock","_agent","_aiTables",
"_arr","_config","_currentStock","_existingStock","_indexStock","_markers","_objHiveKey","_pos","_randomAIUniform","_response","_response2","_schedule",
"_serverSettingsConfig","_staticTrader","_staticTradersArrCount","_staticTradersArray","_storedVehicleLimit","_traderSlotIndex","_work","_arrchanged","_deleteat","_maxrnd",
"_WinterDeco","_HelloweenDeco","_buildingJammerRange","_TraderDeco"
"_WinterDeco","_HelloweenDeco","_TraderDeco"
];
//[[[end]]]
params [["_maxTraderLimit",0]];
@ -35,7 +35,6 @@ _DynamicTraderRespawnCount = [_serverSettingsConfig, "DynamicTraderRespawnCount"
_TraderItemCountPerItem = [_serverSettingsConfig, "TraderItemCountPerItem", [100,100]] call EPOCH_fnc_returnConfigEntry;
_TraderItemsDeleteRestart = [_serverSettingsConfig, "TraderItemsDeleteRestart", []] call EPOCH_fnc_returnConfigEntry;
_TraderDeco = [_serverSettingsConfig, "TraderDeco", true] call EPOCH_fnc_returnConfigEntry;
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_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;
@ -200,7 +199,7 @@ for "_i" from 0 to (_maxTraderLimit-1) do {
if (daytime > (_schedule select 0) && daytime < (_schedule select 1)) then {
_pos = (_work select 0);
};
if (!(count (_arr select 0) >= _DynamicTraderRespawnCount) && (nearestobjects [_pos,["Plotpole_EPOCH"],_buildingJammerRange]) isequalto []) then {
if (!(count (_arr select 0) >= _DynamicTraderRespawnCount) && (nearestobjects [_pos,call EPOCH_JammerClasses,call EPOCH_MaxJammerRange]) isequalto []) then {
EPOCH_TraderSlots deleteAt _traderSlotIndex;
_agent = createAgent [_class, _pos, [], 0, "NONE"];
if !(EPOCH_forceStaticTraders) then {

View File

@ -15,7 +15,7 @@
//[[[cog import generate_private_arrays ]]]
private [ "_serverSettingsConfig","_acceptableBlds","_agent","_aiClass","_aiTables","_buildingHome","_buildingWork","_buildings","_checkBuilding","_config","_endTime","_home",
"_homes","_markers","_objHiveKey","_pos","_position","_randomAIUniform","_return","_schedule","_slot","_spawnCount","_startTime","_traderHomes","_usedBuildings","_work",
"_WinterDeco","_HelloweenDeco","_buildingJammerRange","_TraderDeco","_TraderMinDistance","_traderblockblds","_Traderblocks"
"_WinterDeco","_HelloweenDeco","_TraderDeco","_TraderMinDistance","_traderblockblds","_Traderblocks"
];
//[[[end]]]
_serverSettingsConfig = configFile >> "CfgEpochServer";
@ -30,11 +30,10 @@ if (_TraderMinDistance isEqualto 0) then {
};
_traderblockblds = getArray(_config >> "traderblockblds");
if (_traderblockblds isEqualto []) then {
_traderblockblds = ["pier","bridge","fireescape","medevac_house","pillboxbunker"];
_traderblockblds = ["pier","bridge","fireescape","medevac_house","pillboxbunker","containerine"];
};
_traderHomes = getArray(_config >> "traderHomes");
_TraderDeco = [_serverSettingsConfig, "TraderDeco", true] call EPOCH_fnc_returnConfigEntry;
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_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;
@ -74,7 +73,7 @@ for "_i" from 1 to _spawnCount do {
_usedBuildings pushBack _buildingWork;
_home = selectRandom (_buildingHome buildingPos -1);
_work = selectRandom (_buildingWork buildingPos -1);
if ((nearestobjects [_home,["Plotpole_EPOCH"],_buildingJammerRange]) isequalto [] && (nearestobjects [_work,["Plotpole_EPOCH"],_buildingJammerRange]) isequalto []) then {
if ((nearestobjects [_home,call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) isequalto [] && (nearestobjects [_work,call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) isequalto []) then {
_startTime = floor(random 16);
_endTime = _startTime + 8;
_schedule = [_startTime, _endTime];

View File

@ -15,21 +15,21 @@
//[[[cog import generate_private_arrays ]]]
private ["_getCrypto"];
//[[[end]]]
params ["_player",["_token","",[""]],"_object"];
params ["_player",["_token","",[""]],["_CryptoItems",[]]];
if !([_player,_token] call EPOCH_server_getPToken) exitWith {};
if (isNull _object) exitWith {};
if (_player distance _object > 10) exitWith {};
_getCrypto = _object getVariable["Crypto", 0];
if (_getCrypto > 0) then {
// remove crypto from object
_object setVariable["Crypto", nil, true];
if (_object getvariable ["RemoveOnTake",false]) then {
deletevehicle _object;
_getCrypto = 0;
{
if (_player distance _x < 10) then {
_getCrypto = _getCrypto + (_x getVariable ["Crypto", 0]);
_x setVariable ["Crypto", nil, true];
if (_x getvariable ["RemoveOnTake",false]) then {
deletevehicle _x;
};
};
// send data back to player
} foreach _CryptoItems;
if (_getCrypto > 0) then {
[_player,_getCrypto] call EPOCH_server_effectCrypto;
// debug and logging.
diag_log format["Epoch: ADMIN: %1 picked up %2 Crypto from object %3 with puid %4 at %5", getPlayerUID _player, _getCrypto, [_object, typeOf _object],_object getVariable['PUID', ''],getposATL _object];
};
diag_log format["Epoch: ADMIN: %1 picked up %2 Crypto at %3", getPlayerUID _player, _getCrypto, getposATL _player];
};

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_ExceptedBaseObjects","_IndestructibleBaseObjects","_UseIndestructible","_arr","_attachments","_availableColorsConfig","_cfgBaseBuilding","_class","_class_raw","_color","_colors","_count","_damage","_diag","_dir","_inventory","_location","_magazineName","_magazineSize","_magazineSizeMax","_marker","_objQty","_objType","_objTypes","_qty","_response","_selections","_serverSettingsConfig","_storageSlotIndex","_textureSelectionIndex","_textures","_vehHiveKey","_vehicle","_wMags","_wMagsArray","_worldspace","_wsCount"];
private ["_ExceptedBaseObjects","_AutoLockStorages","_IndestructibleBaseObjects","_UseIndestructible","_arr","_attachments","_availableColorsConfig","_cfgBaseBuilding","_class","_class_raw","_color","_colors","_count","_damage","_diag","_dir","_inventory","_location","_magazineName","_magazineSize","_magazineSizeMax","_marker","_objQty","_objType","_objTypes","_qty","_response","_selections","_serverSettingsConfig","_storageSlotIndex","_textureSelectionIndex","_textures","_vehHiveKey","_vehicle","_wMags","_wMagsArray","_worldspace","_wsCount"];
//[[[end]]]
params [["_maxStorageLimit",0]];
@ -21,6 +21,7 @@ _serverSettingsConfig = configFile >> "CfgEpochServer";
_UseIndestructible = [_serverSettingsConfig, "UseIndestructible", false] call EPOCH_fnc_returnConfigEntry;
_IndestructibleBaseObjects = [_serverSettingsConfig, "IndestructibleBaseObjects", []] call EPOCH_fnc_returnConfigEntry;
_ExceptedBaseObjects = [_serverSettingsConfig, "ExceptedBaseObjects", []] call EPOCH_fnc_returnConfigEntry;
_AutoLockStorages = [_serverSettingsConfig, "AutoLockStorages", false] call EPOCH_fnc_returnConfigEntry;
_diag = diag_tickTime;
EPOCH_StorageSlots = [];
@ -136,8 +137,16 @@ for "_i" from 1 to _maxStorageLimit do {
if (count _arr >= 6) then {
if (_class isKindOf 'Constructions_lockedstatic_F') then{
// set locked state of secure storage
if ((_arr select 6) != -1) then {
if (((_arr select 6) != -1) || _AutoLockStorages) then {
_vehicle setVariable["EPOCH_Locked", true, true];
}
else {
_vehicle setVariable["EPOCH_Locked", false, true];
if (_vehicle iskindof "GunSafe_EPOCH") then {
{
_vehicle animate _x;
} foreach [['handle1',1],['handle2',1],['door1',1],['door2',1]];
};
};
_vehicle setVariable ["STORAGE_OWNERS", _arr select 5];
};

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_actualHitpoints","_allHitpoints","_allVehicles","_allowDamage","_arr","_arrNum","_availableColorsConfig","_cfgEpochVehicles","_check","_class","_colors","_config","_count","_dataFormat","_dataFormatCount","_diag","_disableVehicleTIE","_dmg","_found","_immuneIfStartInBase","_jammerOwner","_jammerRange","_jammers","_location","_lockedOwner","_marker","_nearestJammer","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_textureSelectionIndex","_textures","_vehHiveKey","_vehLockHiveKey","_vehicle","_vehicleDynamicSimulationSystem","_vehicleSlotIndex"];
private ["_actualHitpoints","_allHitpoints","_allVehicles","_allowDamage","_arr","_arrNum","_availableColorsConfig","_cfgEpochVehicles","_check","_class","_colors","_count","_dataFormat","_dataFormatCount","_diag","_disableVehicleTIE","_dmg","_found","_immuneIfStartInBase","_jammerOwner","_jammers","_location","_lockedOwner","_marker","_nearestJammer","_removemagazinesturret","_removeweapons","_response","_selections","_serverSettingsConfig","_textureSelectionIndex","_textures","_vehHiveKey","_vehLockHiveKey","_vehicle","_vehicleDynamicSimulationSystem","_vehicleSlotIndex"];
//[[[end]]]
params [["_maxVehicleLimit",0]];
@ -23,10 +23,6 @@ _dataFormatCount = count _dataFormat;
EPOCH_VehicleSlots = [];
_allVehicles = [];
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_jammerRange = getNumber(_config >> "buildingJammerRange");
_serverSettingsConfig = configFile >> "CfgEpochServer";
_immuneIfStartInBase = [_serverSettingsConfig, "immuneIfStartInBase", true] call EPOCH_fnc_returnConfigEntry;
_vehicleDynamicSimulationSystem = [_serverSettingsConfig, "vehicleDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry;
@ -191,7 +187,7 @@ for "_i" from 1 to _maxVehicleLimit do {
// allow damage
_allowDamage = true;
if (_immuneIfStartInBase) then {
_jammers = nearestObjects[_vehicle, ["PlotPole_EPOCH"], _jammerRange];
_jammers = nearestObjects[_vehicle, call EPOCH_JammerClasses,call EPOCH_MaxJammerRange];
if!(_jammers isEqualTo [])then {
// get jammer owner
_nearestJammer = _jammers select 0;

View File

@ -27,6 +27,10 @@ _playerGroup = _player getVariable["GROUP", ""];
_fnc_Lock_Unlock = {
_locked = !_locked;
_unit setVariable ["EPOCH_Locked", _locked, true];
if (_unit iskindof "GunSafe_EPOCH") then {
_animations = if (_locked) then {[['door1',0],['door2',0],['handle1',0],['handle2',0]]} else {[['handle1',1],['handle2',1],['door1',1],['door2',1]]};
[_unit,_animations,[0,1,0]] remoteexec ['EPOCH_fnc_AnimateScheduled',_player];
};
_LockStateChanged = true;
};

View File

@ -34,7 +34,7 @@ if (!isNull _building) then {
EPOCH_BaseCams = EPOCH_BaseCams - [_building];
publicvariable "EPOCH_BaseCams";
};
if (_building iskindof "PlotPole_EPOCH") then {
if (_building in (call EPOCH_JammerClasses)) then {
EPOCH_Plotpoles = EPOCH_Plotpoles - [_building];
publicvariable "EPOCH_Plotpoles";
};

View File

@ -21,7 +21,7 @@ if (!isNull _vehicle) then {
if (_vehSlot != "ABORT") then {
_vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot];
["Vehicle", _vehHiveKey] call EPOCH_fnc_server_hiveDEL;
EPOCH_VehicleSlots pushBack _vehSlot;
EPOCH_VehicleSlots pushBackUnique _vehSlot;
missionNamespace setVariable ['EPOCH_VehicleSlotCount', count EPOCH_VehicleSlots, true];

View File

@ -129,6 +129,7 @@ class CfgServerFunctions
class server_deleteGlobalMarkerSet {};
class server_isNearChecks {};
class server_DefuseBomb {};
class server_PutCrypto {};
};
class epoch_missions {
class Server_createObject {};
@ -148,7 +149,7 @@ class CfgServerFunctions
};
class CfgServerVersion
{
client = "1.3.0";
config = "1.3.0";
client = "1.3.1";
config = "1.3.1";
hive = "0.6.0.0";
};

View File

@ -289,14 +289,13 @@ if ([_serverSettingsConfig, "disableAutoRefuel", false] call EPOCH_fnc_returnCon
else {
// Remove Auto-Refuel in PlotPole-Range
if ([_serverSettingsConfig, "disableFuelNearPlots", true] call EPOCH_fnc_returnConfigEntry) then {
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_staticFuelSources = [];
{
{
_staticFuelSources pushback _x;
} foreach (((_x nearObjects ['Building',_buildingJammerRange]) select {getFuelCargo _x > 0}));
} foreach (((_x nearObjects ['Building',call EPOCH_MaxJammerRange]) select {getFuelCargo _x > 0}));
} foreach (missionnamespace getvariable ["Epoch_Plotpoles",allmissionobjects 'PlotPole_EPOCH']);
} foreach (missionnamespace getvariable ["Epoch_Plotpoles",call {_allplots = [];{_allplots append (allmissionobjects _x)} foreach (call EPOCH_JammerClasses);_allplots}]);
missionNamespace setVariable ["EPOCH_staticFuelSources", _staticFuelSources, true];
};
};
@ -309,7 +308,7 @@ missionNamespace setVariable ["EPOCH_taxRate", [_serverSettingsConfig, "taxRate"
// pick random radioactive locations
_radioactiveLocations = getArray(_epochConfig >> worldName >> "radioactiveLocations");
_blacklist = getArray(_epochConfig >> worldName >> "radioactiveLocBLObjects");
_blacklist = (call EPOCH_JammerClasses) + (getArray(_epochConfig >> worldName >> "radioactiveLocBLObjects"));
_distance = getNumber(_epochConfig >> worldName >> "radioactiveLocBLDistance");
_radioactiveLocationsTmp = [];
if !(_radioactiveLocations isEqualTo []) then {

View File

@ -49,7 +49,7 @@ _skn_badAnimations = [_cfg_blacklistConfig, "animations", ['AmovPercMstpSnonWnon
_cfg_variablesConfig = (_config >> "variables");
_skn_badVarCheckArray = [_cfg_variablesConfig, "badVars", ['EPOCH_GMODE','ESP_map','ESP_mainMap','ESP_adminMap','AntiAntiAntiAntiHax','fnc_usec_damageHandler','fnc_usec_unconscious','VAGINA_secret','yolo','VERSION','life_fnc_handleDamage','EPOCH_spawnVehicle_PVS','CLASS911_Menu','nuke_vars','JJMMEE_INIT_MENU','PLAYERON','PLAYERNEXT2','ALTISLIFEON','LY_Menu','PLAY','LY_SwaggerLikeUs','BIS_fnc_dbg_reminder_value','BIS_fnc_dbg_reminder']] call EPOCH_fnc_returnConfigEntry;
_skn_nilVarCheckArray = [_cfg_variablesConfig, "nilVars", ['EPOCH_antiWallCount','EPOCH_playerEnergy','EPOCH_playerHunger','EPOCH_playerStamina','EPOCH_playerCrypto','EPOCH_target','EPOCH_ESP_TARGETS','EPOCH_ESPMAP_TARGETS','EPOCH_taxRate','EPOCH_ESP_VEHICLEPLAYER','EPOCH_ESP_PLAYER','EPOCH_ESP_VEHICLES']] call EPOCH_fnc_returnConfigEntry;
_skn_commandMenuArray = [(_config >> "commandMenu"), "menus",['','RscSelectTeam','RscTeam','RscMenuTeam','RscMoveHigh','#GETIN','#RscStatus','#WATCH0','RscCombatMode','RscMenuReply','RscCallSupport','#CUSTOM_RADIO','#User:BIS_fnc_addCommMenuItem_menu','RscRadio','RscReply','#ACTION','RscMenuFormations','#WATCH','RscGroupRootMenu','RscMainMenu','RscMenuMove','RscWatchDir','RscWatchMoveDir','#User:BIS_Menu_GroupCommunication','RscMenuStatus','RscFormations']] call EPOCH_fnc_returnConfigEntry;
_skn_commandMenuArray = [(_config >> "commandMenu"), "menus",['','RscMenuEngage','RscSelectTeam','RscTeam','RscMenuTeam','RscMoveHigh','#GETIN','#RscStatus','#WATCH0','RscCombatMode','RscMenuReply','RscCallSupport','#CUSTOM_RADIO','#User:BIS_fnc_addCommMenuItem_menu','RscRadio','RscReply','#ACTION','RscMenuFormations','#WATCH','RscGroupRootMenu','RscMainMenu','RscMenuMove','RscWatchDir','RscWatchMoveDir','#User:BIS_Menu_GroupCommunication','RscMenuStatus','RscFormations']] call EPOCH_fnc_returnConfigEntry;
_skn_addEHConfig = (_config >> "addEventHandler");
_skn_displayAddEHChecks = [_skn_addEHConfig, "checks",[]] call EPOCH_fnc_returnConfigEntry;
@ -422,7 +422,7 @@ for "_i" from 1 to 3 do {
};
if ("MAP-BASEBUILDING" in _case) then {
_temp = _temp + "
,[' Base Building Marker', [], {"+_skn_tg_map_basebuilding+" = !"+_skn_tg_map_basebuilding+"; if ("+_skn_tg_map_basebuilding+") then {waitUntil {"+_skn_mapBasesArray+" = ([worldSize/2,worldSize/2,0]) nearObjects['PlotPole_EPOCH', 12500];uiSleep 15;!"+_skn_tg_map_basebuilding+"};"+_skn_mapBasesArray+" = []}; ['Base Building MARKER',if ("+_skn_tg_map_basebuilding+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []]
,[' Base Building Marker', [], {"+_skn_tg_map_basebuilding+" = !"+_skn_tg_map_basebuilding+"; if ("+_skn_tg_map_basebuilding+") then {waitUntil {"+_skn_mapBasesArray+" = (Epoch_PlotPoles - [objnull]);uiSleep 15;!"+_skn_tg_map_basebuilding+"};"+_skn_mapBasesArray+" = []}; ['Base Building MARKER',if ("+_skn_tg_map_basebuilding+") then [{2},{1}]] call "+_skn_adminLog_PVC+"}, '2', []]
";
};
};

View File

@ -20,7 +20,7 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
epochVersion = "1.3.0";
epochVersion = "1.3.1";
requiredAddons[] = {};
#include "build.hpp"
};
@ -66,7 +66,7 @@ class CfgEpoch
radioactiveLocationsCount = 3;
// BlackList radioactive locations spawn by object and distance
radioactiveLocBLObjects[] = {"PlotPole_EPOCH"};
radioactiveLocBLObjects[] = {}; // PlotPoles are already blacklisted by script
radioactiveLocBLDistance = 500;
// Custom Locations for Radiation
@ -81,7 +81,7 @@ class CfgEpoch
traderHomes[] = {"Building"};
traderUniforms[] = {"U_OG_leader", "U_C_Poloshirt_stripped", "U_C_Poloshirt_blue", "U_C_Poloshirt_burgundy", "U_C_Poloshirt_tricolour", "U_C_Poloshirt_salmon", "U_C_Poloshirt_redwhite", "U_C_Poor_1", "U_C_WorkerCoveralls", "U_C_Journalist", "U_C_Scientist", "U_OrestesBody", "U_Chav_EPOCH"};
// TraderMinDistance = 1500; // Min distance between Traders. If not defined, Server will calculate it by MapSize
traderblockblds[] = {"pier","bridge","fireescape","medevac_house","pillboxbunker"}; // If a building include this chars in the classname (tolower!!!) they will be blocked for Traders
traderblockblds[] = {"pier","bridge","fireescape","medevac_house","pillboxbunker","containerine"}; // If a building include this chars in the classname (tolower!!!) they will be blocked for Traders
// Debug Box
telePos[] = {};

View File

@ -80,6 +80,14 @@ class CfgLootTable
{ { "FAK", "magazine" }, 20 }
};
};
class Safes
{
items[] = {
{ { "ItemSafe", "magazine" }, 1 },
// { { "ItemSafe_s", "magazine" }, 1 }, // Variant with less Load than the normal Safe
{ { "ItemGunSafe", "magazine" }, 1 }
};
};
class Repairs
{
items[] = {
@ -331,7 +339,7 @@ class CfgLootTable
{ { "ItemBattery", "magazine" }, 5 },
{ { "ItemCables", "magazine" }, 5 },
{ { "ItemPipe", "magazine" }, 5 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemBarrelE", "magazine" }, 1 }
@ -342,7 +350,7 @@ class CfgLootTable
{
items[] = {
{ { "VehicleDocs", "CfgLootTable" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "jerrycan_epoch", "magazine" }, 5 },
{ { "CircuitParts", "magazine" }, 6 },
@ -1001,7 +1009,7 @@ class CfgLootTable
{ { "KitCinderWall", "magazine" }, 5 },
{ { "KitFoundation", "magazine" }, 5 },
{ { "KitWoodFoundation", "magazine" }, 14 },
{ { "ItemSafe", "magazine" }, 1 }
{ { "Safes", "CfgLootTable" }, 1 }
};
};
@ -1014,7 +1022,7 @@ class CfgLootTable
{ { "BaseBuilding", "CfgLootTable" }, 20 },
{ { "GenericLarge", "CfgLootTable" }, 24 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "Generic", "CfgLootTable" }, 10 },
{ { "Tools", "CfgLootTable" }, 19 }
};

View File

@ -80,6 +80,14 @@ class CfgLootTable_CUP
{ { "FAK", "magazine" }, 20 }
};
};
class Safes
{
items[] = {
{ { "ItemSafe", "magazine" }, 1 },
// { { "ItemSafe_s", "magazine" }, 1 }, // Variant with less Load than the normal Safe
{ { "ItemGunSafe", "magazine" }, 1 }
};
};
class Repairs
{
items[] = {
@ -424,7 +432,7 @@ class CfgLootTable_CUP
{ { "ItemBattery", "magazine" }, 5 },
{ { "ItemCables", "magazine" }, 5 },
{ { "ItemPipe", "magazine" }, 5 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemBarrelE", "magazine" }, 1 }
};
};
@ -433,7 +441,7 @@ class CfgLootTable_CUP
{
items[] = {
{ { "VehicleDocs", "CfgLootTable" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "jerrycan_epoch", "magazine" }, 5 },
{ { "CircuitParts", "magazine" }, 6 },
@ -1550,7 +1558,7 @@ class CfgLootTable_CUP
{ { "KitCinderWall", "magazine" }, 5 },
{ { "KitFoundation", "magazine" }, 5 },
{ { "KitWoodFoundation", "magazine" }, 14 },
{ { "ItemSafe", "magazine" }, 1 }
{ { "Safes", "CfgLootTable" }, 1 }
};
};
@ -1563,7 +1571,7 @@ class CfgLootTable_CUP
{ { "BaseBuilding", "CfgLootTable" }, 20 },
{ { "GenericLarge", "CfgLootTable" }, 24 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "Generic", "CfgLootTable" }, 10 },
{ { "Tools", "CfgLootTable" }, 19 }
};

View File

@ -80,6 +80,14 @@ class CfgLootTable_MAD
{ { "FAK", "magazine" }, 20 }
};
};
class Safes
{
items[] = {
{ { "ItemSafe", "magazine" }, 1 },
// { { "ItemSafe_s", "magazine" }, 1 }, // Variant with less Load than the normal Safe
{ { "ItemGunSafe", "magazine" }, 1 }
};
};
class Repairs
{
items[] = {
@ -329,7 +337,7 @@ class CfgLootTable_MAD
{ { "ItemBattery", "magazine" }, 5 },
{ { "ItemCables", "magazine" }, 5 },
{ { "ItemPipe", "magazine" }, 5 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemBarrelE", "magazine" }, 1 }
@ -340,7 +348,7 @@ class CfgLootTable_MAD
{
items[] = {
{ { "VehicleDocs", "CfgLootTable" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "jerrycan_epoch", "magazine" }, 5 },
{ { "CircuitParts", "magazine" }, 6 },
@ -990,7 +998,7 @@ class CfgLootTable_MAD
{ { "KitCinderWall", "magazine" }, 5 },
{ { "KitFoundation", "magazine" }, 5 },
{ { "KitWoodFoundation", "magazine" }, 14 },
{ { "ItemSafe", "magazine" }, 1 }
{ { "Safes", "CfgLootTable" }, 1 }
};
};
@ -1003,7 +1011,7 @@ class CfgLootTable_MAD
{ { "BaseBuilding", "CfgLootTable" }, 20 },
{ { "GenericLarge", "CfgLootTable" }, 24 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "Generic", "CfgLootTable" }, 10 },
{ { "Tools", "CfgLootTable" }, 19 }
};

View File

@ -80,6 +80,14 @@ class CfgLootTable_MADCUP
{ { "FAK", "magazine" }, 20 }
};
};
class Safes
{
items[] = {
{ { "ItemSafe", "magazine" }, 1 },
// { { "ItemSafe_s", "magazine" }, 1 }, // Variant with less Load than the normal Safe
{ { "ItemGunSafe", "magazine" }, 1 }
};
};
class Repairs
{
items[] = {
@ -424,7 +432,7 @@ class CfgLootTable_MADCUP
{ { "ItemBattery", "magazine" }, 5 },
{ { "ItemCables", "magazine" }, 5 },
{ { "ItemPipe", "magazine" }, 5 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemBarrelE", "magazine" }, 1 }
};
};
@ -433,7 +441,7 @@ class CfgLootTable_MADCUP
{
items[] = {
{ { "VehicleDocs", "CfgLootTable" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "jerrycan_epoch", "magazine" }, 5 },
{ { "CircuitParts", "magazine" }, 6 },
@ -1557,7 +1565,7 @@ class CfgLootTable_MADCUP
{ { "KitCinderWall", "magazine" }, 5 },
{ { "KitFoundation", "magazine" }, 5 },
{ { "KitWoodFoundation", "magazine" }, 14 },
{ { "ItemSafe", "magazine" }, 1 }
{ { "Safes", "CfgLootTable" }, 1 }
};
};
@ -1570,7 +1578,7 @@ class CfgLootTable_MADCUP
{ { "BaseBuilding", "CfgLootTable" }, 20 },
{ { "GenericLarge", "CfgLootTable" }, 24 },
{ { "ItemLockbox", "magazine" }, 4 },
{ { "ItemSafe", "magazine" }, 1 },
{ { "Safes", "CfgLootTable" }, 1 },
{ { "Generic", "CfgLootTable" }, 10 },
{ { "Tools", "CfgLootTable" }, 19 }
};

View File

@ -1,6 +1,34 @@
# Change Log
All changes for [Arma 3](https://arma3.com/) [Epoch Mod](https://epochmod.com) are listed in this changelog.
## [1.3.1.0] - 2019-03-28
### Added
- Upgradeable PlotPoles (S/M/L/XL/XXL) with different Range / Limits
- https://plays.tv/video/5c9925a6770ac037e4
- On entering temp Vehicles, Payers will get a hint "Vehicle will despawn after restart"
- 2nd Variant of a lockable Safe "GunSafe_EPOCH"
- https://plays.tv/video/5c9926466b9589c5c6
- License Plates of Vehicles can now be changed by Dyna-Menu (Space-Menu)
- https://plays.tv/video/5c99293fdea086f319
- Put Krypto to ground (within Inventory)
- https://plays.tv/video/5c992604c58e543366
### Fixed
- Prevent Traders from spawning on containers
- Advanced Vehicle Repair was not working as expected within custom "SafeZones"
- Reset Toxic after revive
- Delay for accurate position on swap building while basebuilding
### Changed
### Server Owners
- Configs for upgradeable PlotPoles are located in ("CfgEpochclient" >> "CfgJammers")
- Fixed BE-Kicks in DLC Shop
- Another login stuck fix (Loadabs-Check)
- Added possibility the usage of "Krypto" as needed material for building upgrades
- Example CfgBaseBuilding:
- upgradeBuilding[] = {{"PlotPole_L_EPOCH",{{"Krypto",1500}}}};
- Fixed Ban for "commandMenu - RscMenuEngage"
- New var "AutoLockStorages" in epochconfig.hpp to auto-lock storages on server start
- Added optional safe variant with less Load than the normal Safe "ItemSafe_s"
## [1.3.0.0] - 2019-01-31
### Added
- Several A2 Vehicles ported into Epoch