Merge pull request #477 from EpochModTeam/experimental

Release 0.3.7
This commit is contained in:
vbawol 2016-01-28 14:25:22 -06:00
commit 41a7c87a7a
245 changed files with 63541 additions and 4017 deletions

View File

@ -1,7 +1,72 @@
WIP
[Added] Hotwire Kit
[Added] Key Makers Kit
[Added] Keys in colors: (Black,Red,Green,Blue,Yellow)
[Added] 55 Gallon Fuel Barrel (Full/Empty)
[Added] Metal Pipes
[Added] Documents (Trash,Vehicle Upgrades)
**Client**
[Added] Drinking a Soda now returns a Empty Soda Can (ItemSodaEmpty).
[Added] Eating a can of food now returns a Empty Tin Can (ItemEmptyTin).
[Added] Repack magazines feature. Simply select a magazine and press the "Repack" button.
[Added] 55 Gallon (210 liters) Fuel Barrel that can be used to refill/siphon vehicles. (Full - ItemBarrelF,Empty - ItemBarrelE).
[Added] Ability to siphon fuel from other fuel sources like gas stations and gas tanks (transportFuel > 0).
[Added] Crafting Burlap (ItemBurlap) from 2x Hemp (ItemKiloHemp) while at a workbench.
[Added] Crafting of Plywood sheets (ItemPlywoodPack) from 3x Wood Log (WoodLog_EPOCH).
[Added] Crafting of Aluminum Bars (ItemAluminumBar) from 6x Empty Soda Cans (ItemSodaEmpty) and one jar of water (water_epoch). Also requires a fire nearby.
[Added] Crafting of Tin Bars (ItemTinBar) from 6x Empty Soda Cans (ItemEmptyTin) and one jar of water (water_epoch). Also requires a fire nearby.
[Added] Copper Bars (ItemCopperBar) that can be crafted from cables (ItemCables) nearby a fire. Cables can also be made from Copper Bars at a workbench.
[Added] Briefcase Full (ItemBriefcaseGold100oz) crafted from ten 10oz Gold bars and a Empty Briefcase (ItemBriefcaseE).
[Added] Crafting of Bars (ItemGoldBar and ItemSilverBar) from Gold (PartOreGold) and Silver (PartOreSilver) Ores.
[ADDED-WIP] Pack/unpack empty backpacks into carryable magazine items.
[ADDED-WIP] Hotwire Kit (ItemHotwire).
[ADDED-WIP] Key Makers Kit (ItemKeyKit).
[ADDED-WIP] Keys in colors: (Black ItemKey,ItemKeyRed,ItemKeyGreen,ItemKeyBlue,ItemKeyYellow).
[ADDED-WIP] Metal Pipes (ItemPipe).
[ADDED-WIP] Documents (Trash,Books,Vehicle Upgrades) (ItemDoc1-8, ItemVehDoc1-4).
[ADDED-WIP] Light Bulb (ItemBulb).
[Changed] Upgrading wood Stud wall and Tower to Plywood covered versions requires Plywood (ItemPlywoodPack).
[Changed] Debug monitor now shows all custom stats dynamically based on 'customVarsDefaults' config.
[Changed] Increased angle that the player is able to aim up.
[Changed] Drinking Alcohol increases the new "Alcohol" stat instead of directly effecting blood pressure.
[Changed] Crafting Hesco barrier now require 3x Burlap.
[Changed] Crafting wood and metal spike traps now also require Sticks and a Hydraulic Jack.
[Changed] Change all publicVariableServer calls to use remoteExec calls for better performance.
[Fixed] Previous patch had incorrectly reduced armor values of the Cultist.
[Fixed] Male(Female) characters lose vest items after equipping opposite sex's vest.
[Fixed] Secure storage locking mechanism improvements should prevent any unwanted intrusions.
[Fixed] Reworked login to prevent getting stuck at "waiting for inventory".
[Fixed] Prevented death just after revive due still having high blood pressure.
[Fixed] Incorrectly being able to sell/buy items from a dead trader.
[Fixed] Snakes now require line of sight to bite player.
[Fixed] Custom epoch swing animations for Hatchet and sledge now work correctly.
[Fixed] Boss Sapper incorrectly cleaned up before detonation.
**Server**
[Added] Newly world spawned vehicles now have randomized damage.
[Added] if 5th array element is true 'telePos' config array can now use world position for teleport pads location.
[Added] Setting to control random magazine ammo counts in loot spawner. CfgEpochClient -> randomizeMagazineAmmoCount (default: true)
[Added] Debug box now dynamically spawns with flood lights to help players see inside the box at night.
[Added] CfgEpochClient 'WorldInteractions' config now stores all environmental loot classes and types for all supported maps.
[Added] CUP terrain pack support added:
- Sahrani
- Southern Sahrani
- United Sahrani
- Porto
- Utes
- Chernarus
- Chernarus Summer
- Desert
- Takistan
- Zargabad
- Shapur
- Proving Grounds
- Bukovina
- Bystrica
- Takistan Mountains
[Info] For CUP, use double quotes around mod for spaces in folder Example: -mod="@Epoch;@CUP Terrains - Core;@CUP Terrains - Maps;"
[Changed] Removed support for AIA terrain pack in favor of CUP terrain pack.
[Changed] Empty fuel barrel added to large trash and vehicle loot tables.
[Changed] Earthquakes with mineral veins spawn chances increased with less players.
[Changed] Driver or passengers of a driverless can now control vehicle locks. Also only the owner can control locks from outside of a occupied vehicle.
[Changed] Commented out Halloween masks from loot tables.
[Changed] Player positions in database now use Epoch precision position functions.
[Updated] New Battleye remoteExec.txt for added remoteExec calls.
[Fixed] Admin tools map AI markers not working.
[Fixed] Static propPos campfires not working on Takistan due to disabled simulation.
[Fixed] When killed instead of saving blank array delete (object,trader,vehicle) data from database.
[Info] Removed old .bikey and added new one for 0370.

View File

@ -1,2 +1,9 @@
Arma 3: Epoch Mod is licensed under:
http://creativecommons.org/licenses/by-nc-nd/4.0/
Epoch Mod for Arma 3
http://epochmod.com
by Epoch Mod Team
https://github.com/EpochModTeam/Epoch
The contents of this github are under the following license:
http://www.bistudio.com/community/licenses/arma-public-license-share-alike
Keep this file and file headers with attribution intact for proper use.

View File

@ -10,8 +10,8 @@ https://github.com/EpochModTeam/Epoch/releases
License:
=====
Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
http://creativecommons.org/licenses/by-nc-nd/4.0/
Arma Public License Share Alike (APL-SA).
http://www.bistudio.com/community/licenses/arma-public-license-share-alike
Developers
=====

File diff suppressed because one or more lines are too long

View File

@ -5,7 +5,7 @@ StorageSlotsLimit = 1500; // Max storage slots allowed. Warning! Higher the numb
BuildingSlotsLimit = 1500; // Max building slots allowed. Warning! Higher the number lower performance.
// Time based
StaticDateTime[] = {2035,6,10,7,0}; // {0,0,0,8,0} would forces the server to start at 8am each time it is started while allowing the year, month and day to stay real time. Any values left at 0 will result in no change.
StaticDateTime[] = {}; // {0,0,0,8,0} would forces the server to start at 8am each time it is started while allowing the year, month and day to stay real time. Any values left at 0 will result in no change.
timeDifference = 0; // Server uses real time this will allow you to offset just the hour.
timeMultiplier = 4; // Sets a time multiplier for in-game time. The command range is now capped at 0.1 - 120 to avoid performance problems.
lootMultiplier = 0.5; // 1 = max loot bias. This controls how much loot can payout per Epoch loot container.

View File

@ -0,0 +1,17 @@
@ECHO OFF
SET STEAMUN=admin@youremail.net
SET STEAMPW=chamgeme
SET ARMASVRPATH=C:\Arma3Server
::(Full client\server package)
SET ARMAAPPID=107410
::(Dedicated server package)
::SET ARMAAPPID=233780
::(Development version)
::SET ARMAAPPID=107410 -beta development
:: more info https://community.bistudio.com/wiki/Arma_3_Dedicated_Server
steamcmd.exe +login %STEAMUN% %STEAMPW% +force_install_dir "%ARMASVRPATH%" "+app_update %ARMAAPPID%" validate +quit

View File

@ -0,0 +1,22 @@
@ECHO OFF
SET STEAMUN=admin@youremail.net
SET STEAMPW=chamgeme
SET ARMASVRPATH=C:\Arma3Server
SET ARMAAPPID=107410
:: Use -mod line with quotes to support spaces in folder
:: Example: -mod=@Epoch;@bornholm;
:: Install Bornholm
SET MODFOLDER=@bornholm
SET ARMAWORKSHOPID=428181330
:: remove old folder
rd /s/q "%ARMASVRPATH%\%MODFOLDER%"
:: update workshop mod
START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% +quit
:: copy files back to server
xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\%MODFOLDER%"

View File

@ -0,0 +1,37 @@
@ECHO OFF
SET STEAMUN=admin@youremail.net
SET STEAMPW=chamgeme
SET ARMASVRPATH=C:\Arma3Server
SET ARMAAPPID=107410
:: Use -mod line with quotes to support spaces in folder
:: Example: -mod="@Epoch;@CUP Terrains - Core;@CUP Terrains - Maps;"
:: Install CUP CORE
SET MODFOLDER=@CUP Terrains - Core
SET ARMAWORKSHOPID=583496184
:: remove old folder
rd /s/q "%ARMASVRPATH%\%MODFOLDER%"
:: update workshop mod
START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% +quit
:: copy files back to server
xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\%MODFOLDER%"
:: Install CUP MAPS
SET MODFOLDER=@CUP Terrains - Maps
SET ARMAWORKSHOPID=583544987
:: remove old folder
rd /s/q "%ARMASVRPATH%\%MODFOLDER%"
:: update workshop mod
START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% +quit
:: copy files back to server
xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\%MODFOLDER%"

View File

@ -3,12 +3,17 @@ SET STEAMUN=admin@youremail.net
SET STEAMPW=chamgeme
SET ARMASVRPATH=C:\Arma3Server
SET ARMAAPPID=107410
:: Workshop IDs:
:: EpochExperimental = 455221958
:: Normal Epoch = 421839251
SET ARMAWORKSHOPID=421839251
:: remove mod folder
rd /s/q "%ARMASVRPATH%\@Epoch"
:: update workshop mod
START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% validate +quit
:: copy files back to server
:: copy mod from steamcmd cache to server
xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\@Epoch"
:: steamcmd.exe +login %STEAMUN% %STEAMPW% +force_install_dir "%ARMASVRPATH%" "+app_update %ARMAAPPID%" validate +quit

View File

@ -0,0 +1,23 @@
@ECHO OFF
SET STEAMUN=admin@youremail.net
SET STEAMPW=chamgeme
SET ARMASVRPATH=C:\Arma3Server
SET ARMAAPPID=107410
:: Requires CUP CORE and MAPS!
:: Use -mod line with quotes to support spaces in folder
:: Example: -mod="@Epoch;@CUP Terrains - Core;@CUP Terrains - Maps;@esseker"
:: Install Esseker
SET MODFOLDER=@esseker
SET ARMAWORKSHOPID=498101407
:: remove old folder
rd /s/q "%ARMASVRPATH%\%MODFOLDER%"
:: update workshop mod
START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% +quit
:: copy files back to server
xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\%MODFOLDER%"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
5 "" !="epoch_server_save_vehicles \[.+\]"
5 "" !="epoch_server_checkplayer [A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3} \(.+\) REMOTE" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer) \[.+\]"

View File

@ -1,8 +1,7 @@
//new2
7 EPOCH_C_SET !="!isNil \"EPOCH_C_SET\"" !="_array = EPOCH_C_SET;" !="EPOCH_C_SET = nil;"
7 EPOCH_GROUP_Delete_PVS !="EPOCH_GROUP_Delete_PVS = [player,Epoch_personalToken];"
7 "BIS_fnc_dynamictext" !="\"BIS_fnc_dynamictext"\" !", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;" !", 0, 0.4, 5, 2, 0, 2] spawn bis_fnc_dynamictext;" !", 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" !"snil '_fnc_scriptName') then {_fnc_scriptName}"
7 forceRespawn
7 forceRespawn !="reviveHandleForceRespawnAction"
7 setFriend
7 setAmmo
7 RscDebugConsole_watch !="RscDebugConsole_watchSave = [true,true,true,true];"
@ -22,9 +21,9 @@
7 allowDamage !="_unit allowDamage false;" !="_unit allowDamage true;" !="player allowDamage true;" !="vehicle player allowDamage true;" !="player allowDamage false;"
7 addWeaponCargo !="_acceptHolder addWeaponCargo [_wWeapon, 1] ;"
7 onMapSingleClick !="onMapSingleClick '';"
7 addMagazine !"addMagazineCargo" !="player addMagazine _craftItem;" !="player addMagazine \"jerrycanE_epoch\";" !="player addMagazine \"emptyjar_epoch\";" !="player addMagazine \"jerrycan_epoch\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine [(_x select 0),(_x select 1)]" !="player addMagazine _x;" !="if !(player canAdd (_x select 0)) exitWith {};\nplayer addMagazine[_x select 0, _x select 1];"
7 addMagazine !"addMagazineCargo" !="player addMagazine [_item, _magazineSizeMax];" !="player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)];" !="player addMagazine [(_x select 0),(_x select 1)]" !="player addMagazine \"sledge_swing\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine \"stick_swing\";"
7 addMagazineCargo !"_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;"
7 addItem !="player addItem _item;" !="player addItem _craftItem;" !="player addItem _x;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow"
7 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow"
7 addBackPack
7 addMissionEventHandler !="addMissionEventHandler ['Draw3D',_var + \"call Epoch_gui3DCooldownEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dModelPosEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dWorldPosEH;\"];" !="addMissionEventHandler [\n"ended",\n{\n\nBIS_fnc_missionHandlers_end = _this;"
7 removeMissionEventHandler !="removeMissionEventHandler [\"Draw3D\", _id];"
@ -32,7 +31,7 @@
7 removeAllItems
7 removeAllActions
7 setViewDistance !"setViewDistance 1600"
7 createGroup !="_grp = createGroup RESISTANCE;" !="if (isserver) then {\n_group = creategroup sidelogic;" !="grpVIPGeneral = createGroup RESISTANCE;" !="_grp = createGroup side _plyr;" !="_grp = createGroup side player;" !="_grp = createGroup _side;" !="_grp = createGroup (side _plyr);" !="createcenter sidelogic;\n_grpLogic = creategroup sidelogic;\nbis_functions_mainscope"
7 createGroup !="EPOCH_server_createGroup" !="_grp = createGroup RESISTANCE;" !="if (isserver) then {\n_group = creategroup sidelogic;" !="grpVIPGeneral = createGroup RESISTANCE;" !="_grp = createGroup side _plyr;" !="_grp = createGroup side player;" !="_grp = createGroup _side;" !="_grp = createGroup (side _plyr);" !="createcenter sidelogic;\n_grpLogic = creategroup sidelogic;\nbis_functions_mainscope"
7 createVehicleCrew
7 createVehicleLocal !"\"#particlesource\" createVehicleLocal" !"\"#lightpoint\" createVehicleLocal" !"\"BloodSplat\" createVehicleLocal" !"[\"lightning1_F\", \"lightning2_F\"] call BIS_fnc_selectRandom;\n_lighting = _class createVehicleLocal"
7 createUnit !="_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, \"FORM\"];" !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit ["I_officer_F", axeGeneralPos, [], 1, "CAN_COLLIDE"];"
@ -51,8 +50,8 @@
7 displaySetEventHandler
7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," !="_ctrl ctrlSetEventHandler [\"mouseEnter\""
7 addMPEventHandler
7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"FiredNear" !"EpeContactStart" !"InventoryClosed" !"GetOut" !"InventoryOpened" !"local" !"Respawn" !"Put" !"Take" !"Fired" !"Killed" !" [\"PostReset\",{BIS_EnginePPReset = true;} ];" !"_logic addeventhandler [\n\"local\""
7 displayAddEventHandler !"[_display] call _fnc_animate;" !"tVersion select 4) == \"Development\") then" !"_display displayaddeventhandler\n[\n\"mousemoving\"," !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"_this call EPOCH_KeyDown\"];" !="_addCase = _display46 displayAddEventHandler ['KeyDown',{_this call EPOCH_KeyDown;}];" !"_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'"
7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"[\"FiredNear"\" !"[\"EpeContactStart"\" !"[\"GetOut"\" !"[\"local"\" !"[\"PostReset"\" !"[\"TaskSetAsCurrent"\" !="player addEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];"
7 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="_display displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !"[_display] call _fnc_animate;" !"tVersion select 4) == \"Development\") then" !"_display displayaddeventhandler\n[\n\"mousemoving\"," !="_addCase = _display46 displayAddEventHandler ['KeyDown',{_this call EPOCH_KeyDown;}];" !"_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'"
7 ctrlAddEventHandler !"rCfg >> \"refreshDelay\");" !" [\n\"draw\"," !" [\"buttonclick\"," !="(uiNamespace getVariable 'ESP_map') ctrlAddEventHandler['Draw', '_esp_targets = EPOCH_ESPMAP_TARGETS;" !="ctrlAddEventHandler ['MouseButtonDown'" !="(_display displayctrl _idc) ctrlAddEventHandler [\"LBSelChanged\"," !="_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)])];"
7 removeAllEventHandlers !="ctrlRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_unit removeAllEventHandlers \"Hit\";\n_unit removeAllEventHandlers \"FiredNear\";" !="_display46 displayRemoveAllEventHandlers 'KeyDown';"
7 removeAllMissionEventHandlers

View File

@ -1,14 +1,14 @@
// EPOCH SERVER CONFIG
// GLOBAL SETTINGS
hostname = "EpochMod.com (0.3.6|1.54) ID02 YourHost";
hostname = "EpochMod.com (0.3.7|1.54) ID02 YourHost";
password = "";
passwordAdmin = "!CHANGE_THIS_PASSWORD!";
serverCommandPassword = "!CHANGE_THIS_PASSWORD!";
logFile = "A3Master.log";
verifySignatures = 2;
BattlEye = 1;
requiredBuild = 133570;
requiredBuild = 133741;
// WHITELIST FILE TYPES
allowedLoadFileExtensions[] = {:};

View File

@ -222,7 +222,7 @@ class FSM
" _sound = _sounds select (floor (random (count _sounds)));" \n
" _animalAgent say3D _sound;" \n
" EPOCH_say3D_PVS = [player, _animalAgent, (EPOCH_sounds find _sound),Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" };" \n
"};" \n
"" \n
@ -358,7 +358,7 @@ class FSM
" if (_isDog) then {" \n
" _animalAgent say3D ""dog_cry"";" \n
" EPOCH_say3D_PVS = [player, _animalAgent, 3,Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" };" \n
" };" \n
" _courageTest = false;" \n
@ -369,7 +369,7 @@ class FSM
" if (_isDog) then {" \n
" _animalAgent say3D ""dog_bark"";" \n
" EPOCH_say3D_PVS = [player, _animalAgent, 2,Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" _animalAgent playMoveNow ""Dog_Bark""; " \n
" };" \n
" _animalAgent setDir _dirTo; " \n
@ -379,7 +379,7 @@ class FSM
" if (random 1 < 0.5) then { " \n
" _animalAgent say3D ""dog_bark"";" \n
" EPOCH_say3D_PVS = [player, _animalAgent, 2,Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" };" \n
" };" \n
"};"/*%FSM</STATEINIT""">*/;

View File

@ -451,7 +451,7 @@ class FSM
"" \n
"_copter say3D ""drone_alert0"";" \n
"EPOCH_say3D_PVS = [player, _copter, 10,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"" \n
"_troopsOnGround = true;" \n
"(driver _copter) action [""lightOn"", _copter];" \n

View File

@ -688,7 +688,7 @@ class FSM
"if((random 100) < (_countNrPlyrs * 10))then{" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
""/*%FSM</STATEINIT""">*/;
@ -730,7 +730,7 @@ class FSM
"if (floor(random 100)< 8) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_hunger = _hunger + 2;" \n
"};" \n
"" \n
@ -790,7 +790,7 @@ class FSM
"if (floor(random 100)<_dogNoise) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"" \n
@ -850,7 +850,7 @@ class FSM
"if (floor(random 100) < 6) then {" \n
"[_dog, _plyr] say3D ""dog_bark"";" \n
"EPOCH_say3D_PVS = [player, _dog, 2,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if (floor(random 100)<_forgive) then {" \n
@ -976,7 +976,7 @@ class FSM
"if (floor(random 100)<_dogNoise) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_criteria = ""(moveToCompleted _dog) || (_dog distance _moveTo < 1.5)"";" \n
@ -1052,7 +1052,7 @@ class FSM
"if (floor(random 75)<_dogNoise) then {" \n
"[_dog, _plyr] say3D ""dog_cry_quiet"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_dirTo = [_dog, getPos (_nrPlyrs select 1)] call BIS_fnc_dirTo;" \n
@ -1092,7 +1092,7 @@ class FSM
"if (_rnd < 42) then {" \n
"[_dog, _plyr] say3D ""dog_bark"";" \n
"EPOCH_say3D_PVS = [player, _dog, 18,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if (_rnd < 6) then {" \n
@ -1226,20 +1226,20 @@ class FSM
"if (_rnd< 12) then {" \n
"[_dog, _plyr] say3D ""dog_bark"";" \n
"EPOCH_say3D_PVS = [player, _dog, 2,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if (_rnd < 6) then {" \n
"_hunger = _hunger + 1;" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 3,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if ((_hunger > 56) && (_rnd < 48)) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 2,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"" \n
@ -1319,8 +1319,8 @@ class FSM
init = /*%FSM<STATEINIT""">*/"{" \n
" if !(alive _x) then {" \n
" if ((_x isKindOf ""Animal_Base_F"" && !(_x isKindOf ""Dog_Base_F"")) || (typeOf _x) in[""Epoch_Sapper_F"", ""Epoch_SapperB_F"", ""Epoch_Cloak_F"", ""I_UAV_01_F""]) then {" \n
" EPOCH_lootAnimal = [_x, player, Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_lootAnimal"";" \n
" [_x, player, Epoch_personalToken] remoteExec [""EPOCH_server_lootAnimal"",2];" \n
"" \n
" };" \n
" };" \n
"" \n

View File

@ -387,8 +387,8 @@ class FSM
{
name = "do_drop";
init = /*%FSM<STATEINIT""">*/"" \n
"EPOCH_airDropCrate_PVS = [_axeCopter,_plyr,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_airDropCrate_PVS"";" \n
"" \n
"[_axeCopter,_plyr,Epoch_personalToken] remoteExec [""EPOCH_server_airDropCrate"",2];" \n
"" \n
"_dropDone = true;" \n
"" \n
@ -467,8 +467,8 @@ class FSM
"" \n
"_dropPos = _plyrPos;" \n
"" \n
"EPOCH_createAirDrop_PVS = [player,Epoch_personalToken,_startPos];" \n
"publicVariableServer ""EPOCH_createAirDrop_PVS"";" \n
"" \n
"[player,Epoch_personalToken,_startPos] remoteExec [""EPOCH_Server_createAirDrop"",2];" \n
"" \n
"" \n
"_axeCopter = objNull;" \n
@ -717,4 +717,4 @@ class FSM
"end"
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/

View File

@ -320,7 +320,7 @@ class FSM
"" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_doInterrupt = {" \n
@ -739,7 +739,7 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_sapper,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_sapper playMoveNow ""Unconscious"";" \n
"" \n
""/*%FSM</STATEINIT""">*/;
@ -1206,8 +1206,8 @@ class FSM
"_bomb = createVehicle [""Sapper_Charge_Ammo"", (getposATL _nestMate), [], 0, ""CAN_COLLIDE""] ; " \n
"_bomb attachTo [_nestMate, [0,0,0],""Pelvis""];" \n
"_nestMate setVariable [""bomb"",_bomb];" \n
"EPOCH_TEMPOBJ_PVS = _nestMate;" \n
"publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
"[_nestMate] remoteExec [""EPOCH_localCleanup"",2];" \n
"_nestMate disableAI ""TARGET"";" \n
"_nestMate disableAI ""AUTOTARGET"";" \n
"_nestMate disableAI ""FSM"";" \n
@ -1246,8 +1246,8 @@ class FSM
"" \n
"[_nrBuild, _sapper] spawn {" \n
"sleep 6;" \n
"EPOCH_SapperObjs_PVS = [_this select 0, player, Epoch_personalToken,_this select 1];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
"" \n
"[_this select 0, player, Epoch_personalToken,_this select 1] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"};" \n
"" \n
"{" \n
@ -1255,15 +1255,15 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_x say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_x,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_x playMoveNow ""Unconscious"";" \n
"" \n
"_x spawn {" \n
"sleep floor (random 3);" \n
"_sBomb = _this getVariable [""bomb"",objNull];" \n
"" \n
"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_this,_this];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
"" \n
"[_sBomb, player, Epoch_personalToken,_this,_this] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_finalPos = getPosATL _this;" \n
"_finalDir = getDir _this;" \n
@ -1369,8 +1369,8 @@ class FSM
class do_boom
{
name = "do_boom";
init = /*%FSM<STATEINIT""">*/"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_sapper,_sapper];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
init = /*%FSM<STATEINIT""">*/"" \n
"[_sBomb, player, Epoch_personalToken,_sapper,_sapper] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_sBomb = objNull;" \n
"_finalPos = getPosATL _sapper;" \n
@ -1636,7 +1636,7 @@ class FSM
" _sound = ""sapper_groan2"";" \n
" _sapper say3D _sound;" \n
" EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
""/*%FSM</ACTION""">*/;
};

View File

@ -1,4 +1,4 @@
/*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sapperAlt">*/
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sapperAlt">*/
/*%FSM<HEAD>*/
/*
item0[] = {"sapper",0,250,-225.000000,-325.000000,-125.000000,-275.000000,0.000000,"sapper"};
@ -35,12 +35,12 @@ item30[] = {"stalking",4,218,-50.000000,50.000000,50.000000,100.000000,5.000000,
item31[] = {"Wait_random",4,218,-225.000000,-200.000000,-125.000000,-150.000000,10.000000,"Wait random"};
item32[] = {"groan",4,218,200.000000,375.000000,300.000000,425.000000,5.000000,"groan"};
item33[] = {"detonate",4,218,125.000000,-350.000000,225.000000,-300.000000,70.000000,"detonate"};
item34[] = {"end",1,250,975.000000,0.000000,1075.000000,50.000000,0.000000,"end"};
item35[] = {"Wait_to_delete",4,218,975.000000,150.000000,1075.000000,200.000000,10.000000,"Wait to delete"};
item34[] = {"end",1,250,1050.000000,-25.000000,1150.000000,25.000000,0.000000,"end"};
item35[] = {"Wait_to_delete",4,218,1050.000000,125.000000,1150.000000,175.000000,10.000000,"Wait to delete"};
item36[] = {"handle_dispose",2,250,525.000000,125.000000,625.000000,175.000000,0.000000,"handle dispose"};
item37[] = {"Wait_1_5_sec",4,218,650.000000,300.000000,750.000000,350.000000,0.000000,"Wait" \n "1.5 sec"};
item38[] = {"do_boom",2,4346,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
item39[] = {"_",8,218,800.000000,300.000000,850.000000,325.000000,0.000000,""};
item37[] = {"Wait_1_5_sec",4,218,525.000000,350.000000,625.000000,400.000000,0.000000,"Wait" \n "1.5 sec"};
item38[] = {"do_boom",2,250,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
item39[] = {"_",8,218,800.000000,225.000000,875.000000,275.000000,0.000000,""};
item40[] = {"do_groan",2,250,225.000000,500.000000,325.000000,550.000000,0.000000,"do groan"};
item41[] = {"do_stalk",2,250,-200.000000,50.000000,-100.000000,100.000000,0.000000,"do stalk"};
item42[] = {"do_loiter_big",2,250,350.000000,500.000000,450.000000,550.000000,0.000000,"do loiter big"};
@ -63,7 +63,9 @@ item58[] = {"feeling",4,218,775.000000,-50.000000,875.000000,0.000000,50.000000,
item59[] = {"charging",4,218,-50.000000,225.000000,50.000000,275.000000,5.000000,"charging"};
item60[] = {"stalk",4,218,375.000000,-275.000000,475.000000,-225.000000,20.000000,"stalk"};
item61[] = {"not_shot",4,218,900.000000,125.000000,1000.000000,175.000000,10.000000,"not shot"};
item62[] = {"finished_boom",2,250,900.000000,225.000000,1000.000000,275.000000,0.000000,"finished boom"};
item62[] = {"finished_boom",2,250,900.000000,300.000000,1000.000000,350.000000,0.000000,"finished boom"};
item63[] = {"Wait_for_Explosi",4,218,650.000000,350.000000,750.000000,400.000000,0.000000,"Wait for Explosion"};
item64[] = {"Remove_corpse",2,4346,775.000000,300.000000,875.000000,350.000000,0.000000,"Remove corpse"};
link0[] = {0,31};
link1[] = {1,2};
link2[] = {2,3};
@ -126,7 +128,7 @@ link58[] = {35,34};
link59[] = {36,57};
link60[] = {36,61};
link61[] = {37,38};
link62[] = {38,39};
link62[] = {38,63};
link63[] = {39,62};
link64[] = {40,6};
link65[] = {41,30};
@ -154,8 +156,10 @@ link86[] = {59,4};
link87[] = {60,2};
link88[] = {61,62};
link89[] = {62,35};
globals[] = {25.000000,1,0,0,16777215,640,480,1,248,6316128,1,-343.543304,1069.998291,679.913574,-353.385406,1000,731,1};
window[] = {2,-1,-1,-1,-1,542,56,1081,17,3,1018};
link90[] = {63,64};
link91[] = {64,39};
globals[] = {25.000000,1,0,0,16777215,640,480,1,253,6316128,1,-209.204178,1204.337524,679.913574,-353.385406,1000,880,1};
window[] = {2,-1,-1,-1,-1,655,130,1155,130,3,1018};
*//*%FSM</HEAD>*/
class FSM
{
@ -267,7 +271,7 @@ class FSM
"" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_doInterrupt = {" \n
@ -633,7 +637,7 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_sapper,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_sapper playMoveNow ""Unconscious"";" \n
"" \n
""/*%FSM</STATEINIT""">*/;
@ -1040,25 +1044,19 @@ class FSM
class do_boom
{
name = "do_boom";
init = /*%FSM<STATEINIT""">*/"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_sapper,_sapper];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
"" \n
"_sBomb = objNull;" \n
"" \n
"deleteVehicle _sapper;" \n
"" \n
init = /*%FSM<STATEINIT""">*/"[_sBomb, player, Epoch_personalToken,_sapper,_sapper] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"_doneBoom = true;" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
/*%FSM<LINK "Wait_for_Explosi">*/
class Wait_for_Explosi
{
priority = 0.000000;
to="finished_boom";
to="Remove_corpse";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"isNull(_sBomb)"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@ -1269,7 +1267,7 @@ class FSM
" _sound = ""sapper_groan2"";" \n
" _sapper say3D _sound;" \n
" EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
""/*%FSM</ACTION""">*/;
};
@ -1409,11 +1407,32 @@ class FSM
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "Remove_corpse">*/
class Remove_corpse
{
name = "Remove_corpse";
init = /*%FSM<STATEINIT""">*/"deleteVehicle _sapper;"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
{
priority = 0.000000;
to="finished_boom";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
};
initState="sapper";
finalStates[] =
{
"end"
"end",
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/

View File

@ -974,8 +974,8 @@ class FSM
"" \n
"_plyr spawn {" \n
"uiSleep 12;" \n
"EPOCH_FillContainer_PVS = [_this,Epoch_personalToken,objNull,false,15];" \n
"publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
"" \n
"[_this,Epoch_personalToken,objNull,false,15] remoteExec [""EPOCH_server_fillContainer"",2];" \n
"//hint ""Paying Out"";" \n
"};" \n
"" \n

View File

@ -1021,8 +1021,8 @@ class FSM
init = /*%FSM<STATEINIT""">*/"titleText [_wDiag,""PLAIN"", 6];" \n
"" \n
"" \n
"EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,objNull,false,25];" \n
"publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
"" \n
"[_plyr,Epoch_personalToken,objNull,false,25] remoteExec [""EPOCH_server_fillContainer"",2];" \n
"" \n
"if (_act != """") then {" \n
"call compile _act;" \n
@ -1319,8 +1319,8 @@ class FSM
"" \n
"_copterPos = (getPosATL _plyr) findEmptyPosition [1,500,""I_Heli_light_03_unarmed_EPOCH""];" \n
"" \n
"EPOCH_createObject_PVS = [player,Epoch_personalToken,_uavclass,true,_copterPos,""CAN_COLLIDE"","""","""","""","""",true];" \n
"publicVariableServer ""EPOCH_createObject_PVS"";" \n
"" \n
"[player,Epoch_personalToken,_uavclass,true,_copterPos,""CAN_COLLIDE"","""","""","""","""",true] remoteExec [""EPOCH_Server_createObject"",2];" \n
"" \n
"" \n
"" \n

View File

@ -502,8 +502,8 @@ class FSM
"_boats = [];" \n
"_findTimer = diag_TickTime;" \n
"" \n
"EPOCH_createObject_PVS = [player,Epoch_personalToken,""I_Boat_Armed_01_minigun_F"",true,axeGeneralBoatPos,""CAN_COLLIDE"","""","""","""","""",true];" \n
"publicVariableServer ""EPOCH_createObject_PVS"";" \n
"" \n
"[player,Epoch_personalToken,""I_Boat_Armed_01_minigun_F"",true,axeGeneralBoatPos,""CAN_COLLIDE"","""","""","""","""",true] remoteExec [""EPOCH_Server_createObject"",2];" \n
"" \n
"" \n
""/*%FSM</ACTION""">*/;
@ -877,8 +877,8 @@ class FSM
"_wDiag = """";" \n
"_wDiag2 = """";" \n
"" \n
"EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,axeGeneralsBoat,false,25];" \n
"publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
"" \n
"[_plyr,Epoch_personalToken,axeGeneralsBoat,false,25] remoteExec [""EPOCH_server_fillContainer"",2];" \n
"" \n
"_sWait = 1.5;" \n
"_actionDone = true;" \n
@ -914,8 +914,8 @@ class FSM
"axeVIP = _grp createUnit [""Epoch_Female_CamoRed_F"",_pos,[],0,""FORM""];" \n
"" \n
"if !(isNull axeVIP) then {" \n
" EPOCH_TEMPOBJ_PVS = axeVIP;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [axeVIP] remoteExec [""EPOCH_localCleanup"",2];" \n
"};" \n
"" \n
"_grp setCombatMode ""BLUE"";" \n
@ -1038,8 +1038,8 @@ class FSM
" removeAllWeapons axeGeneral;" \n
"" \n
"if !(isNull axeGeneral) then {" \n
" EPOCH_TEMPOBJ_PVS = axeGeneral;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [axeGeneral] remoteExec [""EPOCH_localCleanup"",2];" \n
"};" \n
"" \n
" for ""_i"" from 1 to 3 step 1 do" \n
@ -1051,8 +1051,8 @@ class FSM
" _unit addEventHandler [""FiredNear"", ""group (_this select 0) setVariable[""""shotsFired"""",[(_this select 1),(_this select 2)]]""];" \n
" _unit addEventHandler [""Killed"", ""group (_this select 0) setVariable[""""killer"""",_this select 1]""];" \n
" if !(isNull _unit) then {" \n
" EPOCH_TEMPOBJ_PVS = _unit;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [_unit] remoteExec [""EPOCH_localCleanup"",2];" \n
" };" \n
" [_unit,axeGeneral] execFSM ""\x\addons\a3_epoch_code\System\Mission_VIP_Militia.fsm"";" \n
"" \n

View File

@ -668,7 +668,7 @@ class FSM
"if(diag_tickTime - _lastAlert > 480 && random 100 < _cAggression)then{" \n
"_unit say3D ""cultist_laugh"";" \n
"EPOCH_say3D_PVS = [player, _unit, 8,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_lastAlert = diag_tickTime;" \n
"" \n
"" \n
@ -676,7 +676,7 @@ class FSM
"" \n
"_unit say3D ""cultist_talk"";" \n
"EPOCH_say3D_PVS = [player, _unit, 7,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"" \n
"};" \n
"" \n

View File

@ -40,7 +40,7 @@ class FSM
"" \n
"_unit say3D ""cultist_laugh"";" \n
"EPOCH_say3D_PVS = [player, _unit, 8,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"" \n
"" \n
"" \n

View File

@ -1,4 +1,4 @@
/*%FSM<COMPILE "X:\ArmA\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Gender Selection">*/
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Gender Selection">*/
/*%FSM<HEAD>*/
/*
item0[] = {"INIT",0,250,-250.000000,-150.000000,-150.000000,-100.000000,0.000000,"INIT"};
@ -12,12 +12,12 @@ item7[] = {"Process",2,250,-400.000000,75.000000,-300.000000,125.000000,0.000000
item8[] = {"same_gender",4,218,-250.000000,75.000000,-150.000000,125.000000,10.000000,"same" \n "gender"};
item9[] = {"other_gender",4,218,-400.000000,150.000000,-300.000000,200.000000,0.000000,"other" \n "gender"};
item10[] = {"Send_To_Server",3,250,-125.000000,75.000000,-25.000000,125.000000,0.000000,"Send To Server"};
item11[] = {"TODO__ADD_TIMEOUT",4,4314,-275.000000,250.000000,-175.000000,300.000000,0.000000,"TODO:" \n "ADD TIMEOUT" \n "AND LOBBY KICK"};
item11[] = {"TODO__ADD_TIMEOUT",4,218,-275.000000,250.000000,-175.000000,300.000000,0.000000,"TODO:" \n "ADD TIMEOUT" \n "AND LOBBY KICK"};
item12[] = {"END",1,250,0.000000,450.000000,100.000000,500.000000,0.000000,"END"};
item13[] = {"Send_new_selection",2,250,-400.000000,250.000000,-300.000000,300.000000,0.000000,"Send new" \n "selection to" \n "server"};
item14[] = {"Select_Model",2,250,-400.000000,350.000000,-300.000000,400.000000,0.000000,"Select Model"};
item15[] = {"new_model____pla",4,218,-525.000000,400.000000,-425.000000,450.000000,0.000000,"new model" \n "==" \n "player"};
item16[] = {"Setup_EH",2,250,-400.000000,450.000000,-300.000000,500.000000,0.000000,"Setup EH"};
item16[] = {"Setup_EH",2,4346,-400.000000,450.000000,-300.000000,500.000000,0.000000,"Setup EH"};
item17[] = {"true",8,218,-125.000000,450.000000,-25.000000,500.000000,0.000000,"true"};
item18[] = {"____FAKE____",9,720,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
link0[] = {0,2};
@ -41,8 +41,8 @@ link17[] = {15,16};
link18[] = {16,17};
link19[] = {17,12};
link20[] = {11,18};
globals[] = {25.000000,1,0,0,0,640,480,1,250,6316128,1,-786.968628,194.189285,571.765747,-266.728790,1066,911,1};
window[] = {2,-1,-1,-1,-1,753,25,1063,25,3,1084};
globals[] = {25.000000,1,0,0,0,640,480,1,250,6316128,1,-825.287720,232.508224,685.682007,60.530540,687,630,1};
window[] = {2,-1,-1,-1,-1,884,156,1194,156,3,705};
*//*%FSM</HEAD>*/
class FSM
{
@ -156,8 +156,8 @@ class FSM
class Send_To_Server
{
name = "Send_To_Server";
init = /*%FSM<STATEINIT""">*/"EPOCH_respawnPlayer_PVS = [player, Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_respawnPlayer_PVS"";"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"[player, Epoch_personalToken] remoteExec [""EPOCH_server_respawnPlayer"",2];" \n
""";"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
@ -190,8 +190,8 @@ class FSM
class Send_new_selection
{
name = "Send_new_selection";
init = /*%FSM<STATEINIT""">*/"EPOCH_respawnPlayer_PVS = [player, Epoch_personalToken,EPOCH_PlayerIsMale];" \n
"publicVariableServer ""EPOCH_respawnPlayer_PVS"";"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"[player, Epoch_personalToken,EPOCH_PlayerIsMale] remoteExec [""EPOCH_server_respawnPlayer"",2];" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
@ -246,13 +246,9 @@ class FSM
class Setup_EH
{
name = "Setup_EH";
init = /*%FSM<STATEINIT""">*/"player addEventHandler [""Respawn"", {(_this select 0) call EPOCH_clientRespawn}];" \n
"player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n
"player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n
"player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n
"player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable[""EPOCH_Locked"", false])}];" \n
"player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n
"player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"{" \n
" player addEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n
"} forEach ([""CfgEpochClient"", ""addEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
@ -284,7 +280,7 @@ class FSM
initState="INIT";
finalStates[] =
{
"END"
"END",
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/

File diff suppressed because it is too large Load Diff

View File

@ -49,8 +49,8 @@ class FSM
"" \n
"" \n
"if !(isNull _unit) then {" \n
" EPOCH_TEMPOBJ_PVS = _unit;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [_unit] remoteExec [""EPOCH_localCleanup"",2];" \n
"};" \n
"" \n
"_randomGroan = {" \n
@ -59,7 +59,7 @@ class FSM
"" \n
"_unit say3D _sound;" \n
"EPOCH_say3D_PVS = [player, _unit,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_sMarker = objNull;" \n
@ -610,4 +610,4 @@ class FSM
{
"end"
};
};
};

View File

@ -95,7 +95,7 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_unit say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_unit,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_unit playMoveNow ""Unconscious"";" \n
"" \n
"";
@ -174,8 +174,8 @@ class FSM
{
name = "do_boom";
itemno = ;
init = "EPOCH_SapperObjs_PVS = [_bomb, player, Epoch_personalToken,_unit,_unit];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
init = "" \n
"[_bomb, player, Epoch_personalToken,_unit,_unit] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_bomb = objNull;" \n
"_finalPos = getPosATL _unit;" \n
@ -285,4 +285,4 @@ class FSM
{
"end"
};
};
};

View File

@ -13,6 +13,5 @@
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
*/
if !(isNull _this) then{
EPOCH_oneWayTP = [player,_this,Epoch_personalToken];
publicVariableServer "EPOCH_oneWayTP";
[player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_teleportPlayer",2];
};

View File

@ -13,8 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_LootIT.sqf
*/
if (!isNull _this) then {
EPOCH_lootContainer = [_this,player,Epoch_personalToken];
publicVariableServer "EPOCH_lootContainer";
[_this,player,Epoch_personalToken] remoteExec ["EPOCH_server_lootContainer",2];
if (typeof _this == "wardrobe_EPOCH") then {
if !(_this getVariable["MIRROR_SETUP", false]) then {

View File

@ -17,67 +17,6 @@ _woman = getNumber(configFile >> "CfgVehicles" >> (typeOf player) >> "woman");
_class = _this select 2;
_config = configfile >> "cfgweapons" >> _class;
/*
_sleepAndCheck = {
_good = true;
_failcount = 0;
switch _this do {
case 0: {
while {true} do {
if !(local(backpackContainer player)) then {
_good = false;
_failcount = _failcount + 1;
} else {
_good = true;
};
if (_good) exitWith {};
if (_failcount > 5) exitWith { removeBackpack player; };
sleep 0.5;
};
};
case 1: {
while {true} do {
if !(local(vestContainer player)) then {
_good = false;
_failcount = _failcount + 1;
} else {
_good = true;
};
if (_good) exitWith{};
if (_failcount > 5) exitWith{ removeVest player; };
sleep 0.5;
};
};
case 2: {
while {true} do {
if !(local(uniformContainer player)) then {
_good = false;
_failcount = _failcount + 1;
} else {
_good = true;
};
if (_good) exitWith{};
if (_failcount > 5) exitWith{ removeUniform player; };
sleep 0.5;
};
};
};
};
if (isclass _config) then {
_infoType = getnumber(_config >> "itemInfo" >> "type");
switch _infoType do {
case 701: { 1 spawn _sleepAndCheck; };
case 801: { 2 spawn _sleepAndCheck; };
};
} else {
if (getNumber(configFile >> "CfgVehicles" >> _class >> "isbackpack") == 1) then {
0 spawn _sleepAndCheck;
};
};
*/
_mags = (magazines player) + (handgunMagazine player);
// TODO optimize
@ -115,28 +54,14 @@ if (_woman == 1) then {
_vest = vest player;
if (_class == _vest) then {
if (_femaleVariant != _vest) then {
/* // everyContainer not working in 1.20
_holder = _this select 1;
_containers = (everyContainer _holder) select 0;
_mags = magazinesAmmoFull _container;
_weps = weaponCargo vestContainer _container;
_item = itemCargo vestContainer _container;
*/
// get items in existing vest
_vestItems = vestItems player;
// remove vest
removeVest player;
// replace with female variant
player addVest _femaleVariant;
/*
{
if ((_x select 4) == "Vest") then {
player addMagazine [(_x select 0),(_x select 1)]
}
} forEach _mags;
{
player addItemToVest _x;
} forEach (_weps+_item);
*/
// readd items to players vest
{player addItemToVest _x} forEach _vestItems;
};
};
};

View File

@ -25,19 +25,26 @@ _object = objNull;
_type = 0;
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_treesLootList = getArray(_config >> worldname >> "Trees");
_bushesLootList = getArray(_config >> worldname >> "Bushes");
{
_strObj = str _x;
_str = str _x;
_sel_object = _x;
_findStart = _strObj find ": ";
_findStart = _str find ": ";
if (_findStart != -1) then{
_p3dName = _strObj select[_findStart + 2, 999];
if (_p3dName in _treesLootList) then{
_start = _findStart + 2;
_end = (_str find ".") - _start;
_p3dName = _str select[_start, _end];
// diag_log format ["DEBUG: _p3dName %1",_p3dName];
if (_p3dName find " " != -1) then {
(_p3dName splitString " ") joinString "_"; // replace spaces with underscores
};
_finalConfig = (_config >> "WorldInteractions" >> (_p3dName + "_p3d"));
if (getNumber(_finalConfig >> "tree") == 1) then{
_object = _sel_object;
};
if (_p3dName in _bushesLootList) then{
if (getNumber(_finalConfig >> "bush") == 1) then{
_type = 1;
_object = _sel_object;
};
@ -47,7 +54,6 @@ _bushesLootList = getArray(_config >> worldname >> "Bushes");
if (!isNull _object) then {
if (alive _object) then {
EPOCH_knockDownTree = [_object,_type,player,EPOCH_personalToken];
publicVariableServer "EPOCH_knockDownTree";
[_object,_type,player,EPOCH_personalToken] remoteExec ["EPOCH_server_knockDownTree",2];
};
};

View File

@ -61,8 +61,6 @@ _giveAttributes = {
_return = format["Immunity: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerImmunity, 100];
};
case 6: {
// EPOCH_playerToxicity = ((EPOCH_playerToxicity + _data) min 100) max 0;
// new random tox
_randomData = round(random _data);
EPOCH_playerToxicity = ((EPOCH_playerToxicity + _randomData) min 100) max 0;
_return = format["Toxicity: %1%2 (%3/%4)<br />", _addPlus, _randomData, EPOCH_playerToxicity, 100];
@ -72,6 +70,7 @@ _giveAttributes = {
_return = format["Stamina: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerStamina, EPOCH_playerStaminaMax];
};
case 8: {
// this is handled server side
//EPOCH_playerCrypto = ((EPOCH_playerCrypto + _data) min 25000) max 0;
//_return = format["Krypto: %1%2 (%3)<br />", _addPlus, _data, EPOCH_playerCrypto];
};
@ -79,6 +78,20 @@ _giveAttributes = {
EPOCH_playerBloodP = ((EPOCH_playerBloodP + _data) min 190) max 0;
_return = format["Blood Pressure: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerBloodP, 100];
};
case 10: {
EPOCH_playerKarma = ((EPOCH_playerKarma + _data) min 50000) max -50000;
_return = format["Karma: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerKarma, 50000];
};
case 11: {
EPOCH_playerAlcohol = ((EPOCH_playerAlcohol + _data) min 100) max 0;
_return = format["Alcohol: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerAlcohol, 100];
};
case 12: {
EPOCH_playerRadiation = ((EPOCH_playerRadiation + _data) min 100) max 0;
_return = format["Radiation: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerRadiation, 100];
};
};
};
_return
@ -86,9 +99,7 @@ _giveAttributes = {
_unifiedInteract = {
if (_item call _removeItem) then {
if (_interactReturnOnUse != "") then {
player addMagazine _interactReturnOnUse;
};
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
_output = "";
{
_output = _output + ([_forEachIndex, _x] call _giveAttributes);
@ -100,6 +111,38 @@ _unifiedInteract = {
};
switch _interactOption do {
case 0: {
_magazineSizeMax = getNumber (_config >> "count");
// allow repack for all magazines with greater than 1 bullet
if (_magazineSizeMax > 1) then {
_magazineSize = 0;
_magazinesAmmoFull = magazinesAmmoFull player;
{
if (_item isEqualTo (_x select 0)) then {
if (!(_x select 2)) then {
_magazineSize = _magazineSize + (_x select 1);
};
};
} forEach _magazinesAmmoFull;
// remove all
player removeMagazines _item;
// Add full magazines back to player
for "_i" from 1 to floor (_magazineSize / _magazineSizeMax) do
{
player addMagazine [_item, _magazineSizeMax];
//diag_log format ["DEBUG: added full mag %1", _magazineSizeMax];
};
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)];
//diag_log format ["DEBUG: added remainder %1", floor (_magazineSize % _magazineSizeMax)];
};
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Ammo Repacked</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
case 1: _unifiedInteract; // Eat 1
case 2: _unifiedInteract; //Drink 2
case 3: { // Build 3
@ -158,34 +201,49 @@ switch _interactOption do {
if (cursorTarget in _vehicles) then {
_vehicle = cursorTarget;
_currentFuel = fuel _vehicle;
_canCapacity = 10;
_canCapacity = _interactAttributes param [0,10];
_fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity");
_currentFuel = _currentFuel * _fuelCapacity;
_newFuel = _currentFuel + _canCapacity;
_newFuel = _newFuel / _fuelCapacity;
if (_item call _removeItem) then {
player addMagazine "jerrycanE_epoch";
EPOCH_fillVehicle_PVS = [_vehicle,_newFuel,player,Epoch_personalToken];
publicVariableServer "EPOCH_fillVehicle_PVS";
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
// send
[_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2];
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Fuel Added</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
};
case 5: {
_vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 6];
_canCapacity = _interactAttributes param [0,10];
if (cursorTarget in _vehicles) then {
_vehicle = cursorTarget;
_canCapacity = 10;
_fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity");
_newFuel = (((fuel _vehicle) * _fuelCapacity) - _canCapacity) / _fuelCapacity;
//diag_log format["FIND fill _newFuel %1 capacity: %2 current: %3",_newFuel,_fuelCapacity,_currentFuel];
if (_newFuel > 0) then {
if (_item call _removeItem) then {
player addMagazine "jerrycan_epoch";
EPOCH_fillVehicle_PVS = [_vehicle,_newFuel,player,Epoch_personalToken];
publicVariableServer "EPOCH_fillVehicle_PVS";
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
[_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2];
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Fuel Siphoned</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
} else {
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Not Enough Fuel</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
} else {
// find any other nearby fuel sources
_transportFuel = 0;
{
_transportFuel = _transportFuel + getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "transportFuel");
} forEach (player nearObjects["ALL", 6]);
if (_transportFuel > _canCapacity) then {
if (_item call _removeItem) then {
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Fuel Siphoned</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
} else {
@ -222,15 +280,13 @@ switch _interactOption do {
if (local _vehicle) then {
[_vehicle, [_currentHIT, _newDMG]] call EPOCH_client_repairVehicle;
} else {
EPOCH_repairVehicle_PVS = [_vehicle,[_currentHIT,_newDMG],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,[_currentHIT,_newDMG],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
//diag_log format["DEBUG HITPOINT REPAIRED: %1 %2 %3", _currentHIT, _newDMG, _item];
} else {
if ((damage _vehicle) > 0) then {
EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Vehicle Partially Repaired</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@ -242,8 +298,7 @@ switch _interactOption do {
_vehicle = cursorTarget;
if (_vehicle in _vehicles) then {
if (_item call _removeItem) then {
EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Vehicle Fully Repaired</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
@ -265,8 +320,7 @@ switch _interactOption do {
_paintCanIndex = getNumber(configfile >> "CfgMagazines" >> _item >> "textureIndex");
_paintCanColor = getText(configfile >> "CfgMagazines" >> _item >> "colorName");
EPOCH_PAINTBUILD = [_vehicle,_paintCanIndex,player,Epoch_personalToken];
publicVariableServer "EPOCH_PAINTBUILD";
[_vehicle,_paintCanIndex,player,Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2];
_msg = format["Wall Painted %1", _paintCanColor];
_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>%1</t>", _msg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@ -285,22 +339,27 @@ switch _interactOption do {
if (_vehicle in _vehicles) then {
if (damage _vehicle != 0) then {
if (_item call _removeItem) then {
EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Healed other player</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
} else {
if (damage player != 0) then {
if (_item call _removeItem) then {
EPOCH_repairVehicle_PVS = [player,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[player,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Healed yourself</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
};
};
case 14: { // Unpack Backpack
if (_item call _removeItem) then {
[_interactReturnOnUse,player,Epoch_personalToken] remoteExec ["EPOCH_server_unpackBackpack",2];
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Unpacked backpack</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
default {
// bottom
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Found nothing</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;

View File

@ -15,57 +15,48 @@
private["_hours"];
_hours = floor(servertime/60/60);
_customVars = "";
{
if !(_x in ["AliveTime","SpawnArray","HitPoints"]) then {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>", _x,missionNamespace getVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex]];
}
}forEach EPOCH_customVars;
hintSilent parseText format ["
<t size='1.25' font='puristaLight' align='center'>Welcome to Epoch Alpha</t><br/>
<t size='1.18' font='puristaLight' align='center'>Current Version: %22</t><br/>
<t size='1.15' font='puristaLight' align='left'>Temp: </t><t size='1.15' font='puristaLight' align='right'>%1</t><br/>
<t size='1.15' font='puristaLight' align='left'>Blood Pressure: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>
<t size='1.15' font='puristaLight' align='left'>Hunger: </t><t size='1.15' font='puristaLight' align='right'>%3</t><br/>
<t size='1.15' font='puristaLight' align='left'>Thirst: </t><t size='1.15' font='puristaLight' align='right'>%4</t><br/>
<t size='1.15' font='puristaLight' align='left'>Energy: </t><t size='1.15' font='puristaLight' align='right'>%5</t><br/>
<t size='1.15' font='puristaLight' align='left'>Wet: </t><t size='1.15' font='puristaLight' align='right'>%6</t><br/>
<t size='1.15' font='puristaLight' align='left'>Soiled: </t><t size='1.15' font='puristaLight' align='right'>%7</t><br/>
<t size='1.15' font='puristaLight' align='left'>Immunity: </t><t size='1.15' font='puristaLight' align='right'>%8</t><br/>
<t size='1.15' font='puristaLight' align='left'>Toxicity: </t><t size='1.15' font='puristaLight' align='right'>%9</t><br/>
<t size='1.15' font='puristaLight' align='left'>Stamina: </t><t size='1.15' font='puristaLight' align='right'>%10</t><br/>
<t size='1.15' font='puristaLight' align='left'>Fatigue: </t><t size='1.15' font='puristaLight' align='right'>%11</t><br/>
<t size='1.15' font='puristaLight' align='left'>Damage: </t><t size='1.15' font='puristaLight' align='right'>%12</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleeding: </t><t size='1.15' font='puristaLight' align='right'>%13</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleed Time: </t><t size='1.15' font='puristaLight' align='right'>%14</t><br/>
<t size='1.15' font='puristaLight' align='left'>Oxygen: </t><t size='1.15' font='puristaLight' align='right'>%15</t><br/>
<t size='1.18' font='puristaLight' align='center'>Current Version: %1</t><br/>
" + _customVars + "
<br/>
<t size='1.15' font='puristaLight' align='left'>Air Temp: </t><t size='1.15' font='puristaLight' align='right'>%16</t><br/>
<t size='1.15' font='puristaLight' align='left'>Water Temp: </t><t size='1.15' font='puristaLight' align='right'>%17</t><br/>
<t size='1.15' font='puristaLight' align='left'>Rain: </t><t size='1.15' font='puristaLight' align='right'>%18</t><br/>
<t size='1.15' font='puristaLight' align='left'>Overcast: </t><t size='1.15' font='puristaLight' align='right'>%19</t><br/>
<t size='1.15' font='puristaLight' align='left'>Fatigue: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>
<t size='1.15' font='puristaLight' align='left'>Damage: </t><t size='1.15' font='puristaLight' align='right'>%3</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleeding: </t><t size='1.15' font='puristaLight' align='right'>%4</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleed Time: </t><t size='1.15' font='puristaLight' align='right'>%5</t><br/>
<t size='1.15' font='puristaLight' align='left'>Oxygen: </t><t size='1.15' font='puristaLight' align='right'>%6</t><br/>
<br/>
<t size='1.15' font='puristaLight' align='left'>Crypto: </t><t size='1.15' font='puristaLight' align='right'>%20</t><br/>
<t size='1.15' font='puristaLight' align='left'>Hours Alive: </t><t size='1.15' font='puristaLight' align='right'>%21</t><br/>
<t size='1.15' font='puristaLight' align='left'>FPS: </t><t size='1.15' font='puristaLight' align='right'>%23</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server uptime: </t><t size='1.15' font='puristaLight' align='right'>%24h %25m</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server FPS: </t><t size='1.15' font='puristaLight' align='right'>%26</t><br/>",
EPOCH_playerTemp,
EPOCH_playerBloodP,
EPOCH_playerHunger,
EPOCH_playerThirst,
EPOCH_playerEnergy,
EPOCH_playerWet,
EPOCH_playerSoiled,
EPOCH_playerImmunity,
EPOCH_playerToxicity,
EPOCH_playerStamina,
<t size='1.15' font='puristaLight' align='left'>Air Temp: </t><t size='1.15' font='puristaLight' align='right'>%7</t><br/>
<t size='1.15' font='puristaLight' align='left'>Water Temp: </t><t size='1.15' font='puristaLight' align='right'>%8</t><br/>
<t size='1.15' font='puristaLight' align='left'>Rain: </t><t size='1.15' font='puristaLight' align='right'>%9</t><br/>
<t size='1.15' font='puristaLight' align='left'>Overcast: </t><t size='1.15' font='puristaLight' align='right'>%10</t><br/>
<br/>
<t size='1.15' font='puristaLight' align='left'>Hours Alive: </t><t size='1.15' font='puristaLight' align='right'>%11</t><br/>
<t size='1.15' font='puristaLight' align='left'>FPS: </t><t size='1.15' font='puristaLight' align='right'>%12</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server uptime: </t><t size='1.15' font='puristaLight' align='right'>%13h %14m</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server FPS: </t><t size='1.15' font='puristaLight' align='right'>%15</t><br/>",
getText(configFile >> "CfgMods" >> "Epoch" >> "version"),
(getFatigue player),
(damage player),
(isBleeding player),
(getBleedingRemaining player),
(getOxygenRemaining player),
EPOCH_CURRENT_WEATHER,
(EPOCH_CURRENT_WEATHER/2),
rain,
overcast,
EPOCH_playerCrypto,
round(EPOCH_playerAliveTime/360)/10,
getText(configFile >> "CfgMods" >> "Epoch" >> "version"),
round diag_fps,
_hours,
round((serverTime/60)-(_hours*60)),

View File

@ -34,8 +34,8 @@ if (surfaceIsWater _currentPos) then {
// Cast
_bobber = createVehicle ["Bobber_EPOCH",_currentPos, [], 0, "CAN_COLLIDE"];
EPOCH_TEMPOBJ_PVS = [_bobber];
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_bobber] remoteExec ["EPOCH_localCleanup",2];
_bobber setPosASL _currentPos;
_bobber setVariable ["EPOCH_bobberTime", diag_tickTime];

View File

@ -15,25 +15,14 @@
private["_found", "_return", "_foundLocalAnimal", "_str", "_blood", "_foundTerminal", "_index"];
_return = false;
if (isNil "EPOCH_trashLootList") then{
_config = 'CfgEpochClient' call EPOCH_returnConfig;
EPOCH_trashLootList = [];
{
EPOCH_trashLootList pushBack getArray(_config >> worldname >> _x);
} forEach(getArray(_config >> worldname >> "TrashClasses"));
};
if (isNil "EPOCH_atmList") then{
_config = 'CfgEpochClient' call EPOCH_returnConfig;
EPOCH_atmList = getArray(_config >> worldname >> "ATM");
};
_config = 'CfgEpochClient' call EPOCH_returnConfig;
if (diag_tickTime - EPOCH_lastTrash > 2) then {
EPOCH_lastTrash = diag_tickTime;
_destroyTrashObj = objNull;
_lootAnimalObj = objNull;
EPOCH_bankTerminal = objNull;
_bankTerminal = objNull;
_trashType = 0;
_objects = nearestObjects[player, [], 2];
@ -47,19 +36,28 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
_str = str(_x);
_findStart = _str find ": ";
if (_findStart != -1) then {
_p3dName = _str select[_findStart + 2, 999];
_start = _findStart + 2;
_end = (_str find ".") - _start;
_p3dName = _str select[_start, _end];
if (_p3dName find " " != -1) then {
(_p3dName splitString " ") joinString "_"; // replace spaces with underscores
};
_finalConfig = (_config >> "WorldInteractions" >> (_p3dName + "_p3d"));
{
_found = _p3dName in _x;
_found = (getNumber(_finalConfig >> _x) == 1);
if (_found) exitWith{ _trashType = _forEachIndex };
} forEach EPOCH_trashLootList;
_foundTerminal = _p3dName in EPOCH_atmList;
} forEach getArray(_config >> worldname >> "TrashClasses");
// TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood" };
//_foundTerminal = _p3dName in EPOCH_atmList;
_foundTerminal = (getNumber(_finalConfig >> "bankTerminal") == 1);
};
};
} else {
if (alive _x) then {
if ((typeOf _x) in["Land_PhoneBooth_02_F", "Land_PhoneBooth_01_F", "Land_Atm_01_F", "Land_Atm_02_F", "Land_Laptop_device_F"]) then {
_foundTerminal = true
};
_foundTerminal = (getNumber(_config >> "WorldInteractions" >> (typeOf _x) >> "bankTerminal") == 1);
if (_x isKindOf "Snake_random_EPOCH") then {
_foundLocalAnimal = true;
if (random 1 < 0.1) then {
@ -74,25 +72,22 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
};
if (_found) exitWith{ _destroyTrashObj = _x };
if (_foundLocalAnimal) exitWith{ _lootAnimalObj = _x };
if (_foundTerminal) exitWith{ EPOCH_bankTerminal = _x };
if (_foundTerminal) exitWith{ _bankTerminal = _x };
}forEach _objects;
if (!isNull _lootAnimalObj) then {
EPOCH_lootAnimal = [_lootAnimalObj, player, Epoch_personalToken];
_bloodPos = getPosATL _lootAnimalObj;
_blood = "BloodSplat" createVehicleLocal _bloodPos;
_blood setPosATL _bloodPos;
EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
publicVariableServer "EPOCH_lootAnimal";
// send
[_lootAnimalObj, player, Epoch_personalToken] remoteExec ["EPOCH_server_lootAnimal",2];
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Object Looted</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
if (!isNull _destroyTrashObj) then {
EPOCH_destroyTrash = [_destroyTrashObj, _trashType, player, Epoch_personalToken];
// hint str EPOCH_destroyTrash;
publicVariableServer "EPOCH_destroyTrash";
[_destroyTrashObj, _trashType, player, Epoch_personalToken] remoteExec ["EPOCH_server_destroyTrash",2];
EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Object Looted</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@ -110,15 +105,14 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
_id = [_animal, true] execFSM "\x\addons\a3_epoch_code\System\Animal_brain.fsm";
_animals pushBack _animal;
};
EPOCH_TEMPOBJ_PVS = _animals;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
_animals remoteExec ["EPOCH_localCleanup",2];
};
};
if (!isNull EPOCH_bankTerminal) then {
if (!isNull _bankTerminal) then {
// make balance request
if (isNil "EPOCH_bankTransferActive") then {
EPOCH_storeCrypto_PVS = [player, [], Epoch_personalToken];
publicVariableServer "EPOCH_storeCrypto_PVS";
[player, [], Epoch_personalToken] remoteExec ["EPOCH_server_storeCrypto",2];
closeDialog 0;
createDialog "InteractBank";

View File

@ -27,25 +27,32 @@ if ((diag_tickTime - EPOCH_lastMineRocks) >= 2) then {
_object = objNull;
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_lootables = getArray(_config >> worldname >> "Wrecks");
_cinderList = getArray(_config >> worldname >> "Cinder");
_rocksList = getArray(_config >> worldname >> "Rocks");
_found = false;
_foundIndex = -1;
{
_str = str(_x);
_findStart = _str find ": ";
if (_findStart != -1) then{
_p3dName = _str select[_findStart + 2, 999];
_found = _p3dName in _rocksList;
if (_p3dName in _lootables) then{
_found = true;
_foundIndex = 1;
};
if (_p3dName in _cinderList) then{
_found = true;
_foundIndex = 0;
if !(_x isKindOf "All") then {
_str = str(_x);
_findStart = _str find ": ";
if (_findStart != -1) then{
_start = _findStart + 2;
_end = (_str find ".") - _start;
_p3dName = _str select[_start, _end];
if (_p3dName find " " != -1) then {
(_p3dName splitString " ") joinString "_"; // replace spaces with underscores
};
_finalConfig = (_config >> "WorldInteractions" >> (_p3dName + "_p3d"));
_found = (getNumber(_finalConfig >> "rock") == 1);
if (getNumber(_finalConfig >> "wreck") == 1) then{
_found = true;
_foundIndex = 1;
};
if (getNumber(_finalConfig >> "cinder") == 1) then{
_found = true;
_foundIndex = 0;
};
};
};
if (_found)exitWith{_object = _x};
@ -53,8 +60,7 @@ if ((diag_tickTime - EPOCH_lastMineRocks) >= 2) then {
if (!isNull _object) then {
if (alive _object) then {
EPOCH_mineRocks_PVS = [_object, _foundIndex, player, Epoch_personalToken];
publicVariableServer "EPOCH_mineRocks_PVS";
[_object, _foundIndex, player, Epoch_personalToken] remoteExec ["EPOCH_server_mineRocks",2];
};
};
};

View File

@ -53,7 +53,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
case 0: {
_stability = 100 - round(damage _currentTarget * 100);
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_text = "Press (Inventory)";
_text = "";
if (_stability < 50) then {
_color = [1, 0.5, 0, 0.7];

View File

@ -4,7 +4,7 @@
Contributors:
Description:
test code to replace string in word (old)
code to replace string in word
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
@ -12,41 +12,5 @@
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_replaceWord.sqf
*/
private["_nextChar2", "_nextChar1", "_nextChar", "_replaceArray", "_STRING", "_needle", "_replace"];
_replaceArray = [];
_STRING = toArray(_this select 0);
_needle = toArray(_this select 1);
_replace = toArray(_this select 2);
{
if (_x == (_needle select 0)) then {
_nextChar = _forEachIndex + 1;
if ((_STRING select _nextChar) == (_needle select 1)) then {
_nextChar1 = _nextChar + 1;
if ((_STRING select _nextChar1) == (_needle select 2)) then {
_nextChar2 = _nextChar1 + 1;
if ((_STRING select _nextChar2) == (_needle select 3)) then {
_nextChar3 = _nextChar2 + 1;
if ((_STRING select _nextChar3) == (_needle select 4)) then {
_nextChar4 = _nextChar3 + 1;
if ((_STRING select _nextChar4) == (_needle select 5)) then {
_replaceArray pushBack[_forEachIndex, _nextChar, _nextChar1, _nextChar2, _nextChar3, _nextChar4];
};
};
};
};
};
};
}forEach _STRING;
{
for "_i" from 0 to(count _x - 1) do {
_STRING set[_x select _i, _replace select _i];
}
}forEach _replaceArray;
toString(_STRING);
params ["_STRING","_needle","_replace"];
_STRING splitString _needle joinString _replace

View File

@ -58,5 +58,5 @@ for "_i" from 0 to ((count _arrUnits)-1) do {
};
// cleanup units or (transfer ownership) if player logs out
EPOCH_TEMPOBJ_PVS = _units;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
_units remoteExec ["EPOCH_localCleanup",2];

View File

@ -114,6 +114,6 @@ switch _unitClass do {
};
if !(isNull _unit) then {
EPOCH_TEMPOBJ_PVS = _unit;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_unit] remoteExec ["EPOCH_localCleanup",2];
};

View File

@ -134,15 +134,15 @@ if !(isNull _object) then {
};
{
_craftItem = _x;
_craftQty = 1;
if (typeName _x == "ARRAY") then {
_craftItem = _x select 0;
_craftQty = _x select 1;
};
for "_i" from 1 to _craftQty do {
player addMagazine _craftItem;
};
_craftItem = _x;
_craftQty = 1;
if (typeName _x == "ARRAY") then {
_craftItem = _x select 0;
_craftQty = _x select 1;
};
for "_i" from 1 to _craftQty do {
_craftItem call EPOCH_fnc_addItemOverflow;
};
}forEach _recipe;
_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>%1 part on %2</t>","Removed",_objClass call EPOCH_itemDisplayName], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;

View File

@ -76,9 +76,7 @@ if (!isNull _this) then {
// proceed to send save to server
} else {
if (_saveCheck) then {
EPOCH_SAVEBUILD = [_this, player, Epoch_personalToken];
publicVariableServer "EPOCH_SAVEBUILD";
//diag_log format["DEBUG SAVE: %1", _this];
[_this, player, Epoch_personalToken] remoteExec["EPOCH_server_saveBuilding", 2];
};
};
};

View File

@ -40,8 +40,7 @@ if (EPOCH_playerCrypto > 0) then {
EPOCH_maintainLockout = true;
EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken];
publicVariableServer "EPOCH_MAINTBUILD";
[_this, player, _maintainCount, Epoch_personalToken] remoteExec ["EPOCH_server_maintBUILD",2];
[_rnd,_maintainCount] spawn {
params ["_rnd","_maintainCount"];

View File

@ -82,8 +82,7 @@ if !(_buildingAllowed)exitWith{false};
_removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType >> "removeParts");
if !(_removeParts isEqualTo[]) then{
EPOCH_REMBUILD = [_this, player, Epoch_personalToken];
publicVariableServer "EPOCH_REMBUILD";
[_this, player, Epoch_personalToken] remoteExec ["EPOCH_server_removeBUILD",2];
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Removed</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};

View File

@ -72,8 +72,7 @@ if (isText(_config)) then {
_newObj setposATL (_worldspace select 0);
if (_textureSlot != 0) then {
EPOCH_PAINTBUILD = [_newObj, _textureSlot, player, Epoch_personalToken];
publicVariableServer "EPOCH_PAINTBUILD";
[_newObj, _textureSlot, player, Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2];
};
};
EP_velocityTransformation = [];

View File

@ -73,8 +73,8 @@ if (_class != "") then {
_pos2 = player modelToWorldVisual[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];
EPOCH_target = createVehicle[_class, _pos2, [], 0, "CAN_COLLIDE"];
EPOCH_TEMPOBJ_PVS = EPOCH_target;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[EPOCH_target] remoteExec ["EPOCH_localCleanup",2];
if (_pos2 select 2 > _maxHeight) then {
_pos2 set[2, _maxHeight];

View File

@ -124,8 +124,7 @@ if (_object isKindOf "Constructions_static_F") then {
if (_canUpgradePartCount == _removedPartCount) then {
// send to server for upgrade
EPOCH_UPBUILD = [_object,player,Epoch_upgradeIndex,Epoch_personalToken];
publicVariableServer "EPOCH_UPBUILD";
[_object,player,Epoch_upgradeIndex,Epoch_personalToken] remoteExec ["EPOCH_server_upgradeBUILD",2];
Epoch_upgradeIndex = nil;
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Upgraded</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;

View File

@ -46,7 +46,7 @@ if !(isNull _this && alive _this) then {
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = true;
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "Snake2_random_EPOCH": {
@ -57,7 +57,7 @@ if !(isNull _this && alive _this) then {
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = true;
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "GreatWhite_F": {
@ -101,7 +101,7 @@ if !(isNull _this && alive _this) then {
_this say3D _soundEffect;
if (_soundEffectGlobal) then {
EPOCH_say3D_PVS = [player, _this, _soundEffectIndex, Epoch_personalToken];
publicVariableServer "EPOCH_say3D_PVS";
EPOCH_say3D_PVS remoteExec ["EPOCH_server_handle_say3D",2];
};
};
if (random 1 < _toxicChance) then {

View File

@ -50,8 +50,8 @@ if!(isNil "_animalPos") then {
// diag_log format["DEBUG: spawned %1", _randomAIClass];
EPOCH_TEMPOBJ_PVS = _animal;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_animal] remoteExec ["EPOCH_localCleanup",2];
{
_animal disableAI _x;

View File

@ -19,23 +19,25 @@
_this: STRING - Item Class
Returns:
NOTHING
BOOL
*/
private ["_wHPos","_wH","_nearByHolder","_item"];
if (_this isEqualTo "") exitWith{false};
_item = _this;
if (player canAdd _item) then {
player addItem _item;
player addItem _item;
} else {
_wH = objNull;
_nearByHolder = nearestObjects [position player,["groundWeaponHolder"],3];
if (_nearByHolder isEqualTo []) then {
_wHPos = player modelToWorld [0,1,0];
if (surfaceIsWater _wHPos) then {
_wHPos = ASLToATL _wHPos;
_wH = objNull;
_nearByHolder = nearestObjects [position player,["groundWeaponHolder"],3];
if (_nearByHolder isEqualTo []) then {
_wHPos = player modelToWorld [0,1,0];
if (surfaceIsWater _wHPos) then {
_wHPos = ASLToATL _wHPos;
};
_wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"];
} else {
_wH = _nearByHolder select 0;
};
_wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"];
} else {
_wH = _nearByHolder select 0;
};
_wh addItemCargoGlobal [_item,1];
_wh addItemCargoGlobal [_item,1];
};
true

View File

@ -32,8 +32,7 @@ if (vehicle _unit != _unit) then {
_unit action["Eject", vehicle _unit];
};
EPOCH_deadPlayer_PVS = [player,_killer,toArray profileName,Epoch_personalToken];
publicVariableServer "EPOCH_deadPlayer_PVS";
[player,_killer,toArray profileName,Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayer",2];
// disable build mode
EPOCH_buildMode = 0;

View File

@ -55,8 +55,7 @@ switch true do {
if ("Defib_EPOCH" in _attachments) then {
if (!alive _cursorTarget) then {
EPOCH_revivePlayer_PVS = [_cursorTarget,player,Epoch_personalToken];
publicVariableServer "EPOCH_revivePlayer_PVS";
[_cursorTarget,player,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2];
};
};
} else {
@ -83,15 +82,13 @@ switch true do {
if (local _cursorTarget) then {
[_cursorTarget,[_currentHIT,_newDMG]] call EPOCH_client_repairVehicle;
} else {
EPOCH_repairVehicle_PVS = [_cursorTarget,[_currentHIT,_newDMG],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_cursorTarget,[_currentHIT,_newDMG],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
//diag_log format["DEBUG HITPOINT REPAIRED: %1 %2 %3", _currentHIT, _newDMG, _attachments];
} else {
if ((damage _cursorTarget) > 0) then {
EPOCH_repairVehicle_PVS = [_cursorTarget,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_cursorTarget,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
};

View File

@ -38,9 +38,7 @@ if ((diag_tickTime - _EPOCH_lastSave) >= _time) then {
_customVars pushBack (missionNamespace getVariable format["EPOCH_player%1",_x select 0]);
} forEach _customVarsInit;
// TODO: use remoteExec here
missionNamespace setVariable ["EPOCH_pushPlayer_PVS",[player,_customVars,missionNamespace getVariable "Epoch_personalToken"]];
publicVariableServer "EPOCH_pushPlayer_PVS";
[player,_customVars,missionNamespace getVariable "Epoch_personalToken"] remoteExec ["EPOCH_fnc_savePlayer",2];
missionNamespace setVariable["EPOCH_lastSave", diag_tickTime];
};

View File

@ -248,14 +248,12 @@ if (vehicle player == player) then {
if (isTouchingGround player && speed player > 10) then {
if ((primaryWeapon player != "") && (currentWeapon player == primaryWeapon player)) then {
player switchMove "AovrPercMrunSrasWrflDf";
EPOCH_switchMove_PVS = [player, 1, Epoch_personalToken];
publicVariableServer "EPOCH_switchMove_PVS";
[player, 1, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2];
_handled = true;
} else {
if (currentWeapon player == "") then {
player switchMove "epoch_unarmed_jump";
EPOCH_switchMove_PVS = [player, 2, Epoch_personalToken];
publicVariableServer "EPOCH_switchMove_PVS";
[player, 2, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2];
_handled = true;
};
};
@ -268,7 +266,8 @@ if (vehicle player == player) then {
};
};
if (_dikCode in(actionKeys "Gear")) then {
if (_dikCode in(actionKeys "Gear") && !EPOCH_gearKeyPressed) then {
EPOCH_gearKeyPressed = true;
if !(isNull EPOCH_Target) then {
if !(EPOCH_Target isKindOf "ThingX") then {
deleteVehicle EPOCH_Target;
@ -280,14 +279,6 @@ if (vehicle player == player) then {
if (isTouchingGround player) then {
_handled = call EPOCH_lootTrash;
};
if !(_handled) then {
if (!isNull(findDisplay 602)) then { //Inventory Open?
(findDisplay 602) closeDisplay 3000;
}
else {
_handled = _ctrl call EPOCH_startInteract;
};
};
};
}; // end player only code

View File

@ -36,5 +36,9 @@ if (_dikCode == EPOCH_keysAction) then {
true call Epoch_dynamicMenuCleanup;
};
if (_dikCode in(actionKeys "Gear")) then {
EPOCH_gearKeyPressed = false;
};
_handled

View File

@ -43,6 +43,7 @@ EPOCH_InteractedItem = [_text,_data,_pic];
_interactOption = 0;
_buttonTXT = "";
_magCount = 1;
if (isClass (configfile >> "cfgweapons" >> _data)) then {
_type = getNumber (configfile >> "CfgWeapons" >> _data >> "type");
_interactOption = getNumber (configfile >> "CfgWeapons" >> _data >> "interactAction");
@ -51,6 +52,7 @@ if (isClass (configfile >> "cfgweapons" >> _data)) then {
_type = getNumber (configfile >> "CfgMagazines" >> _data >> "type");
_interactOption = getNumber (configfile >> "CfgMagazines" >> _data >> "interactAction");
_buttonTXT = getText(configfile >> "CfgMagazines" >> _data >> "interactText");
_magCount = getNumber (configfile >> "CfgMagazines" >> _data >> "count");
};
_display = (findDisplay 602);
@ -60,8 +62,13 @@ if (_buttonTXT != "") then {
_useBtn ctrlSetText _buttonTXT;
_useBtn ctrlEnable true;
} else {
_useBtn ctrlSetText "EXAMINE";
_useBtn ctrlEnable false;
if (_magCount > 1) then {
_useBtn ctrlEnable true;
_useBtn ctrlSetText "REPACK";
} else {
_useBtn ctrlSetText "EXAMINE";
_useBtn ctrlEnable false;
};
};
_useBtn = _display displayCtrl -14;

View File

@ -9,8 +9,8 @@ _cage2 = createVehicle ["Land_Cages_F", _cagePos, [], 2, "CAN_COLLIDE"] ;
_cage2 setVectorDirAndUp [[0,0,1],[0,1,0]];
_cage attachTo [_cage2,[0,1.3,0]];
EPOCH_TEMPOBJ_PVS = [_cage,_cage2];
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_cage,_cage2] remoteExec ["EPOCH_localCleanup",2];
_startCage = diag_tickTime;
@ -27,12 +27,11 @@ _sapper setVectorDirAndUp [[0,0,1],[0,1,0]];
_sapper forcespeed 0;
if !(isNull _sapper) then {
EPOCH_TEMPOBJ_PVS = _sapper;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_sapper] remoteExec ["EPOCH_localCleanup",2];
};
EPOCH_FillContainer_PVS = [player,Epoch_personalToken,objNull,false,25];
publicVariableServer "EPOCH_FillContainer_PVS";
[player,Epoch_personalToken,objNull,false,25] remoteExec ["EPOCH_server_fillContainer",2];
while {player distance _sapper < 100 && alive player} do {
@ -41,7 +40,7 @@ while {player distance _sapper < 100 && alive player} do {
_sound = _sounds select (floor (random (count _sounds)));
_sapper say3D _sound;
EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];
publicVariableServer "EPOCH_say3D_PVS";
EPOCH_say3D_PVS remoteExec ["EPOCH_server_handle_say3D",2];
};
uiSleep 0.5;
};

View File

@ -58,8 +58,7 @@ if (!isNull EPOCH_p2ptradeTarget) then {
}forEach _array;
if (_removeCount == count _array) then {
EPOCH_MAKETRADE = [player, EPOCH_p2ptradeTarget, _array, _tradeOffer, Epoch_personalToken];
publicVariableServer "EPOCH_MAKETRADE";
[player, EPOCH_p2ptradeTarget, _array, _tradeOffer, Epoch_personalToken] remoteExec ["EPOCH_server_makeTrade",2];
};
(findDisplay -1900) closeDisplay 1;

View File

@ -9,8 +9,8 @@ if (!isNull _otherPlyr) then {
// restict to only players not in vehicles
if (vehicle player == player && vehicle _otherPlyr == _otherPlyr) then {
EPOCH_MAKETRADEREQ = _this;
publicVariableServer "EPOCH_MAKETRADEREQ";
// send
_this remoteExec ["EPOCH_server_tradeRequest",2];
// target other player
EPOCH_p2ptradeTarget = _otherPlyr;

View File

@ -31,7 +31,6 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
// deleteGroup _group;
Epoch_canBeRevived = false;
Epoch_personalToken = _this select 1;
// call EPOCH_clientInit;
@ -41,13 +40,12 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
closeDialog 0;
("BIS_fnc_respawnCounter" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
player addEventHandler ["Respawn", {(_this select 0) call EPOCH_clientRespawn}];
player addEventHandler ["Put", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];
player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];
player addEventHandler ["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }];
player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable["EPOCH_Locked", false]) }];
player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}];
player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}];
{
player addEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)];
} forEach (["CfgEpochClient", "addEventHandler", []] call EPOCH_fnc_returnConfigEntryV2);
// reset blood Pressure to warning level
EPOCH_playerBloodP = 120;
} else {
deleteVehicle _playerObject;
};

View File

@ -44,7 +44,7 @@ call compile ("
case "+str(_this select 16)+": { Epoch_my_GroupUID = _data };
case "+str(_this select 17)+": { _data call EPOCH_Group_invitePlayer };
case "+str(_this select 18)+": { _data call EPOCH_handleServerMessage };
case "+str(_this select 19)+": { {missionNamespace setVariable[format['EPOCH_player%1', _x], EPOCH_defaultVars select(EPOCH_customVars find _x)]} forEach['Temp','Hunger','Thirst','Toxicity','Stamina','HitPoints','BloodP']};
case "+str(_this select 19)+": { {missionNamespace setVariable[format['EPOCH_player%1', _x], EPOCH_defaultVars select(EPOCH_customVars find _x)]} forEach['Temp','Hunger','Thirst','Toxicity','Stamina','HitPoints','BloodP','Alcohol','Radiation']};
case "+str(_this select 20)+": { _data call EPOCH_mission_returnObj };
};
};

View File

@ -1,142 +1,138 @@
// current target
_currentTarget = objNull;
_cursorTarget = ([10] call EPOCH_fnc_cursorTarget);
if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then {
if (_cursorTarget isKindOf "ThingX" || _cursorTarget isKindOf "Constructions_static_F" || _cursorTarget isKindOf "Constructions_foundation_F" || _cursorTarget isKindOf "WeaponHolder" || _cursorTarget isKindOf "AllVehicles" || _cursorTarget isKindOf "PlotPole_EPOCH") then{
if (_cursorTarget isKindOf "Animal_Base_F") then {
if !(alive _cursorTarget) then {
_currentTarget = _cursorTarget;
};
} else {
_currentTarget = _cursorTarget;
};
};
};
EPOCH_currentTarget = _currentTarget;
_increaseStamina = false;
_vehicle = vehicle player;
if (_vehicle == player) then {
_val = log(abs(speed player));
_staminaThreshold = 0.7;
if (EPOCH_playerIsSwimming) then {_staminaThreshold = 0.3};
if (_val>_staminaThreshold) then {
EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0;
} else {
_increaseStamina = true;
_currentTarget = objNull;
_cursorTarget = ([10] call EPOCH_fnc_cursorTarget);
if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then {
if (_cursorTarget isKindOf "ThingX" || _cursorTarget isKindOf "Constructions_static_F" || _cursorTarget isKindOf "Constructions_foundation_F" || _cursorTarget isKindOf "WeaponHolder" || _cursorTarget isKindOf "AllVehicles" || _cursorTarget isKindOf "PlotPole_EPOCH") then{
if (_cursorTarget isKindOf "Animal_Base_F") then {
if !(alive _cursorTarget) then {
_currentTarget = _cursorTarget;
};
} else {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
hintsilent "BUILD MODE: DISABLED";
EPOCH_Target = objNull;
// EPOCH_SURVEY = [];
};
_increaseStamina = true;
switch (typeOf _vehicle) do {
case "jetski_epoch": {
_clock_hour10 = floor ((date select 3)/10);
_clock_minute10 = floor ((date select 4)/10);
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_hour10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 3)-(_clock_hour10*10)],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_minute10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 4)-(_clock_minute10*10)],
format["\x\addons\a3_epoch_vehicles\data\fuel%1_ca.paa",floor(fuel _vehicle*10)]
];
};
case "ebike_epoch": {
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\speed%1_ca.paa",floor(speed _vehicle/9) max 0],
format["\x\addons\a3_epoch_vehicles\data\energ%1_ca.paa",floor(fuel _vehicle*14)]
];
};
_currentTarget = _cursorTarget;
};
};
};
EPOCH_currentTarget = _currentTarget;
_increaseStamina = false;
_vehicle = vehicle player;
if (_vehicle == player) then {
_val = log(abs(speed player));
_staminaThreshold = 0.7;
if (EPOCH_playerIsSwimming) then {_staminaThreshold = 0.3};
if (_val>_staminaThreshold) then {
EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0;
} else {
_increaseStamina = true;
};
} else {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
hintsilent "BUILD MODE: DISABLED";
EPOCH_Target = objNull;
// EPOCH_SURVEY = [];
};
_increaseStamina = true;
switch (typeOf _vehicle) do {
case "jetski_epoch": {
_clock_hour10 = floor ((date select 3)/10);
_clock_minute10 = floor ((date select 4)/10);
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_hour10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 3)-(_clock_hour10*10)],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_minute10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 4)-(_clock_minute10*10)],
format["\x\addons\a3_epoch_vehicles\data\fuel%1_ca.paa",floor(fuel _vehicle*10)]
];
};
case "ebike_epoch": {
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\speed%1_ca.paa",floor(speed _vehicle/9) max 0],
format["\x\addons\a3_epoch_vehicles\data\energ%1_ca.paa",floor(fuel _vehicle*14)]
];
};
};
};
_envCold = EPOCH_playerTemp <= 95.0;
_envHot = EPOCH_playerTemp >= 106.7;
_hungry = EPOCH_playerHunger <= 0;
_thirsty = EPOCH_playerThirst <= 0;
_warnbloodPressure = EPOCH_playerBloodP > 120;
_thirst ctrlShow (EPOCH_playerThirst <= 625);
if (ctrlShown _thirst) then {
[_thirst,_thirsty] call _fadeUI;
_thirstScale = linearConversion [0,EPOCH_playerThirst,2500,0.01,1,true];
_thirst ctrlSetTextColor [_thirstScale, _thirstScale, 0.9, 1];
};
_hunger ctrlShow (EPOCH_playerHunger <= 1250);
if (ctrlShown _hunger) then {
[_hunger,_hungry] call _fadeUI;
_hungerScale = linearConversion [0,EPOCH_playerHunger,5000,0.01,1,true];
_hunger ctrlSetTextColor [1, _hungerScale, _hungerScale, 1];
};
_playerOxygen = getOxygenRemaining player;
_oxygen ctrlShow (_playerOxygen < 1);
if (ctrlShown _oxygen) then {
[_oxygen,(_playerOxygen <= 0.55)] call _fadeUI;
_oxygen ctrlSetTextColor [1, _playerOxygen, _playerOxygen, 1];
};
_hazzard ctrlShow (EPOCH_playerToxicity > 1);
if (ctrlShown _hazzard) then {
[_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI;
_toxicScale = 1-linearConversion [0,EPOCH_playerToxicity,100,0.01,1,true];
_hazzard ctrlSetTextColor [_toxicScale, 1, _toxicScale, 1];
};
_broken ctrlShow ((player getHitPointDamage "HitLegs") >= 0.5);
if (ctrlShown _broken) then {
[_broken,true] call _fadeUI;
};
if (_envCold || _envHot || _hungry || _thirsty) then {
if (_envHot || _envCold) then {
player setFatigue 1;
};
EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190;
_increaseStamina = false;
} else {
if (EPOCH_playerStamina > 0) then {
if !(_panic) then {
if (!_warnbloodPressure) then {
player setFatigue 0;
};
EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max 100;
};
};
};
_envCold = EPOCH_playerTemp <= 95.0;
_envHot = EPOCH_playerTemp >= 106.7;
_hungry = EPOCH_playerHunger <= 0;
_thirsty = EPOCH_playerThirst <= 0;
_warnbloodPressure = EPOCH_playerBloodP > 120;
_critical = (damage player >= 0.7 || _warnbloodPressure);
_emergency ctrlShow _critical;
if (ctrlShown _emergency) then {
[_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI;
_emergencyScale = 1-linearConversion [0,EPOCH_playerBloodP,180,0.01,1,true];
_emergency ctrlSetTextColor [1, _emergencyScale, _emergencyScale, 1];
};
_thirst ctrlShow (EPOCH_playerThirst <= 625);
if (ctrlShown _thirst) then {
[_thirst,_thirsty] call _fadeUI;
_thirstScale = linearConversion [0,EPOCH_playerThirst,2500,0.01,1,true];
_thirst ctrlSetTextColor [_thirstScale, _thirstScale, 0.9, 1];
};
if (EPOCH_playerBloodP >= 180) then {
true call EPOCH_pushCustomVar;
};
if (_increaseStamina && (getFatigue player) == 0) then {
EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax;
};
if (EPOCH_debugMode) then {
call EPOCH_debugMonitor;
};
_hunger ctrlShow (EPOCH_playerHunger <= 1250);
if (ctrlShown _hunger) then {
[_hunger,_hungry] call _fadeUI;
_hungerScale = linearConversion [0,EPOCH_playerHunger,5000,0.01,1,true];
_hunger ctrlSetTextColor [1, _hungerScale, _hungerScale, 1];
};
call EPOCH_TradeLoop;
_playerOxygen = getOxygenRemaining player;
_oxygen ctrlShow (_playerOxygen < 1);
if (ctrlShown _oxygen) then {
[_oxygen,(_playerOxygen <= 0.55)] call _fadeUI;
_oxygen ctrlSetTextColor [1, _playerOxygen, _playerOxygen, 1];
};
_hazzard ctrlShow (EPOCH_playerToxicity > 1);
if (ctrlShown _hazzard) then {
[_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI;
_toxicScale = 1-linearConversion [0,EPOCH_playerToxicity,100,0.01,1,true];
_hazzard ctrlSetTextColor [_toxicScale, 1, _toxicScale, 1];
};
_broken ctrlShow ((player getHitPointDamage "HitLegs") >= 0.5);
if (ctrlShown _broken) then {
[_broken,true] call _fadeUI;
};
if (_envCold || _envHot || _hungry || _thirsty) then {
if (_envHot || _envCold) then {
player setFatigue 1;
};
EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190;
_increaseStamina = false;
} else {
if (EPOCH_playerStamina > 0) then {
if !(_panic) then {
if (!_warnbloodPressure) then {
player setFatigue 0;
};
EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max 100;
};
};
};
_critical = (damage player >= 0.7 || _warnbloodPressure);
_emergency ctrlShow _critical;
if (ctrlShown _emergency) then {
[_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI;
_emergencyScale = 1-linearConversion [0,EPOCH_playerBloodP,180,0.01,1,true];
_emergency ctrlSetTextColor [1, _emergencyScale, _emergencyScale, 1];
};
if (EPOCH_playerBloodP >= 180) then {
true call EPOCH_pushCustomVar;
};
if (_increaseStamina && (getFatigue player) == 0) then {
EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax;
};
if (EPOCH_debugMode) then {
call EPOCH_debugMonitor;
};
call EPOCH_TradeLoop;
onEachFrame EPOCH_onEachFrame;
onEachFrame EPOCH_onEachFrame;

View File

@ -1,97 +1,103 @@
if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2];
EPOCH_arr_interactedObjs = [];
};
if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2];
EPOCH_arr_interactedObjs = [];
};
if (damage player != _damagePlayer) then {
if (alive player) then {
true call EPOCH_pushCustomVar;
_damagePlayer = damage player;
};
};
if (damage player != _damagePlayer) then {
if (alive player) then {
true call EPOCH_pushCustomVar;
_damagePlayer = damage player;
};
};
// this fixes issues with players being unable to ride in the same vehicle
if ((rating player) < 0) then {
player addRating abs(rating player);
};
if ((rating player) < 0) then {
player addRating abs(rating player);
};
// calculate total available power
// 1. number of power production devices within range 75m
// calculate total available power
// 1. number of power production devices within range 75m
// find share of power based on factors
// 1. number of players
// 2. Other sources of drain (Lights)
// find share of power based on factors
// 1. number of players
// 2. Other sources of drain (Lights)
_energyValue = EPOCH_chargeRate min _energyRegenMax;
_vehicle = vehicle player;
if (_vehicle != player && isEngineOn _vehicle) then {
_energyValue = _energyValue + 5;
};
_energyValue = EPOCH_chargeRate min _energyRegenMax;
_vehicle = vehicle player;
if (_vehicle != player && isEngineOn _vehicle) then {
_energyValue = _energyValue + 5;
};
if (currentVisionMode player == 1) then { //NV enabled
_energyValue = _energyValue - _energyCostNV;
if (EPOCH_playerEnergy == 0) then {
player action["nvGogglesOff", player];
};
};
if (currentVisionMode player == 1) then { //NV enabled
_energyValue = _energyValue - _energyCostNV;
if (EPOCH_playerEnergy == 0) then {
player action["nvGogglesOff", player];
};
};
// Sets visual effect
if (EPOCH_playerAlcohol > 20) then {
_drunkVal = linearConversion [0,100,EPOCH_playerAlcohol,0.1,1,true];
[(round(_drunkVal * 10)/10), 2] call epoch_setDrunk;
diag_log format["DEBUG: _drunkVal: %1",_drunkVal];
} else {
[0, 2] call epoch_setDrunk;
};
EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0;
EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0;
if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then {
9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
_energyDiff = round(EPOCH_playerEnergy - _prevEnergy);
_diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]};
// hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy];
(_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText];
_prevEnergy = EPOCH_playerEnergy;
};
if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then {
9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
_energyDiff = round(EPOCH_playerEnergy - _prevEnergy);
_diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]};
// hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy];
(_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText];
_prevEnergy = EPOCH_playerEnergy;
};
if (EPOCH_playerEnergy == 0) then {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Build Mode Disabled: Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
EPOCH_Target = objNull;
EPOCH_Z_OFFSET = 0;
EPOCH_X_OFFSET = 0;
EPOCH_Y_OFFSET = 5;
};
};
if (EPOCH_playerEnergy == 0) then {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Build Mode Disabled: Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
EPOCH_Target = objNull;
EPOCH_Z_OFFSET = 0;
EPOCH_X_OFFSET = 0;
EPOCH_Y_OFFSET = 5;
};
};
_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30];
if !(_attackers isEqualTo[]) then {
(_attackers select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
// custom poision
_toxicObjs = player nearobjects["SmokeShellCustom", 6];
if!(_toxicObjs IsEqualTo[]) then {
(_toxicObjs select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
_panic = false;
};
};
_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30];
if !(_attackers isEqualTo[]) then {
(_attackers select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
// custom poision
_toxicObjs = player nearobjects["SmokeShellCustom", 6];
if!(_toxicObjs IsEqualTo[]) then {
(_toxicObjs select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
_panic = false;
};
};
call EPOCH_fnc_Weather;
call EPOCH_fnc_Weather;
// Hunger / Thirst
_HTlossRate = _baseHTLoss;
if (EPOCH_playerStamina < 100) then {
if ((getFatigue player) > 0) then {
_HTlossRate = _HTlossRate + (_HTlossRate*(getFatigue player));
};
} else {
_HTlossRate = (_HTlossRate / 2);
};
// Hunger / Thirst
_HTlossRate = _baseHTLoss;
if (EPOCH_playerStamina < 100) then {
if ((getFatigue player) > 0) then {
_HTlossRate = _HTlossRate + (_HTlossRate*(getFatigue player));
};
} else {
_HTlossRate = (_HTlossRate / 2);
};
EPOCH_playerHunger = (EPOCH_playerHunger - _HTlossRate) max 0;
EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0;
EPOCH_playerHunger = (EPOCH_playerHunger - _HTlossRate) max 0;
EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0;
call _lootBubble;
call _lootBubble;
EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500;
//player setAnimSpeedCoef 0.75;
//player setCustomAimCoef 1;
EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500;

View File

@ -1,6 +1,5 @@
if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then {
_EPOCH_15 = _tickTime;
_prevEquippedItem = EPOCH_equippedItem_PVS;
publicVariableServer "EPOCH_equippedItem_PVS";
};
if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then {
_EPOCH_15 = _tickTime;
_prevEquippedItem = EPOCH_equippedItem_PVS;
EPOCH_equippedItem_PVS remoteExec ["EPOCH_server_equippedItem",2];
};

View File

@ -1,17 +1,15 @@
_nearByBobbersLocal = [];
_nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12];
{
if (local _x) then {
_nearByBobbersLocal pushBack _x
}
} forEach _nearByBobbers;
_nearByBobbersLocal = [];
_nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12];
{
if (local _x) then {
_nearByBobbersLocal pushBack _x
}
} forEach _nearByBobbers;
if !(_nearByBobbersLocal isEqualTo []) then {
if ((random 100) < 50) then {
_bobber = _nearByBobbersLocal select floor(random(count _nearByBobbers));
_bobber setVelocity [0,-1,-1];
_bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime];
};
};
if !(_nearByBobbersLocal isEqualTo []) then {
if ((random 100) < 50) then {
_bobber = _nearByBobbersLocal select floor(random(count _nearByBobbers));
_bobber setVelocity [0,-1,-1];
_bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime];
};
};

View File

@ -1,6 +1,7 @@
_position = getPosATL player;
EPOCH_nearestLocations = nearestLocations[player, ["NameCityCapital", "NameCity", "Airport"], 300];
EPOCH_playerIsSwimming = false;
if !(surfaceIsWater _position) then {
@ -14,9 +15,7 @@ if !(surfaceIsWater _position) then {
// spawn shark if player is deep water and not in vehicle
if (vehicle player == player) then{
_offsetZ = ((_position vectorDiff getPosASL player) select 2);
if (_offsetZ > 1.7) then {
EPOCH_playerIsSwimming = true;
};
EPOCH_playerIsSwimming = (_offsetZ > 1.7);
if (_offsetZ > 50) then {
"GreatWhite_F" call EPOCH_unitSpawn;
};
@ -55,6 +54,8 @@ if !(_powerSources isEqualTo[]) then {
EPOCH_nearPower = true;
};
};
// downtick Alcohol
EPOCH_playerAlcohol = ((EPOCH_playerAlcohol - 1) min 100) max 0;
EPOCH_playerAliveTime = round(EPOCH_playerAliveTime + (_tickTime - EPOCH_clientAliveTimer));
EPOCH_clientAliveTimer = _tickTime;

View File

@ -13,6 +13,7 @@ _energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnC
_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2;
EPOCH_chargeRate = 0;
EPOCH_playerIsSwimming = false;
// default data if mismatch
if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{

View File

@ -6,9 +6,9 @@ if (isNil "EPOCH_bankTransferActive") then {
ctrlEnable[1600, false];
[] spawn {
[] spawn {
ctrlSetText[1004,"Transfer started."];
_deposit = parseNumber(ctrlText 1401) min EPOCH_playerCrypto;
_withdraw = parseNumber(ctrlText 1402) min EPOCH_bankBalance;
_transfer = parseNumber(ctrlText 1400) min EPOCH_bankBalance;
@ -16,7 +16,7 @@ if (isNil "EPOCH_bankTransferActive") then {
_totalTransfer = (_deposit + _withdraw) + _transfer;
_progress = 0;
uiSleep 1;
uiSleep 1;
_transferTarget = "";
if (_transfer > 0) then {
@ -37,8 +37,7 @@ if (isNil "EPOCH_bankTransferActive") then {
if (_progress >= 100) then {
// if player waited the full time then send upload
EPOCH_storeCrypto_PVS = [player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken];
publicVariableServer "EPOCH_storeCrypto_PVS";
[player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken] remoteExec ["EPOCH_server_storeCrypto",2];
ctrlSetText[1004, "Transfer complete."];
@ -53,4 +52,4 @@ if (isNil "EPOCH_bankTransferActive") then {
EPOCH_bankTransferActive = nil;
ctrlEnable[1600, true];
};
};
};

View File

@ -21,32 +21,6 @@ if (isNull _target) then {
};
if (!isNull _target) then {
if (alive _target) then {
/*
if ((_target isKindOf "LandVehicle") || (_target isKindOf "Air") || (_target isKindOf "Ship") || (_target isKindOf "Tank")) then {
_dialog = "InteractVehicle";
};
if (_ctrl) then {
if (_target isKindOf "Constructions_static_F" || _target isKindOf "Constructions_foundation_F") then {
_dialog = "InteractBaseBuilding";
};
};
*/
/*
if (_target isKindOf "Man") then {
if (_target != player) then {
if (!isPlayer _target) then {
if ((_target getVariable["AI_SLOT", -1]) != -1) then {
_dialog = "InteractNPC";
};
};
};
};
*/
};
if (_forceGear) then {
player action ["Gear", _target];
_handled = true;
@ -57,4 +31,4 @@ if (!isNull _target) then {
};
};
};
_handled
_handled

View File

@ -1,3 +1,5 @@
private["_ok"];
if (isNull _this) exitWith {};
if !(alive _this) exitWith {};
_ok = createdialog "MissionSelect";
if (!_ok) exitWith {};
if (!_ok) exitWith {};

View File

@ -1,14 +1,16 @@
private ["_index","_type","_config","_name","_picture","_qty","_items","_qtys","_ok","_vehicles","_aiItems","_target","_slot"];
_target = cursorTarget;
_slot = _target getVariable ["AI_SLOT",-1];
if (_slot != -1) then {
EPOCH_lastNPCtradeTarget = _target;
closeDialog 0;
_ok = createdialog "TradeNPCMenu";
if (!_ok) exitWith {};
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
{lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
lbSetCurSel[42100, 0];
lbSetCurSel[42101, 0];
};
if (alive _target) then {
_slot = _target getVariable ["AI_SLOT",-1];
if (_slot != -1) then {
EPOCH_lastNPCtradeTarget = _target;
closeDialog 0;
_ok = createdialog "TradeNPCMenu";
if (!_ok) exitWith {};
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
{lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
lbSetCurSel[42100, 0];
lbSetCurSel[42101, 0];
};
};

Some files were not shown because too many files have changed in this diff Show More