diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..198a7c45 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain \ No newline at end of file diff --git a/Changelogs/0.3.8.0.txt b/Changelogs/0.3.8.0.txt index 4bb28a94..1110f723 100644 --- a/Changelogs/0.3.8.0.txt +++ b/Changelogs/0.3.8.0.txt @@ -45,7 +45,7 @@ Build: 439 [Added] FastNights Epoch Event. http://epochmod.com/forum/topic/41949-accelerated-time/?do=findComment&comment=275310 -[Added] Install batch for all CUP mods and CBA. https://github.com/EpochModTeam/Epoch/tree/master/Tools/Install +[Added] Install batch for all CUP mods and CBA. https://github.com/EpochModTeam/Epoch/tree/release/Tools/Install [Changed] The function EPOCH_fnc_addItemOverflow now supports spawning items and weapons types given a count. [Changed] Moved the secure storage config variable 'returnOnPack' from cfgvehicles config to CfgBaseBuilding. [Changed] Make use of new getOutMan EH for vehicle epoch anti wall glitch checks. @@ -55,7 +55,8 @@ Build: 439 [Changed] Increased range for vehicle interactions to fix issues with access to larger vehicles. Thanks to Grahame for the report: http://epochmod.com/forum/index.php?/topic/41894-cannot-unlock-large-vehicles/ [Changed] Preloading sapper by spawning one on the map at server start. [Changed] Change to github markdown for credits and license. -[Fixed] BE kick since 1.58 hotfix. +[Fixed] suppress loot spawning at main traders. Thanks to Ghostrider-DbD- for the report. http://epochmod.com/forum/topic/41954-loot-spawning-at-traders/ +[Fixed] BE kick since 1.58 hotfix. http://epochmod.com/forum/topic/41961-rscdebugconsole_watch-battleye-kick/?do=findComment&comment=275456 [Fixed] Use object as input for remoteExec instead of owner. http://epochmod.com/forum/topic/41959-be-carefull-with-remoteexec-and-owner/ [Fixed] Attempt fix issues with temporary angle and rotation issues with base building. [Fixed] Check for base kit item is in players inventory before spawning ghost. diff --git a/Changelogs/0.3.9.0.txt b/Changelogs/0.3.9.0.txt new file mode 100644 index 00000000..24049051 --- /dev/null +++ b/Changelogs/0.3.9.0.txt @@ -0,0 +1,64 @@ +[New] Epoch Mod configs and some community pbo's are now released under APL-SA license here: https://github.com/EpochModTeam/EpochCore +[Added] Tanoa map support. +[Added] New Task based Mission System. +[Added] (Optional) Support for Ryan's Zombies and Demons mod: http://steamcommunity.com/sharedfiles/filedetails/?id=501966277 with custom Epoch implementation. +[Added] New custom variable EPOCH_playerNuisance that increases based on the type of weapon fired and decreases at a rate of 1 per 10 seconds. This is used to track how active a shooter the player is. +[Added] Player option to Morph into a random antagonist (from deathMorphClass) after death. The array 'deathMorphClass' found in CfgEpochClient can be used to specify what antagonists to randomly spawn. +[Added] Player option to detonate body after death. Sacrifice yourself by generating a runaway thermal cascade using the nano bots within your body. Nothing left to revive. +[Added] object loot tables for zombies, sharks and Dogs. +[Added] looting Dogs for meat (uses placeholder object "goat leg"). Negative Karma given for eating or gutting dogs. +[Changed] Increased loot bias 10% overall and increased loot density for military and other larger buildings. +[Changed] new function Epoch_message, replaces Epoch_dynamicText. +[Changed] Object Interaction and EPOCH_client_bitePlayer settings in now config CfgObjectInteractions. Lootable objects can now effect player stats. +[Changed] Moved all Base Building variables to gamemode config CfgBaseBuilding. +[Changed] Moved all Item Interaction to new gamemode config CfgItemInteractions. +[Changed] Sapper groan or detonate can be triggered by setting a variable on the target or sapper. +[Changed] Server can be asked by a client / server to trigger an antagonist on another client. Antagonist is then run on target PC, independent from caller of function. +[Changed] Epoch Unit Spawn code. Now can be called specifying the target of the antagonist. Antagonist will run on target client PC. +[Changed] Sapper defaults tweaked to make them more responsive. +[Changed] New Sapper antagonist config options: +reflexSpeed - Set the loop pause. Defaults have been lowered to make sapper more responsive. +nestChance - A percentage chance, at each sapper spawn, that he will create a nest. +hideLevel - (Fear Emotion) Set level at which sapper will go into hiding based on fear of armed players, being shot near etc. +chargeLevel - (Anger Emotion) Set level at which sapper will trigger 'charge the player' mode. +[Changed] New UAV Support Troops antagonist config options: +unitTypes - an array of soldier classes to randomly choose from. Custom weapons to-do, use soldiers with default weapon loadout or handle weapons with custom script. +maxUnitNum - Maximum number of units to spawn per UAV. +minAISkill - Minimum value for any AI skill. +maxAimingAccuracy -> maxGeneral - Set the maximum value for each available AI skill. A random number between minAISkill and the value for each will be set as that skill. +[Fixed] To prevent A3 dupe issues Epoch Militia Solders when taking uniforms, they no longer have uniforms. +[Fixed] To prevent animation glitch with weapon switching on the move and holstering. You now must be standing still to holster your weapon. +[Fixed] Custom Epoch Gestures not working since 1.60. +[Fixed] Issue with animals not returning raw meat. +[Fixed] Getting wet and cold on standing on pier. Thanks to umfufu for the report! http://epochmod.com/forum/topic/41929-getting-10-points-of-wetness/ +[Fixed] Missing texture issues with some base building objects since 0.3.8. +[Info] A big thanks to Isaac, Axeman's chief tester! + +**Server Only** +[Added] Improved plant spawner by Redbeard Actual and [VB]AWOL. +[Added] Allow Epoch Events to accept full file path if 4th variable in the EpochEvents array is set to 0. Default is 1. +[Added] Function to effect a players Crypto server side: EPOCH_server_effectCrypto +[Added] New experimental PBO packing tool found in Epoch/Tools/PowerShell/ +[Added] Server function to allow remote exec of setVariable on client - Allows client to ask another client to set a local variable, via the server. Server can run same function. +[Added] Epoch AH: Added ability to kick, instead of just log or ban. +[Changed] Changed gamemode to Survival, (might show as unknown gamemode pre 1.62) +[Changed] Reworked vehicle load function and made vehicles immune to damage for 120 seconds after startup. +[Changed] cfgpatches check now kicks by default with message a message. +[Changed] Vehicle persistence texture configs are now found in server settings pbo. https://github.com/EpochModTeam/Epoch/blob/experimental/Sources/epoch_server_settings/configs/CfgEpochVehicles.h +[Changed] Use new disableChannels syntax in 1.60 and enable text chat on side chat and not voice. Thanks to @morgoth0 for the heads up! https://github.com/EpochModTeam/Epoch/issues/544 +[Changed] ForceRestart option should now restart as soon as all players disconnect and server is locked. +[Changed] Epoch Events can now self initialize on server startup (if third events[] array element is 1). Fixes issue with weather not changing till first event run. +[Removed] Epoch AH removed whitelisted variable check system. +[Removed] STEAMAPI Vac ban check as it needs reworked in the extension. +[Fixed] Take into account trader stored per class vehicle limits when spawning new vehicles. +[Fixed] Disappearing Mags on login / revive. Thanks to He-Man for the fix: http://epochmod.com/forum/topic/42178-disappearing-mags-on-login-revive-fix/#comment-277194 +[Fixed] CUP mods enabled check logic typo. Thanks to @morgoth0 for the report: https://github.com/EpochModTeam/Epoch/issues/543 +[Fixed] BE kick when player opened stock A3 dialog (Game > Options > Layout). +[Fixed] BE kick with Spawn Loot admin panel option. Thanks to @jostster for the report: https://github.com/EpochModTeam/Epoch/issues/540 +[Updated] Loot position tool: Epoch/Tools/SQF/saveLootPositionsVector.sqf +[Updated] World config tool: Epoch/Tools/SQF/getTreesAndTrash.sqf +[Info] Changed name of a3_epoch_server.pbo to epoch_server.pbo. Also changed path from \x\addons\a3_epoch_server to \epoch_server +[Info] Changed name of a3_epoch_server_settings.pbo to epoch_server_settings.pbo. +[Info] RConPort 2306 added to example-beserver.cfg for changes since A3 1.58. +[Info] Removed old .bikey and added new one for 0390. +[Info] Requires Arma 3 1.60 or higher. diff --git a/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server.pbo similarity index 72% rename from Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo rename to Server_Install_Pack/@epochhive/addons/epoch_server.pbo index 9ade82f7..1b19fe27 100644 Binary files a/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo and b/Server_Install_Pack/@epochhive/addons/epoch_server.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo index fb956e88..8ea9e469 100644 Binary files a/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo and b/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo similarity index 86% rename from Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo rename to Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo index ad92f862..97f9b802 100644 Binary files a/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo and b/Server_Install_Pack/@epochhive/addons/epoch_server_settings.pbo differ diff --git a/Server_Install_Pack/@epochhive/epochah.hpp b/Server_Install_Pack/@epochhive/epochah.hpp index 9e2e337f..77b2b401 100644 --- a/Server_Install_Pack/@epochhive/epochah.hpp +++ b/Server_Install_Pack/@epochhive/epochah.hpp @@ -2,11 +2,18 @@ antihack_Enabled = true; // built-in Anti-Hack antihack_cfgPatchesCheck = true; // cfgPatches (AddOn Check) antihack_PVSPrefix = "EPAH_"; // used to help whitelist pveh variables in BE without BEC and watchdog, leave blank to use no prefix. -antihack_cfgPatchesCfg[] = {0}; // 0 == BAN - 1 = LOG +antihack_cfgPatchesMode[] = {2}; // 0 == BAN - 1 = LOG, 2 = KICK antihack_ahInitAuthCfg[] = {0,180}; // 0 == BAN - 1 = LOG, 60 = ban or log if anti hack is not started in 180 seconds -antihack_whitelistedCfgPatches[] = {"A3Data","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Language_F_MP_Mark","A3_LanguageMissions_F_MP_Mark","Map_VR","A3_Map_VR_Scenes","CUP_A10_Data","CUP_Afghan_Data","CUP_Air2_Data","CUP_Air3_Data","CUP_Air_Data","CUP_Air_d_baf_Data","CUP_Air_e_Data","CUP_Air_pmc_Data","CUP_CA_animals2","CA_animals2","CUP_Animations_Data","CUP_Animations_Config","CUP_Bohemia_Data","CUP_Bootcamp_acr_Data","CUP_Buildings2_Data","CUP_Buildings2_Ind_Cementworks_Data","CUP_Buildings_Data","CUP_Ca_acr_Data","CUP_CA_Config","CAData","CUP_Ca_e_Data","CUP_Ca_pmc_Data","CUP_Characters2_Data","CUP_Chernarus_Data","CUP_Chernarus_Summer_Data","CUP_Cti_buildings_Data","CUP_CA_Data","CUP_CAData_ParticleEffects","CAData_ParticleEffects","CUP_Data_baf_Data","CUP_dbe1_data","CUP_Desert2_Data","CUP_Desert2_Objects","Desert2_Objects","CUP_Desert_Data","CUP_Desert_e_Data","CUP_Hotfix_Data","CUP_L39_Data","CUP_CALanguage","CALanguage","CUP_CALanguage_ACR","CALanguage_ACR","CUP_CALanguage_missions","CALanguage_missions","CUP_CALanguage_missions_e","CALanguage_missions_e","CUP_Misc3_Data","CUP_CAMisc","CUP_Misc_Data","CAMisc","CUP_Misc_acr_Data","CUP_Misc_e_Data","CUP_CA_MPA","CA_MPA","CUP_CA_Plants2_Clutter","CA_Plants2_Clutter","CUP_CAPlants","CAPlants","CUP_CA_Plants_E_Clutter","CA_Plants_E_Clutter","CUP_Provinggrounds_pmc_Data","CUP_CARoads2","CARoads2","CUP_CARoads2Dam","CARoads2Dam","CUP_CARoads","CARoads","CUP_CARoads_E","CARoads_E","CUP_CARoads_PMC","CARoads_PMC","CUP_CARocks2","CARocks2","CUP_CARocks","CARocks","CUP_CARocks_E","CARocks_E","CUP_Sara_Data","CUP_Saralite_Data","CUP_Shapur_baf_Data","CUP_CASigns","CASigns","CUP_CASigns_E","CASigns_E","CUP_Sounds_Data","CUP_Sounds_Config","CASounds","CUP_Sounds_e_Data","CUP_Structures_Data","CUP_pond_test","pond_test","CUP_Structures_e_Data","CUP_Structures_pmc_Data","CUP_Takistan_Data","CUP_Tracked2_Data","CUP_Tracked_Data","CUP_Tracked_e_Data","CUP_CAFonts","CAFonts","CUP_Utes_Data","CUP_Water2_Data","CUP_Water_Data","CUP_Weapons2_Data","CUP_Weapons_Data","CUP_Weapons_e_Data","CUP_Weapons_pmc_Data","CUP_Wheeled2_Data","CUP_Wheeled_Data","CUP_Wheeled_e_Data","CUP_Zargabad_Data","CUP_A1AlwaysDummy","CAVideo2_PMC","CA_AnimsHotfix","CA_CutSceneAnims","CAIntroAnims","CAUSMCD","CAVoice","CAweapons3_aks74pso","CAWeapons3_ammocrates","CAweapons3_ksvk","CAweapons3_m107","CAweapons3_m16a4_acg_gl","CAweapons3_m16a4_acg","CAweapons3_m16a4_gl","CAweapons3_m16a4","CAWeapons3","CTI_buildingsBmp2_hq","CTI_buildingsM113_hq","DSHkM_Mini","M2HD_Mini","MK19_Tripod","Warfare","WarfareBuildings_Stinger_Twice_static","WarfareBuildings_T72_RACS","WarfareBuildings_TOW_Tripod","CUP_AiA_compat","AiA_A1AlwaysDummy","AiA_Afghan_Config","AiA_Afghan_Data","AiA_BaseConfig_F","AiA_Bohemia_Config","AiA_Bohemia_Data","AiA_Bootcamp_acr_Config","AiA_Bootcamp_acr_Data","AiA_Buildings_Config","AiA_Buildings_Data","AiA_Buildings2_Config","AiA_Buildings2_Data","AiA_Buildings2_Ind_Cementworks_Config","AiA_Buildings2_Ind_Cementworks_Data","AiA_Ca_acr_Config","AiA_Ca_acr_Data","AiA_CA_Config","AiA_CA_Config_Data_ParticleEffects","AiA_CA_Data","AiA_Ca_e_Config","AiA_Ca_e_Data","AiA_Ca_pmc_Config","AiA_Ca_pmc_Data","AiA_CBA_A2_xeh_Dummy","AiA_CBA_OA_xeh_Dummy","AiA_cba_xeh_a2_Dummy","AiA_cba_xeh_oa_Dummy","AiA_Chernarus_Config","AiA_Chernarus_Data","AiA_Chernarus_Summer_Config","AiA_Chernarus_Summer_Data","AiA_Core","AiA_Cti_buildings_Config","AiA_Cti_buildings_Data","AiA_Data_baf_Config","AiA_Data_baf_Data","AiA_Desert_Config","AiA_Desert_Data","AiA_Desert_e_Config","AiA_Desert_e_Data","AiA_Desert2_Config","AiA_Desert2_Data","AiA_Hotfix_Config","AiA_Hotfix_Data","AiA_Language_acr_Config","AiA_Language_acr_Data","AiA_Language_baf_Config","AiA_Language_baf_Data","AiA_Language_e_Config","AiA_Language_e_Data","AiA_Language_pmc_Config","AiA_Language_pmc_Data","AiA_Languagemissions_acr_Config","AiA_Languagemissions_acr_Data","AiA_Languagemissions_baf_Config","AiA_Languagemissions_baf_Data","AiA_Languagemissions_pmc_Config","AiA_Languagemissions_pmc_Data","AiA_Misc_acr_Config","AiA_Misc_acr_Data","AiA_Misc_Config","AiA_Misc_Data","AiA_Misc_e_Config","AiA_Misc_e_Data","AiA_Misc2_Config","AiA_Misc2_Data","AiA_Misc3_Config","AiA_Misc3_Data","AiA_Models_DBE1_Config","AiA_Models_DBE1_Data","AiA_Plants_Config","AiA_Plants_Data","AiA_Plants_e_Config","AiA_Plants_e_Data","AiA_Plants_e2_Config","AiA_Plants_e2_Data","AiA_Plants_pmc_Config","AiA_Plants_pmc_Data","AiA_Plants2_Bush_Config","AiA_Plants2_Bush_Data","AiA_Plants2_Clutter_Config","AiA_Plants2_Clutter_Data","AiA_Plants2_Misc_Config","AiA_Plants2_Misc_Data","AiA_Plants2_Plant_Config","AiA_Plants2_Plant_Data","AiA_Plants2_Tree_Config","AiA_Plants2_Tree_Data","AiA_Provinggrounds_pmc_Config","AiA_Provinggrounds_pmc_Data","AiA_Roads_Config","AiA_Roads_Data","AiA_Roads_e_Config","AiA_Roads_e_Data","AiA_Roads_pmc_Config","AiA_Roads_pmc_Data","AiA_Roads2_Config","AiA_Roads2_Data","AiA_Rocks_Config","AiA_Rocks_Data","AiA_Rocks_e_Config","AiA_Rocks_e_Data","AiA_Rocks2_Config","AiA_Rocks2_Data","AiA_Sara_Config","AiA_Sara_Data","AiA_Sara_dbe1_Config","AiA_Sara_dbe1_Data","AiA_Saralite_Config","AiA_Saralite_Data","AiA_Shapur_baf_Config","AiA_Shapur_baf_Data","AiA_Signs_Config","AiA_Signs_Data","AiA_Signs_e_Config","AiA_Signs_e_Data","AiA_Signs2_Config","AiA_Signs2_Data","AiA_Sounds_Config","AiA_Sounds_Data","AiA_StandaloneTerrainPack_Core","AiA_StandaloneTerrains_Core","AiA_Structures_Config","AiA_Structures_Data","AiA_Structures_e_Config","AiA_Structures_e_Data","AiA_Structures_pmc_Config","AiA_Structures_pmc_Data","AiA_Takistan_Config","AiA_Takistan_Data","AiA_Ui_Config","AiA_Ui_Data","AiA_Utes_Config","AiA_Utes_Data","AiA_Water_Config","AiA_Water_Data","AiA_Water2_Config","AiA_Water2_Data","AiA_Weapons_Config","AiA_Weapons_Data","AiA_Weapons_e_Config","AiA_Weapons_e_Data","AiA_Weapons_pmc_Config","AiA_Weapons_pmc_Data","AiA_Weapons2_Config","AiA_Weapons2_Data","AiA_Wheeled_Config","AiA_Wheeled_Data","AiA_Wheeled_e_Config","AiA_Wheeled_e_Data","AiA_Wheeled2_Config","AiA_Wheeled2_Data","AiA_Worlds","AiA_Worlds_Ambient","AiA_Worlds_Author","AiA_Worlds_Clutter","AiA_Worlds_ClutterDist","AiA_Worlds_Delete","AiA_Worlds_DisableInfiniteTerrain","AiA_Worlds_DustEffects","AiA_Worlds_EnvSounds","AiA_Worlds_FullDetailDist","AiA_Worlds_Grid","AiA_Worlds_Intros","AiA_Worlds_Lighting","AiA_Worlds_Lighting_Chernarus","AiA_Worlds_Lighting_Desert","AiA_Worlds_MapSize","AiA_Worlds_MidDetailTexture","AiA_Worlds_NoDetailDist","AiA_Worlds_Seabed","AiA_Worlds_SkyTexture","AiA_Worlds_StreetLamp","AiA_Worlds_Surfaces","AiA_Worlds_Water","AiA_Zargabad_Config","AiA_Zargabad_Data","CUP_StandaloneTerrains_Dummy","CA_ACR","CA_Animals2_Anim_Config","CA_Anims_Char","CA_Anims_E_Wmn","CA_E","CA_PMC","CAAir","CACharacters","CATracked","CAWater","CAWater2","CAWater2_seafox","CAWeapons","CAWeapons_Warfare_weapons","CAWheeled","CAWheeled_E","CAWheeled2","6G30_DBE1","Arma2_Ka52","BI_SRRS","CA_AH64D","CA_AIR_E_MQ9PredatorB","CA_AIR_E_Su25","CA_AIR2_Su25","CA_Animals_E","CA_Animals2_Chicken","CA_Animals2_Cow","CA_Animals2_Dogs","CA_Animals2_Dogs_Fin","CA_Animals2_Dogs_Pastor","CA_Animals2_Goat","CA_Animals2_Rabbit","CA_Animals2_Sheep","CA_Animals2_WildBoar","CA_Anims","CA_Anims_E","CA_Anims_E_Sdr","CA_Anims_Sdr","CA_Anims_Wmn","CA_CommunityConfigurationProject_E","CA_CruiseMissile","CA_Dubbing","CA_Dubbing_Baf","CA_Dubbing_Counterattack","CA_Dubbing_E","CA_Dubbing_PMC","CA_DubbingRadio_E","CA_DubbingRadio_PMC","CA_E_ParticleEffects","CA_Editor","CA_HC_Sounds","CA_Heads","CA_HighCommand","CA_L39","CA_Missions","CA_Missions_AlternativeInjurySimulation","CA_Missions_AmbientCombat","CA_Missions_Armory1","CA_Missions_Armory2","CA_Missions_BAF","CA_Missions_BAF_2","CA_Missions_BAF_Templates_SecOps","CA_Missions_BattlefieldClearance","CA_Missions_E","CA_Missions_E_Armory2","CA_Missions_E_SecOps","CA_Missions_E_Templates_SecOps","CA_Missions_FirstAidSystem","CA_Missions_GarbageCollector","CA_Missions_PMC","CA_Missions_SecOps","CA_Missions_Templates_SecOps","CA_Missions2_PMC","CA_Modules","CA_Modules_Alice","CA_Modules_Animals","CA_Modules_ARTY","CA_Modules_clouds","CA_Modules_Coin","CA_Modules_DynO","CA_Modules_E","CA_Modules_E_DynO","CA_Modules_E_Jukebox","CA_Modules_E_OO","CA_Modules_E_UAV","CA_Modules_E_UAV_Heli","CA_Modules_E_Weather","CA_Modules_Functions","CA_Modules_Marta","CA_Modules_PMC","CA_Modules_PMC_SimpleFIrstAid","CA_Modules_Silvie","CA_Modules_StratLayer","CA_Modules_UAV","CA_Modules_ZoRA","CA_MPA_Challenges","CA_MPA_Core","CA_MPA_MP","CA_MPA_Scenarios","CA_Sounds_Baf","CA_SoundsMissions_E","CA_Support","CAA10","CAAir_BAF","CAAir_BAF_CH_47F","CAAir_E","CAAir_E_A10","CAAir_E_AH64D","CAAir_E_AH6J","CAAir_E_An2","CAAir_E_C130J","CAAir_E_CH_47F","CAAir_E_Halo","CAAir_E_Mi24","CAAir_E_MI8","CAAir_E_UH1H_EP1","CAAir_E_UH60M","CAAir_PMC","CAAir_PMC_KA137","CAAir_PMC_KA60","CAAir2","CAAir2_C130J","CAAir2_ChukarTarget","CAAir2_F35B","CAAir2_MQ9PredatorB","CAAir2_MV22","CAAir2_Pchela1T","CAAir2_UH1Y","CAAir3","CAAir3_Su34","CAAnimals","CACharacters_BAF","CACharacters_BAF_Head","CACharacters_E","CACharacters_E_Head","CACharacters_PMC","CACharacters_PMC_Head","CACharacters_W_BAF","CACharacters2","CAMisc_fix","CAMisc_fix_A2FREE","CAMisc_fix_air","CAMisc_fix_Ch2","CAMisc_fix_Str","CAMisc_fix_Weap","CAMusic","CAMusic_E","CAMusic_PMC","CASounds_E","CASounds_Missions","CATracked_BAF","CATracked_E","CATracked_E_BMP2","CATracked_E_M1_Abrams","CATracked_E_M113","CATracked_E_M2A2_Bradley","CATracked_E_T34","CATracked_E_T55","CATracked_E_T72","CATracked_E_us_m270mlrs","CATracked_E_ZSU","CATracked_W_BAF","CATracked2","CATracked2_2S6M_Tunguska","CATracked2_AAV","CATracked2_BMP3","CATracked2_T34","CATracked2_T90","CATracked2_us_m270mlrs","CAWater2_Destroyer","CAWater2_fishing_boat","CAWater2_Fregata","CAWater2_smallboat_1","CAWeapons_2b14_82mm_Mortar","CAWeapons_AK","CAWeapons_AmmoBoxes","CAWeapons_BAF","CAWeapons_bizon","CAWeapons_Colt1911","CAWeapons_DMR","CAWeapons_E","CAWeapons_E_AGS","CAWeapons_E_AK","CAWeapons_E_AmmoBoxes","CAWeapons_E_Colt1911","CAWeapons_E_D30","CAWeapons_E_DSHKM","CAWeapons_E_FIM92_static","CAWeapons_E_fnfal","CAWeapons_E_G36","CAWeapons_E_GrenadeLauncher","CAWeapons_E_Igla","CAWeapons_E_Javelin","CAWeapons_E_KORD","CAWeapons_E_ksvk","CAWeapons_E_LeeEnfield","CAweapons_E_m107","CAWeapons_E_M110","CAWeapons_E_M119_Howitzer","CAWeapons_E_M136","CAWeapons_E_M14","CAWeapons_E_M16","CAWeapons_E_M240","CAWeapons_E_M252_81mm_Mortar","CAWeapons_E_M2StaticMG","CAWeapons_E_M47","CAWeapons_E_M9","CAWeapons_E_MAAWS","CAWeapons_E_Makarov","CAWeapons_E_Metis","CAWeapons_E_Mk19_MiniTriPod","CAWeapons_E_PK","CAWeapons_E_Podnos_2b14_82mm","CAWeapons_E_RPG18","CAWeapons_E_RPG7","CAWeapons_E_scar","CAWeapons_E_Searchlight","CAWeapons_E_SPG9","CAWeapons_E_STATIC","CAWeapons_E_Stinger","CAWeapons_E_Strela","CAWeapons_E_TOW","CAWeapons_E_ZU23","CAWeapons_Kord","CAweapons_ksvk","CAWeapons_M1014","CAweapons_m107","CAWeapons_M252_81mm_Mortar","CAWeapons_Metis_AT_13","CAWeapons_PMC","CAWeapons_PMC_AA_12","CAWeapons_PMC_AS50","CAWeapons_PMC_XM8","CAWeapons_Saiga12K","CAWeapons_SPG9","CAWeapons_VSS_vintorez","CAWeapons_ZU23","CAWeapons2","CAWeapons2_HuntingRifle","CAWeapons2_RPG18","CAWeapons2_SMAW","CAWheeled_D_BAF","CAWheeled_E_ATV","CAWheeled_E_BRDM2","CAWheeled_E_BTR40","CAWheeled_E_BTR60","CAWheeled_E_HMMWV","CAWheeled_E_Ikarus","CAWheeled_E_LADA","CAWheeled_E_LandRover","CAWheeled_E_M1030","CAWheeled_E_MTVR","CAWheeled_E_Offroad","CAWheeled_E_Old_bike","CAWheeled_E_Old_moto","CAWheeled_E_Pickup","CAWheeled_E_s1203","CAWheeled_E_SCUD","CAWheeled_E_stryker","CAWheeled_E_SUV","CAWheeled_E_TT650","CAWheeled_E_UAZ","CAWheeled_E_Ural","CAWheeled_E_V3S","CAWheeled_E_Volha","CAWheeled_Offroad","CAWheeled_Pickup","CAWheeled_PMC","CAWheeled_PMC_ArmoredSUV","CAWheeled_W_BAF","CAWheeled2_BTR90","CAWheeled2_GAZ39371","CAWheeled2_HMMWV_Ambulance","CAWheeled2_HMMWV_BASE","CAWheeled2_Ikarus","CAWheeled2_Kamaz","CAWheeled2_LADA","CAWheeled2_LAV25","CAWheeled2_M1114_Armored","CAWheeled2_M998A2_Avenger","CAWheeled2_MMT","CAWheeled2_MTVR","CAWheeled2_TowingTractor","CAWheeled2_V3S","CAWheeled2_VWGolf","CAWheeled3","CAWheeled3_M1030","CAWheeled3_TT650","Datsun_armed_DBE1","DBE1","DBE1_UI","DC3_DBE1","HALO_Test","Hilux_armed_DBE1","Warfare2","Warfare2_E","Warfare2Vehicles","CUP_Models_DBE1_Data","CUP_Anims_DBE1","Anims_DBE1","CUP_HMMWV_DBE1","HMMWV_DBE1","CUP_Mercenary_DBE1","Mercenary_DBE1","CUP_Misc_DBE1","Misc_DBE1","CUP_Music_DBE1","Music_DBE1","CUP_NPCs_DBE1","NPCs_DBE1","CUP_ploty_DBE1","ploty_DBE1","CUP_Prisoners_DBE1","Prisoners_DBE1","CUP_Roads_DBE1","Roads_DBE1","CUP_UH60Desert","UH60Desert","CUP_Sara_dbe1_Data","CUP_TKOH_Dummy","HSim_Data_H","HSim_Data_H_data_ParticleEffects","HSim_Data_H_data_ParticleEffects_rotor_blades","HSim_Dubbing_H","HSim_DubbingRadio_H","HSim_Editor_H","Intro_Island_H","HSim_Missions_H","HSim_ModulesCore_H","HSim_ModulesCore_H_AmbientCombat","HSim_ModulesCore_H_DynO","HSim_ModulesCore_H_Functions","HSim_ModulesCore_H_GarbageCollector","HSim_ModulesCore_H_Functions_E","HSim_ModulesCore_H_OO","HSim_ModulesCore_H_Functions_PMC","HSim_Music_H","HSim_Sounds_H","South_Asia_H","HSim_UIFonts_H","United_States_H","HSim_Animals_H","HSim_Animals_H_Anim_Config","HSim_Animals_H_Dog","HSim_Characters_H_Faces","HSim_Characters_H_Heads","HSim_Modules_H","HSim_UI_H","HSim_Weapons_H","HSim_Weapons_H_AK47","HSim_Weapons_H_DShKM","HSim_Weapons_H_Glock","HSim_Weapons_H_HandItems","HSim_Weapons_H_M16","HSim_Weapons_US_H","HSim_Characters_H","HSim_Characters_US_H","HSim_Missions_H_FreeFlight","HSim_Functions_Base_H","HSim_Water_H","HSim_Water_H_Civ_FishingBoat_Large","HSim_Water_H_Civ_Jetboat","HSim_Water_H_Civ_Yacht","HSim_Water_H_Container_Ship","HSim_Water_H_Cruise_Ship","HSim_Water_H_Destroyer","HSim_Water_H_Fishing_Boat","HSim_Water_H_Fregata","HSim_Water_H_LHD","HSim_Water_H_Oil_tanker","HSim_Water_H_Rubber_Boat","HSim_Water_H_Whales","HSim_Water_H_Whales_GreyWhale","HSim_Water_H_Whales_Whale1","HSim_Weapons_H_IGLA","HSim_Weapons_US_H_M2","HSim_Wheeled_H","HSim_Wheeled_H_Ambulance","HSim_Wheeled_H_FireTruck","HSim_Wheeled_H_Hatchback","HSim_Wheeled_H_Military_Offroad_LR","HSim_Wheeled_H_Military_Pickup_DSHKM","HSim_Wheeled_H_Offroad","HSim_Wheeled_H_Police_Car","HSim_Wheeled_H_TowingTractor","HSim_Wheeled_H_Tractor","HSim_Wheeled_H_Trailers","HSim_Wheeled_H_Truck_Light_Transport","HSim_Wheeled_H_Ural","HSim_Wheeled_H_Van_Passenger","HSim_Wheeled_US_H","HSim_Wheeled_US_H_Military_Offroad","HSim_Wheeled_US_H_Military_Truck","HSim_Wheeled_US_H_Pickup_01","HSim_Wheeled_US_H_Pickup_02","HSim_Wheeled_US_H_SUV","HSim_Wheeled_US_H_Truck_US_Type","HSim_Air_H","HSim_Air_H_Aircraft_A","HSim_Air_H_Aircraft_C","HSim_Air_H_Aircraft_D","HSim_Air_H_Aircraft_E_H","HSim_Air_H_Airliner_A","HSim_Air_H_Airliner_B","HSim_Air_H_Parachute","HSim_Air_US_H","HSim_Air_US_H_Helicopters_Heavy","HSim_Air_US_H_Helicopters_Light","HSim_Air_US_H_Helicopters_Medium","HSim_Misc_H","HSim_Misc_H_Antena","HSim_Misc_H_Barels","HSim_Misc_H_Bleacher","HSim_Misc_H_BoardsPack","HSim_Misc_H_CncBlock","HSim_Misc_H_Doghouse","HSim_Misc_H_Engine_Crane","HSim_Misc_H_Fence","HSim_Misc_H_Fire_Extinguisher","HSim_Misc_H_Fire_Suppression","HSim_Misc_H_First_Aid","HSim_Misc_H_Flagpole","HSim_Misc_H_Folding_Ladder","HSim_Misc_H_FuelCan","HSim_Misc_H_Heliport_Furniture","HSim_Misc_H_Helicopter_Parts","HSim_Misc_H_Helipads","HSim_Misc_H_Heliport_Objects","HSim_Misc_H_Helpers","HSim_Misc_H_Info_Board","HSim_Misc_H_Infostands","HSim_Misc_H_Inspection_Visuals","HSim_Misc_H_Interior","HSim_Misc_H_Loudspeakers","HSim_Misc_H_Market","HSim_Misc_H_Office_Objects","HSim_Misc_H_Perimeter_Ligh","HSim_Misc_H_Pike","HSim_Misc_H_Platform_Cart","HSim_Misc_H_Portable_Generator","HSim_Misc_H_Props","HSim_Misc_H_SawHorse","HSim_Misc_H_Shooting_Range","HSim_Misc_H_Signs","HSim_Misc_H_Sink","HSim_Misc_H_Targets","HSim_Misc_H_Tent","HSim_Misc_H_Toilet","HSim_Misc_H_Tools","HSim_Misc_H_Tools_Racking","HSim_Misc_H_Trash","HSim_Misc_H_Weather_Station","HSim_Misc_H_Weld_Gastank","HSim_Misc_H_Wheel_Chocks","HSim_Misc_H_Wheeled_Scaffolding","HSim_Misc_H_wheeled_tool_cart","HSim_Misc_H_Wheeled_Whiteboard","HSim_Misc_H_Winch","HSim_Misc_H_Windsock","HSim_Misc_H_Workbench","HSim_Misc_H_Wrecks","HSim_Structures_H","HSim_Structures_H_Airport_Papi","HSim_Structures_H_Harbour","HSim_Structures_H_Heliports_Heliport_Big","HSim_Structures_H_Heliports_Heliport_Small","HSim_Structures_H_Industrial_A_CraneCon","HSim_Structures_H_Industrial_Rooftop_Objects","HSim_Structures_US_H","HSim_Structures_US_H_Bld_US","HSim_Structures_US_H_Landmarks_Space_Needle","HSim_Tracked_H","HSim_Tracked_H_BMP2","HSim_Tracked_US_H","HSim_Tracked_US_H_M1A2","HSim_Tracked_US_H_MLRS","HSim_Data_H_EditorGroups","HSim_Anims_H","HSim_Anims_H_config_sdr","HSim_Anims_H_config_wmn","CUP_Hsim_Language_H","Hsim_Language_H","CUP_Hsim_Language_missions_H","Hsim_Language_missions_H","Enhanced_Epoch_AiASupport","A3_epoch_assets_1","epoch_objects","A3_epoch_assets_3","Underground_Epoch","A3_epoch_vehicles","a3_epoch_weapons","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Data_F_Bootcamp","A3_Data_F_Exp_A","A3_Data_F_Kart_ParticleEffects","A3_Data_F_Mark","A3_Editor_F","A3_Functions_F_Bootcamp","A3_Functions_F_Curator","A3_Functions_F_Exp_A","A3_Functions_F_Heli","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_Language_F_Heli","A3_Language_F_Kart","A3_Language_F_Mark","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_LanguageMissions_F_Kart","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_Mark_Objectives","A3_Music_F","A3_Music_F_Bootcamp","A3_Music_F_EPA","A3_Music_F_EPB","A3_Music_F_EPC","A3_Music_F_Heli","A3_Music_F_Mark","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_Bootcamp","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Sounds_F_Exp_A","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_UIFonts_F","CUP_Buildings_Config","CABuildings","CUP_CABuildings_Misc","CABuildings_Misc","CUP_Desert2_Buildings","Desert2_Buildings","CUP_CA_desert2_Characters","CA_desert2_Characters","CUP_Desert_Config","Desert","CUP_DBE1_Hotfix","DBE1_Hotfix","CUP_CALanguage_e","CALanguage_e","CUP_CALanguage_PMC","CALanguage_PMC","CUP_CALanguage_missions_PMC","CALanguage_missions_PMC","CUP_CAWater2_seafox_EP1","CAWater2_seafox_EP1","CUP_CA_Plants2","CA_Plants2","CUP_CA_Plants2_Plant","CA_Plants2_Plant","CUP_CA_Plants2_Tree","CA_Plants2_Tree","CUP_CA_Plants_E2","CA_Plants_E2","CUP_CA_Plants_E","CA_Plants_E","CUP_CA_Plants_E_Misc","CA_Plants_E_Misc","CUP_CA_Plants_E_Plant","CA_Plants_E_Plant","CUP_CA_Plants_E_Tree","CA_Plants_E_Tree","CUP_Sara_Config","Sara","CUP_Saralite_Config","SaraLite","CUP_CASigns2","CASigns2","CUP_Structures_Config","CAStructures","CUP_CAStructures_A_BuildingWIP","CAStructures_A_BuildingWIP","CUP_CAStructures_A_CraneCon","CAStructures_A_CraneCon","CUP_CAStructuresLand_A_MunicipalOffice","CAStructuresLand_A_MunicipalOffice","CUP_CAStructuresBarn_W","CAStructuresBarn_W","CUP_CAStructures_Castle","CAStructures_Castle","CUP_CAStructuresHouse","CAStructuresHouse","CUP_CAStructuresHouse_A_FuelStation","CAStructuresHouse_A_FuelStation","CUP_CAStructuresHouse_A_Hospital","CAStructuresHouse_A_Hospital","CUP_CAStructuresHouse_A_Office01","CAStructuresHouse_A_Office01","CUP_CAStructuresHouse_A_Office02","CAStructuresHouse_A_Office02","CUP_CAStructuresHouse_a_stationhouse","CAStructuresHouse_a_stationhouse","CUP_CAStructuresHouse_Church_02","CAStructuresHouse_Church_02","CUP_CAStructuresHouse_Church_03","CAStructuresHouse_Church_03","CUP_CAStructuresHouse_Church_05R","CAStructuresHouse_Church_05R","CUP_CAStructuresHouse_HouseBT","CAStructuresHouse_HouseBT","CUP_CAStructuresHouse_HouseV2","CAStructuresHouse_HouseV2","CUP_CAStructuresHouse_HouseV","CAStructuresHouse_HouseV","CUP_CAStructuresLand_Ind_Stack_Big","CAStructuresLand_Ind_Stack_Big","CUP_CAStructures_IndPipe1","CAStructures_IndPipe1","CUP_CAStructuresInd_Quarry","CAStructuresInd_Quarry","CUP_Ind_SawMill","Ind_SawMill","CUP_CAStructures_Mil","CAStructures_Mil","CUP_CAStructures_Misc","CAStructures_Misc","CUP_CAStructures_Misc_Armory","CAStructures_Misc_Armory","CUP_CAStructures_Misc_Armory_Armor_Popuptarget","CAStructures_Misc_Armory_Armor_Popuptarget","CUP_CAStructures_Misc_Powerlines","CAStructures_Misc_Powerlines","CUP_CAStructures_Nav","CAStructures_Nav","CUP_CAStructuresLand_Nav_Boathouse","CAStructuresLand_Nav_Boathouse","CUP_CAStructures_Proxy_BuildingParts","CAStructures_Proxy_BuildingParts","CUP_CAStructures_Proxy_Ruins","CAStructures_Proxy_Ruins","CUP_CAStructures_Rail","CAStructures_Rail","CUP_CAStructuresHouse_rail_station_big","CAStructuresHouse_rail_station_big","CUP_CAStructures_Ruins","CAStructures_Ruins","CUP_CAStructuresShed_Small","CAStructuresShed_Small","CUP_CAStructuresHouse_Shed_Ind","CAStructuresHouse_Shed_Ind","CUP_CAStructures_Wall","CAStructures_Wall","CUP_CAUI","CAUI","CUP_CAWater2_LHD","CAWater2_LHD","CUP_Models_DBE1_Config","Models_DBE1","CUP_Kamenolom_DBE1","Kamenolom_DBE1","CUP_Pila_DBE1","Pila_DBE1","CUP_UI_DBE1","UI_DBE1","CUP_Vysilac_DBE1","Vysilac_DBE1","CUP_Zakladna_DBE1","Zakladna_DBE1","CUP_Sara_dbe1_Config","Sara_dbe1","a3_epoch_structures","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Anims_F_Exp_A","A3_Anims_F_Kart","A3_Anims_F_Mark_Deployment","A3_Language_F_Bootcamp","A3_Language_F_Exp_A","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_Signs_Companies","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Kart_Signs_Companies","A3_UI_F","A3_UI_F_Curator","A3_UI_F_Kart","A3_UI_F_Mark","A3_UI_F_MP_Mark","A3_Weapons_F","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_beta_Rifles_Khaybar","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_Mk20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","CUP_Buildings2_Config","CABuildings2","CUP_A_Crane_02","A_Crane_02","CUP_A_GeneralStore_01","A_GeneralStore_01","CUP_CABuildings2_A_Pub","CABuildings2_A_Pub","CUP_A_statue","A_statue","CUP_Barn_Metal","Barn_Metal","CUP_CABuildingParts","CABuildingParts","CUP_CABuildingParts_Signs","CABuildingParts_Signs","CUP_CATEC","CATEC","CUP_Church_01","Church_01","CUP_Farm_Cowshed","Farm_Cowshed","CUP_Farm_WTower","Farm_WTower","CUP_CAHouseBlock_A","CAHouseBlock_A","CUP_CAHouseBlock_B","CAHouseBlock_B","CUP_CAHouseBlock_C","CAHouseBlock_C","CUP_CAHouseBlock_D","CAHouseBlock_D","CUP_HouseRuins","HouseRuins","CUP_Ind_Dopravnik","Ind_Dopravnik","CUP_Ind_Expedice","Ind_Expedice","CUP_Ind_MalyKomin","Ind_MalyKomin","CUP_Ind_Mlyn","Ind_Mlyn","CUP_Ind_Pec","Ind_Pec","CUP_ind_silomale","ind_silomale","CUP_Ind_SiloVelke","Ind_SiloVelke","CUP_Ind_Vysypka","Ind_Vysypka","CUP_Ind_Garage01","Ind_Garage01","CUP_CAStructures_IndPipe1_todo_delete","CAStructures_IndPipe1_todo_delete","CUP_IndPipe2","IndPipe2","CUP_Ind_Shed_01","Ind_Shed_01","CUP_Ind_Shed_02","Ind_Shed_02","CUP_Ind_Tank","Ind_Tank","CUP_Ind_Workshop01","Ind_Workshop01","CUP_CABuildings2_Misc_Cargo","CABuildings2_Misc_Cargo","CUP_Misc_PowerStation","Misc_PowerStation","CUP_Misc_WaterStation","Misc_WaterStation","CUP_Rail_House_01","Rail_House_01","CUP_Shed_small","Shed_small","CUP_Shed_wooden","Shed_wooden","CUP_particle_effects","particle_effects","CUP_Chernarus_Config","Chernarus","CUP_Chernarus_Summer_Config","Chernarus_Summer","CUP_Desert2_Config","Porto","CUP_Hotfix_Config","CA_Hotfix","CUP_CA_QGClutterHotfix","CA_QGClutterHotfix","CUP_CA_Hotfix_vez_ropa","CA_Hotfix_vez_ropa","CUP_CAMisc2","CAMisc2","CUP_Misc3_Config","CAMisc3","CUP_WarfareBuildings","WarfareBuildings","CUP_Misc_e_Config","CAMisc_E","CUP_CAMisc_E_WF","CAMisc_E_WF","CUP_CAMP_Armory_Misc","CAMP_Armory_Misc","CUP_CAMP_Armory_Misc_Concrete_Wall","CAMP_Armory_Misc_Concrete_Wall","CUP_CAMP_Armory_Misc_Entrance_Gate","CAMP_Armory_Misc_Entrance_Gate","CUP_CAMP_Armory_Misc_Info_Board","CAMP_Armory_Misc_Info_Board","CUP_CAMP_Armory_Misc_Infostands","CAMP_Armory_Misc_Infostands","CUP_CAMP_Armory_Misc_Laptop","CAMP_Armory_Misc_Laptop","CUP_CAMP_Armory_Misc_Loudspeakers","CAMP_Armory_Misc_Loudspeakers","CUP_CAMP_Armory_Misc_Plasticpole","CAMP_Armory_Misc_Plasticpole","CUP_CAMP_Armory_Misc_Red_Light","CAMP_Armory_Misc_Red_Light","CUP_CAMP_Armory_Misc_Sign_Armex","CAMP_Armory_Misc_Sign_Armex","CUP_CAMP_Armory_Misc_Sign_Direction","CAMP_Armory_Misc_Sign_Direction","CUP_CA_Plants2_Bush","CA_Plants2_Bush","CUP_CA_Plants2_Misc","CA_Plants2_Misc","CUP_CA_Plants_E_Bush","CA_Plants_E_Bush","CUP_CA_Plants_PMC","CA_Plants_PMC","CUP_CARoads2Bridge","CARoads2Bridge","CUP_CARoads_PMC_Bridge","CARoads_PMC_Bridge","CUP_A_TVTower","A_TVTower","CUP_CAStructures_Nav_pier","CAStructures_Nav_pier","CUP_CAStructures_Railway","CAStructures_Railway","CUP_Structures_e_Config","CAStructures_E","CUP_CAStructures_E_HouseA","CAStructures_E_HouseA","CUP_CAStructures_E_HouseA_A_BuildingWIP","CAStructures_E_HouseA_A_BuildingWIP","CUP_CAStructures_E_HouseA_A_CityGate1","CAStructures_E_HouseA_A_CityGate1","CUP_CAStructures_E_HouseA_A_Minaret","CAStructures_E_HouseA_A_Minaret","CUP_CAStructures_E_HouseA_A_Minaret_Porto","CAStructures_E_HouseA_A_Minaret_Porto","CUP_CAStructures_E_HouseA_A_Mosque_big","CAStructures_E_HouseA_A_Mosque_big","CUP_CAStructures_E_HouseA_A_Mosque_small","CAStructures_E_HouseA_A_Mosque_small","CUP_CAStructures_E_HouseA_A_Office01","CAStructures_E_HouseA_A_Office01","CUP_CAStructures_E_HouseA_a_stationhouse","CAStructures_E_HouseA_a_stationhouse","CUP_CAStructures_E_HouseA_A_Statue","CAStructures_E_HouseA_A_Statue","CUP_CAStructures_E_HouseA_A_Villa","CAStructures_E_HouseA_A_Villa","CUP_CAStructures_E_HouseC","CAStructures_E_HouseC","CUP_CAStructures_E_HouseK","CAStructures_E_HouseK","CUP_CAStructures_E_HouseL","CAStructures_E_HouseL","CUP_CAStructures_E_Ind","CAStructures_E_Ind","CUP_CAStructures_E_Ind_Ind_Coltan_Mine","CAStructures_E_Ind_Ind_Coltan_Mine","CUP_CAStructures_E_Ind_Ind_FuelStation","CAStructures_E_Ind_Ind_FuelStation","CUP_CAStructures_E_Ind_Ind_Garage01","CAStructures_E_Ind_Ind_Garage01","CUP_CAStructures_E_Ind_Oil_Mine","CAStructures_E_Ind_Oil_Mine","CUP_CAStructures_E_Ind_IndPipes","CAStructures_E_Ind_IndPipes","CUP_CAStructures_E_Ind_Misc_PowerStation","CAStructures_E_Ind_Misc_PowerStation","CUP_CAStructures_E_Ind_Ind_Shed","CAStructures_E_Ind_Ind_Shed","CUP_CAStructures_E_Mil","CAStructures_E_Mil","CUP_CAStructures_E_Misc","CAStructures_E_Misc","CUP_CAStructures_E_Misc_Misc_cables","CAStructures_E_Misc_Misc_cables","CUP_CAStructures_E_Misc_Misc_Construction","CAStructures_E_Misc_Misc_Construction","CUP_CAStructures_E_Misc_Misc_Garbage","CAStructures_E_Misc_Misc_Garbage","CUP_CAStructures_E_Misc_Misc_Interier","CAStructures_E_Misc_Misc_Interier","CUP_CAStructures_E_Misc_Misc_Lamp","CAStructures_E_Misc_Misc_Lamp","CUP_CAStructures_E_Misc_Misc_Market","CAStructures_E_Misc_Misc_Market","CUP_CAStructures_E_Misc_Misc_powerline","CAStructures_E_Misc_Misc_powerline","CUP_CAStructures_E_Misc_Misc_Water","CAStructures_E_Misc_Misc_Water","CUP_CAStructures_E_Misc_Misc_Well","CAStructures_E_Misc_Misc_Well","CUP_CAStructures_E_Wall","CAStructures_E_Wall","CUP_CAStructures_E_Wall_Wall_L","CAStructures_E_Wall_Wall_L","CUP_Structures_pmc_Config","CAStructures_PMC","CUP_CAStructures_PMC_Buildings","CAStructures_PMC_Buildings","CUP_CAStructures_PMC_Buildings_Bunker","CAStructures_PMC_Buildings_Bunker","CUP_CAStructures_PMC_Buildings_GeneralStore_PMC","CAStructures_PMC_Buildings_GeneralStore_PMC","CUP_CAStructures_PMC_Buildings_Ruin_Cowshed","CAStructures_PMC_Buildings_Ruin_Cowshed","CUP_CAStructures_PMC_Ind","CAStructures_PMC_Ind","CUP_CAStructures_PMC_FuelStation","CAStructures_PMC_FuelStation","CUP_CAStructures_PMC_Misc","CAStructures_PMC_Misc","CUP_CAStructures_PMC_Misc_Shed","CAStructures_PMC_Misc_Shed","CUP_CAStructures_PMC_Ruins","CAStructures_PMC_Ruins","CUP_CAStructures_PMC_Walls","CAStructures_PMC_Walls","CUP_Takistan_Config","Takistan","CUP_Utes_Config","Utes","CUP_Zargabad_Config","zargabad","CUP_ibr_plants","ibr_plants","a2_epoch_weapons","A3_epoch_assets","A3_Anims_F_Heli","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_Bootcamp","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Characters_F_Mark","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","3DEN","A3_Data_F_Kart","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta","A3_Missions_F_Gamma","A3_Missions_F_Kart","A3_Modules_F_Bootcamp","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Modules_F_Exp_A","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Props_F_Exp_A_Military_Equipment","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Supplies_F_Mark","A3_UI_F_Bootcamp","A3_UI_F_Exp_A","A3_UI_F_Heli","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc","A3_Weapons_F_Kart","A3_Weapons_F_Mark_Acc","CUP_Afghan_Config","Mountains_ACR","CUP_Bohemia_Config","Woodland_ACR","CUP_Bootcamp_acr_Config","Bootcamp_ACR","CUP_Data_baf_Config","CA_BAF","CUP_Desert_e_Config","Desert_E","CUP_CALanguage_Baf","CALanguage_Baf","CUP_CALanguageMissions_baf","CALanguageMissions_baf","CUP_Misc_acr_Config","CAMisc_ACR","CUP_CAMisc_ACR_3DMarkers","CAMisc_ACR_3DMarkers","CUP_CAMisc_ACR_Container","CAMisc_ACR_Container","CUP_CAMisc_ACR_Dog","CAMisc_ACR_Dog","CUP_CAMisc_ACR_Helpers","CAMisc_ACR_Helpers","CUP_CAMisc_ACR_PBX","CAMisc_ACR_PBX","CUP_CAMisc_ACR_ScaffoldingSmall","CAMisc_ACR_ScaffoldingSmall","CUP_CAMisc_ACR_Shooting_range","CAMisc_ACR_Shooting_range","CUP_CAMisc_ACR_Sign_Mines","CAMisc_ACR_Sign_Mines","CUP_CAMisc_ACR_Targets","CAMisc_ACR_Targets","CUP_CAMisc_ACR_Targets_InvisibleTarget","CAMisc_ACR_Targets_InvisibleTarget","CUP_CAMisc_ACR_TestSphere","CAMisc_ACR_TestSphere","CUP_CAMisc_BAF","CAMisc_BAF","CUP_Provinggrounds_pmc_Config","ProvingGrounds_PMC","CUP_Shapur_baf_Config","Shapur_BAF","CUP_BaseConfig_F","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02","A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Characters_F_Common","A3_Characters_F_Bootcamp_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC","A3_Characters_F_Kart","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Exp_A_Virtual","A3_Data_F_Heli","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_Bootcamp","A3_Missions_F_Curator","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Missions_F_Exp_A","A3_Missions_F_Heli","A3_Missions_F_Mark","A3_Missions_F_MP_Mark","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Truck","A3_Soft_F_Kart_Kart_01","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Weapons_F_Bootcamp","A3_Weapons_F_Mark","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_epoch_language","A3_epoch_vehicles_1","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_CargoPoses_F_Heli","A3_Soft_F_Crusher_UGV","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Heli_Crusher_UGV","CUP_Core","CUP_StandaloneTerrains_Core","CUP_StandaloneTerrains_Core_Faction","CUP_StandaloneTerrains_Core_VehicleClass","CUP_Worlds","CUP_Worlds_Ambient","CUP_Worlds_Author","CUP_Worlds_Clutter","CUP_Worlds_ClutterDist","CUP_Worlds_Delete","CUP_Worlds_DisableInfiniteTerrain","CUP_Worlds_DustEffects","CUP_Worlds_EnvSounds","CUP_Worlds_FullDetailDist","CUP_Worlds_Grid","CUP_Worlds_Intros","CUP_Worlds_Lighting","CUP_Worlds_Lighting_Chernarus","CUP_Worlds_Lighting_Desert","CUP_Worlds_MapSize","CUP_Worlds_MidDetailTexture","CUP_Worlds_NoDetailDist","CUP_Worlds_PictureMap","CUP_Worlds_PictureShot","CUP_Worlds_Seabed","CUP_Worlds_SkyTexture","CUP_Worlds_StreetLamp","CUP_Worlds_Surfaces","CUP_Worlds_Water","A3_epoch_config","CUP_A1_EditorObjects","CUP_A2_EditorObjects","A3_epoch_code","A3_epoch_functions"}; //whitelisted cfgPatches for CUP terrains -antihack_InvOpenCheck[] = {}; // blank array disables, enable with {6} distance in meters disallows gear access if another player is within this range also disables gear access in vehicles. -antihack_banReason = "EpochMod.com Autoban"; +antihack_whitelistedCfgPatches[] = {"A3Data","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Language_F_MP_Mark","A3_LanguageMissions_F_MP_Mark","Map_VR","A3_Map_VR_Scenes","CUP_A10_Data","CUP_Afghan_Data","CUP_Air2_Data","CUP_Air3_Data","CUP_Air_Data","CUP_Air_d_baf_Data","CUP_Air_e_Data","CUP_Air_pmc_Data","CUP_CA_animals2","CA_animals2","CUP_Animations_Data","CUP_Animations_Config","CUP_Bohemia_Data","CUP_Bootcamp_acr_Data","CUP_Buildings2_Data","CUP_Buildings2_Ind_Cementworks_Data","CUP_Buildings_Data","CUP_Ca_acr_Data","CUP_CA_Config","CAData","CUP_Ca_e_Data","CUP_Ca_pmc_Data","CUP_Characters2_Data","CUP_Chernarus_Data","CUP_Chernarus_Summer_Data","CUP_Cti_buildings_Data","CUP_CA_Data","CUP_CAData_ParticleEffects","CAData_ParticleEffects","CUP_Data_baf_Data","CUP_dbe1_data","CUP_Desert2_Data","CUP_Desert2_Objects","Desert2_Objects","CUP_Desert_Data","CUP_Desert_e_Data","CUP_Hotfix_Data","CUP_L39_Data","CUP_CALanguage","CALanguage","CUP_CALanguage_ACR","CALanguage_ACR","CUP_CALanguage_missions","CALanguage_missions","CUP_CALanguage_missions_e","CALanguage_missions_e","CUP_Misc3_Data","CUP_CAMisc","CUP_Misc_Data","CAMisc","CUP_Misc_acr_Data","CUP_Misc_e_Data","CUP_CA_MPA","CA_MPA","CUP_CA_Plants2_Clutter","CA_Plants2_Clutter","CUP_CAPlants","CAPlants","CUP_CA_Plants_E_Clutter","CA_Plants_E_Clutter","CUP_Provinggrounds_pmc_Data","CUP_CARoads2","CARoads2","CUP_CARoads2Dam","CARoads2Dam","CUP_CARoads","CARoads","CUP_CARoads_E","CARoads_E","CUP_CARoads_PMC","CARoads_PMC","CUP_CARocks2","CARocks2","CUP_CARocks","CARocks","CUP_CARocks_E","CARocks_E","CUP_Sara_Data","CUP_Saralite_Data","CUP_Shapur_baf_Data","CUP_CASigns","CASigns","CUP_CASigns_E","CASigns_E","CUP_Sounds_Data","CUP_Sounds_Config","CASounds","CUP_Sounds_e_Data","CUP_Structures_Data","CUP_pond_test","pond_test","CUP_Structures_e_Data","CUP_Structures_pmc_Data","CUP_Takistan_Data","CUP_Tracked2_Data","CUP_Tracked_Data","CUP_Tracked_e_Data","CUP_CAFonts","CAFonts","CUP_Utes_Data","CUP_Water2_Data","CUP_Water_Data","CUP_Weapons2_Data","CUP_Weapons_Data","CUP_Weapons_e_Data","CUP_Weapons_pmc_Data","CUP_Wheeled2_Data","CUP_Wheeled_Data","CUP_Wheeled_e_Data","CUP_Zargabad_Data","CUP_A1AlwaysDummy","CAVideo2_PMC","CA_AnimsHotfix","CA_CutSceneAnims","CAIntroAnims","CAUSMCD","CAVoice","CAweapons3_aks74pso","CAWeapons3_ammocrates","CAweapons3_ksvk","CAweapons3_m107","CAweapons3_m16a4_acg_gl","CAweapons3_m16a4_acg","CAweapons3_m16a4_gl","CAweapons3_m16a4","CAWeapons3","CTI_buildingsBmp2_hq","CTI_buildingsM113_hq","DSHkM_Mini","M2HD_Mini","MK19_Tripod","Warfare","WarfareBuildings_Stinger_Twice_static","WarfareBuildings_T72_RACS","WarfareBuildings_TOW_Tripod","CUP_AiA_compat","AiA_A1AlwaysDummy","AiA_Afghan_Config","AiA_Afghan_Data","AiA_BaseConfig_F","AiA_Bohemia_Config","AiA_Bohemia_Data","AiA_Bootcamp_acr_Config","AiA_Bootcamp_acr_Data","AiA_Buildings_Config","AiA_Buildings_Data","AiA_Buildings2_Config","AiA_Buildings2_Data","AiA_Buildings2_Ind_Cementworks_Config","AiA_Buildings2_Ind_Cementworks_Data","AiA_Ca_acr_Config","AiA_Ca_acr_Data","AiA_CA_Config","AiA_CA_Config_Data_ParticleEffects","AiA_CA_Data","AiA_Ca_e_Config","AiA_Ca_e_Data","AiA_Ca_pmc_Config","AiA_Ca_pmc_Data","AiA_CBA_A2_xeh_Dummy","AiA_CBA_OA_xeh_Dummy","AiA_cba_xeh_a2_Dummy","AiA_cba_xeh_oa_Dummy","AiA_Chernarus_Config","AiA_Chernarus_Data","AiA_Chernarus_Summer_Config","AiA_Chernarus_Summer_Data","AiA_Core","AiA_Cti_buildings_Config","AiA_Cti_buildings_Data","AiA_Data_baf_Config","AiA_Data_baf_Data","AiA_Desert_Config","AiA_Desert_Data","AiA_Desert_e_Config","AiA_Desert_e_Data","AiA_Desert2_Config","AiA_Desert2_Data","AiA_Hotfix_Config","AiA_Hotfix_Data","AiA_Language_acr_Config","AiA_Language_acr_Data","AiA_Language_baf_Config","AiA_Language_baf_Data","AiA_Language_e_Config","AiA_Language_e_Data","AiA_Language_pmc_Config","AiA_Language_pmc_Data","AiA_Languagemissions_acr_Config","AiA_Languagemissions_acr_Data","AiA_Languagemissions_baf_Config","AiA_Languagemissions_baf_Data","AiA_Languagemissions_pmc_Config","AiA_Languagemissions_pmc_Data","AiA_Misc_acr_Config","AiA_Misc_acr_Data","AiA_Misc_Config","AiA_Misc_Data","AiA_Misc_e_Config","AiA_Misc_e_Data","AiA_Misc2_Config","AiA_Misc2_Data","AiA_Misc3_Config","AiA_Misc3_Data","AiA_Models_DBE1_Config","AiA_Models_DBE1_Data","AiA_Plants_Config","AiA_Plants_Data","AiA_Plants_e_Config","AiA_Plants_e_Data","AiA_Plants_e2_Config","AiA_Plants_e2_Data","AiA_Plants_pmc_Config","AiA_Plants_pmc_Data","AiA_Plants2_Bush_Config","AiA_Plants2_Bush_Data","AiA_Plants2_Clutter_Config","AiA_Plants2_Clutter_Data","AiA_Plants2_Misc_Config","AiA_Plants2_Misc_Data","AiA_Plants2_Plant_Config","AiA_Plants2_Plant_Data","AiA_Plants2_Tree_Config","AiA_Plants2_Tree_Data","AiA_Provinggrounds_pmc_Config","AiA_Provinggrounds_pmc_Data","AiA_Roads_Config","AiA_Roads_Data","AiA_Roads_e_Config","AiA_Roads_e_Data","AiA_Roads_pmc_Config","AiA_Roads_pmc_Data","AiA_Roads2_Config","AiA_Roads2_Data","AiA_Rocks_Config","AiA_Rocks_Data","AiA_Rocks_e_Config","AiA_Rocks_e_Data","AiA_Rocks2_Config","AiA_Rocks2_Data","AiA_Sara_Config","AiA_Sara_Data","AiA_Sara_dbe1_Config","AiA_Sara_dbe1_Data","AiA_Saralite_Config","AiA_Saralite_Data","AiA_Shapur_baf_Config","AiA_Shapur_baf_Data","AiA_Signs_Config","AiA_Signs_Data","AiA_Signs_e_Config","AiA_Signs_e_Data","AiA_Signs2_Config","AiA_Signs2_Data","AiA_Sounds_Config","AiA_Sounds_Data","AiA_StandaloneTerrainPack_Core","AiA_StandaloneTerrains_Core","AiA_Structures_Config","AiA_Structures_Data","AiA_Structures_e_Config","AiA_Structures_e_Data","AiA_Structures_pmc_Config","AiA_Structures_pmc_Data","AiA_Takistan_Config","AiA_Takistan_Data","AiA_Ui_Config","AiA_Ui_Data","AiA_Utes_Config","AiA_Utes_Data","AiA_Water_Config","AiA_Water_Data","AiA_Water2_Config","AiA_Water2_Data","AiA_Weapons_Config","AiA_Weapons_Data","AiA_Weapons_e_Config","AiA_Weapons_e_Data","AiA_Weapons_pmc_Config","AiA_Weapons_pmc_Data","AiA_Weapons2_Config","AiA_Weapons2_Data","AiA_Wheeled_Config","AiA_Wheeled_Data","AiA_Wheeled_e_Config","AiA_Wheeled_e_Data","AiA_Wheeled2_Config","AiA_Wheeled2_Data","AiA_Worlds","AiA_Worlds_Ambient","AiA_Worlds_Author","AiA_Worlds_Clutter","AiA_Worlds_ClutterDist","AiA_Worlds_Delete","AiA_Worlds_DisableInfiniteTerrain","AiA_Worlds_DustEffects","AiA_Worlds_EnvSounds","AiA_Worlds_FullDetailDist","AiA_Worlds_Grid","AiA_Worlds_Intros","AiA_Worlds_Lighting","AiA_Worlds_Lighting_Chernarus","AiA_Worlds_Lighting_Desert","AiA_Worlds_MapSize","AiA_Worlds_MidDetailTexture","AiA_Worlds_NoDetailDist","AiA_Worlds_Seabed","AiA_Worlds_SkyTexture","AiA_Worlds_StreetLamp","AiA_Worlds_Surfaces","AiA_Worlds_Water","AiA_Zargabad_Config","AiA_Zargabad_Data","CUP_StandaloneTerrains_Dummy","CA_ACR","CA_Animals2_Anim_Config","CA_Anims_Char","CA_Anims_E_Wmn","CA_E","CA_PMC","CAAir","CACharacters","CATracked","CAWater","CAWater2","CAWater2_seafox","CAWeapons","CAWeapons_Warfare_weapons","CAWheeled","CAWheeled_E","CAWheeled2","6G30_DBE1","Arma2_Ka52","BI_SRRS","CA_AH64D","CA_AIR_E_MQ9PredatorB","CA_AIR_E_Su25","CA_AIR2_Su25","CA_Animals_E","CA_Animals2_Chicken","CA_Animals2_Cow","CA_Animals2_Dogs","CA_Animals2_Dogs_Fin","CA_Animals2_Dogs_Pastor","CA_Animals2_Goat","CA_Animals2_Rabbit","CA_Animals2_Sheep","CA_Animals2_WildBoar","CA_Anims","CA_Anims_E","CA_Anims_E_Sdr","CA_Anims_Sdr","CA_Anims_Wmn","CA_CommunityConfigurationProject_E","CA_CruiseMissile","CA_Dubbing","CA_Dubbing_Baf","CA_Dubbing_Counterattack","CA_Dubbing_E","CA_Dubbing_PMC","CA_DubbingRadio_E","CA_DubbingRadio_PMC","CA_E_ParticleEffects","CA_Editor","CA_HC_Sounds","CA_Heads","CA_HighCommand","CA_L39","CA_Missions","CA_Missions_AlternativeInjurySimulation","CA_Missions_AmbientCombat","CA_Missions_Armory1","CA_Missions_Armory2","CA_Missions_BAF","CA_Missions_BAF_2","CA_Missions_BAF_Templates_SecOps","CA_Missions_BattlefieldClearance","CA_Missions_E","CA_Missions_E_Armory2","CA_Missions_E_SecOps","CA_Missions_E_Templates_SecOps","CA_Missions_FirstAidSystem","CA_Missions_GarbageCollector","CA_Missions_PMC","CA_Missions_SecOps","CA_Missions_Templates_SecOps","CA_Missions2_PMC","CA_Modules","CA_Modules_Alice","CA_Modules_Animals","CA_Modules_ARTY","CA_Modules_clouds","CA_Modules_Coin","CA_Modules_DynO","CA_Modules_E","CA_Modules_E_DynO","CA_Modules_E_Jukebox","CA_Modules_E_OO","CA_Modules_E_UAV","CA_Modules_E_UAV_Heli","CA_Modules_E_Weather","CA_Modules_Functions","CA_Modules_Marta","CA_Modules_PMC","CA_Modules_PMC_SimpleFIrstAid","CA_Modules_Silvie","CA_Modules_StratLayer","CA_Modules_UAV","CA_Modules_ZoRA","CA_MPA_Challenges","CA_MPA_Core","CA_MPA_MP","CA_MPA_Scenarios","CA_Sounds_Baf","CA_SoundsMissions_E","CA_Support","CAA10","CAAir_BAF","CAAir_BAF_CH_47F","CAAir_E","CAAir_E_A10","CAAir_E_AH64D","CAAir_E_AH6J","CAAir_E_An2","CAAir_E_C130J","CAAir_E_CH_47F","CAAir_E_Halo","CAAir_E_Mi24","CAAir_E_MI8","CAAir_E_UH1H_EP1","CAAir_E_UH60M","CAAir_PMC","CAAir_PMC_KA137","CAAir_PMC_KA60","CAAir2","CAAir2_C130J","CAAir2_ChukarTarget","CAAir2_F35B","CAAir2_MQ9PredatorB","CAAir2_MV22","CAAir2_Pchela1T","CAAir2_UH1Y","CAAir3","CAAir3_Su34","CAAnimals","CACharacters_BAF","CACharacters_BAF_Head","CACharacters_E","CACharacters_E_Head","CACharacters_PMC","CACharacters_PMC_Head","CACharacters_W_BAF","CACharacters2","CAMisc_fix","CAMisc_fix_A2FREE","CAMisc_fix_air","CAMisc_fix_Ch2","CAMisc_fix_Str","CAMisc_fix_Weap","CAMusic","CAMusic_E","CAMusic_PMC","CASounds_E","CASounds_Missions","CATracked_BAF","CATracked_E","CATracked_E_BMP2","CATracked_E_M1_Abrams","CATracked_E_M113","CATracked_E_M2A2_Bradley","CATracked_E_T34","CATracked_E_T55","CATracked_E_T72","CATracked_E_us_m270mlrs","CATracked_E_ZSU","CATracked_W_BAF","CATracked2","CATracked2_2S6M_Tunguska","CATracked2_AAV","CATracked2_BMP3","CATracked2_T34","CATracked2_T90","CATracked2_us_m270mlrs","CAWater2_Destroyer","CAWater2_fishing_boat","CAWater2_Fregata","CAWater2_smallboat_1","CAWeapons_2b14_82mm_Mortar","CAWeapons_AK","CAWeapons_AmmoBoxes","CAWeapons_BAF","CAWeapons_bizon","CAWeapons_Colt1911","CAWeapons_DMR","CAWeapons_E","CAWeapons_E_AGS","CAWeapons_E_AK","CAWeapons_E_AmmoBoxes","CAWeapons_E_Colt1911","CAWeapons_E_D30","CAWeapons_E_DSHKM","CAWeapons_E_FIM92_static","CAWeapons_E_fnfal","CAWeapons_E_G36","CAWeapons_E_GrenadeLauncher","CAWeapons_E_Igla","CAWeapons_E_Javelin","CAWeapons_E_KORD","CAWeapons_E_ksvk","CAWeapons_E_LeeEnfield","CAweapons_E_m107","CAWeapons_E_M110","CAWeapons_E_M119_Howitzer","CAWeapons_E_M136","CAWeapons_E_M14","CAWeapons_E_M16","CAWeapons_E_M240","CAWeapons_E_M252_81mm_Mortar","CAWeapons_E_M2StaticMG","CAWeapons_E_M47","CAWeapons_E_M9","CAWeapons_E_MAAWS","CAWeapons_E_Makarov","CAWeapons_E_Metis","CAWeapons_E_Mk19_MiniTriPod","CAWeapons_E_PK","CAWeapons_E_Podnos_2b14_82mm","CAWeapons_E_RPG18","CAWeapons_E_RPG7","CAWeapons_E_scar","CAWeapons_E_Searchlight","CAWeapons_E_SPG9","CAWeapons_E_STATIC","CAWeapons_E_Stinger","CAWeapons_E_Strela","CAWeapons_E_TOW","CAWeapons_E_ZU23","CAWeapons_Kord","CAweapons_ksvk","CAWeapons_M1014","CAweapons_m107","CAWeapons_M252_81mm_Mortar","CAWeapons_Metis_AT_13","CAWeapons_PMC","CAWeapons_PMC_AA_12","CAWeapons_PMC_AS50","CAWeapons_PMC_XM8","CAWeapons_Saiga12K","CAWeapons_SPG9","CAWeapons_VSS_vintorez","CAWeapons_ZU23","CAWeapons2","CAWeapons2_HuntingRifle","CAWeapons2_RPG18","CAWeapons2_SMAW","CAWheeled_D_BAF","CAWheeled_E_ATV","CAWheeled_E_BRDM2","CAWheeled_E_BTR40","CAWheeled_E_BTR60","CAWheeled_E_HMMWV","CAWheeled_E_Ikarus","CAWheeled_E_LADA","CAWheeled_E_LandRover","CAWheeled_E_M1030","CAWheeled_E_MTVR","CAWheeled_E_Offroad","CAWheeled_E_Old_bike","CAWheeled_E_Old_moto","CAWheeled_E_Pickup","CAWheeled_E_s1203","CAWheeled_E_SCUD","CAWheeled_E_stryker","CAWheeled_E_SUV","CAWheeled_E_TT650","CAWheeled_E_UAZ","CAWheeled_E_Ural","CAWheeled_E_V3S","CAWheeled_E_Volha","CAWheeled_Offroad","CAWheeled_Pickup","CAWheeled_PMC","CAWheeled_PMC_ArmoredSUV","CAWheeled_W_BAF","CAWheeled2_BTR90","CAWheeled2_GAZ39371","CAWheeled2_HMMWV_Ambulance","CAWheeled2_HMMWV_BASE","CAWheeled2_Ikarus","CAWheeled2_Kamaz","CAWheeled2_LADA","CAWheeled2_LAV25","CAWheeled2_M1114_Armored","CAWheeled2_M998A2_Avenger","CAWheeled2_MMT","CAWheeled2_MTVR","CAWheeled2_TowingTractor","CAWheeled2_V3S","CAWheeled2_VWGolf","CAWheeled3","CAWheeled3_M1030","CAWheeled3_TT650","Datsun_armed_DBE1","DBE1","DBE1_UI","DC3_DBE1","HALO_Test","Hilux_armed_DBE1","Warfare2","Warfare2_E","Warfare2Vehicles","CUP_Models_DBE1_Data","CUP_Anims_DBE1","Anims_DBE1","CUP_HMMWV_DBE1","HMMWV_DBE1","CUP_Mercenary_DBE1","Mercenary_DBE1","CUP_Misc_DBE1","Misc_DBE1","CUP_Music_DBE1","Music_DBE1","CUP_NPCs_DBE1","NPCs_DBE1","CUP_ploty_DBE1","ploty_DBE1","CUP_Prisoners_DBE1","Prisoners_DBE1","CUP_Roads_DBE1","Roads_DBE1","CUP_UH60Desert","UH60Desert","CUP_Sara_dbe1_Data","CUP_TKOH_Dummy","HSim_Data_H","HSim_Data_H_data_ParticleEffects","HSim_Data_H_data_ParticleEffects_rotor_blades","HSim_Dubbing_H","HSim_DubbingRadio_H","HSim_Editor_H","Intro_Island_H","HSim_Missions_H","HSim_ModulesCore_H","HSim_ModulesCore_H_AmbientCombat","HSim_ModulesCore_H_DynO","HSim_ModulesCore_H_Functions","HSim_ModulesCore_H_GarbageCollector","HSim_ModulesCore_H_Functions_E","HSim_ModulesCore_H_OO","HSim_ModulesCore_H_Functions_PMC","HSim_Music_H","HSim_Sounds_H","South_Asia_H","HSim_UIFonts_H","United_States_H","HSim_Animals_H","HSim_Animals_H_Anim_Config","HSim_Animals_H_Dog","HSim_Characters_H_Faces","HSim_Characters_H_Heads","HSim_Modules_H","HSim_UI_H","HSim_Weapons_H","HSim_Weapons_H_AK47","HSim_Weapons_H_DShKM","HSim_Weapons_H_Glock","HSim_Weapons_H_HandItems","HSim_Weapons_H_M16","HSim_Weapons_US_H","HSim_Characters_H","HSim_Characters_US_H","HSim_Missions_H_FreeFlight","HSim_Functions_Base_H","HSim_Water_H","HSim_Water_H_Civ_FishingBoat_Large","HSim_Water_H_Civ_Jetboat","HSim_Water_H_Civ_Yacht","HSim_Water_H_Container_Ship","HSim_Water_H_Cruise_Ship","HSim_Water_H_Destroyer","HSim_Water_H_Fishing_Boat","HSim_Water_H_Fregata","HSim_Water_H_LHD","HSim_Water_H_Oil_tanker","HSim_Water_H_Rubber_Boat","HSim_Water_H_Whales","HSim_Water_H_Whales_GreyWhale","HSim_Water_H_Whales_Whale1","HSim_Weapons_H_IGLA","HSim_Weapons_US_H_M2","HSim_Wheeled_H","HSim_Wheeled_H_Ambulance","HSim_Wheeled_H_FireTruck","HSim_Wheeled_H_Hatchback","HSim_Wheeled_H_Military_Offroad_LR","HSim_Wheeled_H_Military_Pickup_DSHKM","HSim_Wheeled_H_Offroad","HSim_Wheeled_H_Police_Car","HSim_Wheeled_H_TowingTractor","HSim_Wheeled_H_Tractor","HSim_Wheeled_H_Trailers","HSim_Wheeled_H_Truck_Light_Transport","HSim_Wheeled_H_Ural","HSim_Wheeled_H_Van_Passenger","HSim_Wheeled_US_H","HSim_Wheeled_US_H_Military_Offroad","HSim_Wheeled_US_H_Military_Truck","HSim_Wheeled_US_H_Pickup_01","HSim_Wheeled_US_H_Pickup_02","HSim_Wheeled_US_H_SUV","HSim_Wheeled_US_H_Truck_US_Type","HSim_Air_H","HSim_Air_H_Aircraft_A","HSim_Air_H_Aircraft_C","HSim_Air_H_Aircraft_D","HSim_Air_H_Aircraft_E_H","HSim_Air_H_Airliner_A","HSim_Air_H_Airliner_B","HSim_Air_H_Parachute","HSim_Air_US_H","HSim_Air_US_H_Helicopters_Heavy","HSim_Air_US_H_Helicopters_Light","HSim_Air_US_H_Helicopters_Medium","HSim_Misc_H","HSim_Misc_H_Antena","HSim_Misc_H_Barels","HSim_Misc_H_Bleacher","HSim_Misc_H_BoardsPack","HSim_Misc_H_CncBlock","HSim_Misc_H_Doghouse","HSim_Misc_H_Engine_Crane","HSim_Misc_H_Fence","HSim_Misc_H_Fire_Extinguisher","HSim_Misc_H_Fire_Suppression","HSim_Misc_H_First_Aid","HSim_Misc_H_Flagpole","HSim_Misc_H_Folding_Ladder","HSim_Misc_H_FuelCan","HSim_Misc_H_Heliport_Furniture","HSim_Misc_H_Helicopter_Parts","HSim_Misc_H_Helipads","HSim_Misc_H_Heliport_Objects","HSim_Misc_H_Helpers","HSim_Misc_H_Info_Board","HSim_Misc_H_Infostands","HSim_Misc_H_Inspection_Visuals","HSim_Misc_H_Interior","HSim_Misc_H_Loudspeakers","HSim_Misc_H_Market","HSim_Misc_H_Office_Objects","HSim_Misc_H_Perimeter_Ligh","HSim_Misc_H_Pike","HSim_Misc_H_Platform_Cart","HSim_Misc_H_Portable_Generator","HSim_Misc_H_Props","HSim_Misc_H_SawHorse","HSim_Misc_H_Shooting_Range","HSim_Misc_H_Signs","HSim_Misc_H_Sink","HSim_Misc_H_Targets","HSim_Misc_H_Tent","HSim_Misc_H_Toilet","HSim_Misc_H_Tools","HSim_Misc_H_Tools_Racking","HSim_Misc_H_Trash","HSim_Misc_H_Weather_Station","HSim_Misc_H_Weld_Gastank","HSim_Misc_H_Wheel_Chocks","HSim_Misc_H_Wheeled_Scaffolding","HSim_Misc_H_wheeled_tool_cart","HSim_Misc_H_Wheeled_Whiteboard","HSim_Misc_H_Winch","HSim_Misc_H_Windsock","HSim_Misc_H_Workbench","HSim_Misc_H_Wrecks","HSim_Structures_H","HSim_Structures_H_Airport_Papi","HSim_Structures_H_Harbour","HSim_Structures_H_Heliports_Heliport_Big","HSim_Structures_H_Heliports_Heliport_Small","HSim_Structures_H_Industrial_A_CraneCon","HSim_Structures_H_Industrial_Rooftop_Objects","HSim_Structures_US_H","HSim_Structures_US_H_Bld_US","HSim_Structures_US_H_Landmarks_Space_Needle","HSim_Tracked_H","HSim_Tracked_H_BMP2","HSim_Tracked_US_H","HSim_Tracked_US_H_M1A2","HSim_Tracked_US_H_MLRS","HSim_Data_H_EditorGroups","HSim_Anims_H","HSim_Anims_H_config_sdr","HSim_Anims_H_config_wmn","CUP_Hsim_Language_H","Hsim_Language_H","CUP_Hsim_Language_missions_H","Hsim_Language_missions_H","a2_epoch_structures","A3_epoch_assets_1","epoch_objects","A3_epoch_assets_3","Underground_Epoch","A3_epoch_vehicles","a3_epoch_weapons","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Data_F_Bootcamp","A3_Data_F_Exp_A","A3_Data_F_Kart_ParticleEffects","A3_Data_F_Mark","A3_Editor_F","A3_Functions_F_Bootcamp","A3_Functions_F_Curator","A3_Functions_F_Exp_A","A3_Functions_F_Heli","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_Language_F_Heli","A3_Language_F_Kart","A3_Language_F_Mark","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_LanguageMissions_F_Kart","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_Mark_Objectives","A3_Music_F","A3_Music_F_Bootcamp","A3_Music_F_EPA","A3_Music_F_EPB","A3_Music_F_EPC","A3_Music_F_Heli","A3_Music_F_Mark","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_Bootcamp","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Sounds_F_Exp_A","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_UIFonts_F","CUP_Buildings_Config","CABuildings","CUP_CABuildings_Misc","CABuildings_Misc","CUP_Desert2_Buildings","Desert2_Buildings","CUP_CA_desert2_Characters","CA_desert2_Characters","CUP_Desert_Config","Desert","CUP_DBE1_Hotfix","DBE1_Hotfix","CUP_CALanguage_e","CALanguage_e","CUP_CALanguage_PMC","CALanguage_PMC","CUP_CALanguage_missions_PMC","CALanguage_missions_PMC","CUP_CAWater2_seafox_EP1","CAWater2_seafox_EP1","CUP_CA_Plants2","CA_Plants2","CUP_CA_Plants2_Plant","CA_Plants2_Plant","CUP_CA_Plants2_Tree","CA_Plants2_Tree","CUP_CA_Plants_E2","CA_Plants_E2","CUP_CA_Plants_E","CA_Plants_E","CUP_CA_Plants_E_Misc","CA_Plants_E_Misc","CUP_CA_Plants_E_Plant","CA_Plants_E_Plant","CUP_CA_Plants_E_Tree","CA_Plants_E_Tree","CUP_Sara_Config","Sara","CUP_Saralite_Config","SaraLite","CUP_CASigns2","CASigns2","CUP_Structures_Config","CAStructures","CUP_CAStructures_A_BuildingWIP","CAStructures_A_BuildingWIP","CUP_CAStructures_A_CraneCon","CAStructures_A_CraneCon","CUP_CAStructuresLand_A_MunicipalOffice","CAStructuresLand_A_MunicipalOffice","CUP_CAStructuresBarn_W","CAStructuresBarn_W","CUP_CAStructures_Castle","CAStructures_Castle","CUP_CAStructuresHouse","CAStructuresHouse","CUP_CAStructuresHouse_A_FuelStation","CAStructuresHouse_A_FuelStation","CUP_CAStructuresHouse_A_Hospital","CAStructuresHouse_A_Hospital","CUP_CAStructuresHouse_A_Office01","CAStructuresHouse_A_Office01","CUP_CAStructuresHouse_A_Office02","CAStructuresHouse_A_Office02","CUP_CAStructuresHouse_a_stationhouse","CAStructuresHouse_a_stationhouse","CUP_CAStructuresHouse_Church_02","CAStructuresHouse_Church_02","CUP_CAStructuresHouse_Church_03","CAStructuresHouse_Church_03","CUP_CAStructuresHouse_Church_05R","CAStructuresHouse_Church_05R","CUP_CAStructuresHouse_HouseBT","CAStructuresHouse_HouseBT","CUP_CAStructuresHouse_HouseV2","CAStructuresHouse_HouseV2","CUP_CAStructuresHouse_HouseV","CAStructuresHouse_HouseV","CUP_CAStructuresLand_Ind_Stack_Big","CAStructuresLand_Ind_Stack_Big","CUP_CAStructures_IndPipe1","CAStructures_IndPipe1","CUP_CAStructuresInd_Quarry","CAStructuresInd_Quarry","CUP_Ind_SawMill","Ind_SawMill","CUP_CAStructures_Mil","CAStructures_Mil","CUP_CAStructures_Misc","CAStructures_Misc","CUP_CAStructures_Misc_Armory","CAStructures_Misc_Armory","CUP_CAStructures_Misc_Armory_Armor_Popuptarget","CAStructures_Misc_Armory_Armor_Popuptarget","CUP_CAStructures_Misc_Powerlines","CAStructures_Misc_Powerlines","CUP_CAStructures_Nav","CAStructures_Nav","CUP_CAStructuresLand_Nav_Boathouse","CAStructuresLand_Nav_Boathouse","CUP_CAStructures_Proxy_BuildingParts","CAStructures_Proxy_BuildingParts","CUP_CAStructures_Proxy_Ruins","CAStructures_Proxy_Ruins","CUP_CAStructures_Rail","CAStructures_Rail","CUP_CAStructuresHouse_rail_station_big","CAStructuresHouse_rail_station_big","CUP_CAStructures_Ruins","CAStructures_Ruins","CUP_CAStructuresShed_Small","CAStructuresShed_Small","CUP_CAStructuresHouse_Shed_Ind","CAStructuresHouse_Shed_Ind","CUP_CAStructures_Wall","CAStructures_Wall","CUP_CAUI","CAUI","CUP_CAWater2_LHD","CAWater2_LHD","CUP_Models_DBE1_Config","Models_DBE1","CUP_Kamenolom_DBE1","Kamenolom_DBE1","CUP_Pila_DBE1","Pila_DBE1","CUP_UI_DBE1","UI_DBE1","CUP_Vysilac_DBE1","Vysilac_DBE1","CUP_Zakladna_DBE1","Zakladna_DBE1","CUP_Sara_dbe1_Config","Sara_dbe1","a3_epoch_structures","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Anims_F_Exp_A","A3_Anims_F_Kart","A3_Anims_F_Mark_Deployment","A3_Language_F_Bootcamp","A3_Language_F_Exp_A","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_Signs_Companies","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Kart_Signs_Companies","A3_UI_F","A3_UI_F_Curator","A3_UI_F_Kart","A3_UI_F_Mark","A3_UI_F_MP_Mark","A3_Weapons_F","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_beta_Rifles_Khaybar","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_Mk20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","CUP_Buildings2_Config","CABuildings2","CUP_A_Crane_02","A_Crane_02","CUP_A_GeneralStore_01","A_GeneralStore_01","CUP_CABuildings2_A_Pub","CABuildings2_A_Pub","CUP_A_statue","A_statue","CUP_Barn_Metal","Barn_Metal","CUP_CABuildingParts","CABuildingParts","CUP_CABuildingParts_Signs","CABuildingParts_Signs","CUP_CATEC","CATEC","CUP_Church_01","Church_01","CUP_Farm_Cowshed","Farm_Cowshed","CUP_Farm_WTower","Farm_WTower","CUP_CAHouseBlock_A","CAHouseBlock_A","CUP_CAHouseBlock_B","CAHouseBlock_B","CUP_CAHouseBlock_C","CAHouseBlock_C","CUP_CAHouseBlock_D","CAHouseBlock_D","CUP_HouseRuins","HouseRuins","CUP_Ind_Dopravnik","Ind_Dopravnik","CUP_Ind_Expedice","Ind_Expedice","CUP_Ind_MalyKomin","Ind_MalyKomin","CUP_Ind_Mlyn","Ind_Mlyn","CUP_Ind_Pec","Ind_Pec","CUP_ind_silomale","ind_silomale","CUP_Ind_SiloVelke","Ind_SiloVelke","CUP_Ind_Vysypka","Ind_Vysypka","CUP_Ind_Garage01","Ind_Garage01","CUP_CAStructures_IndPipe1_todo_delete","CAStructures_IndPipe1_todo_delete","CUP_IndPipe2","IndPipe2","CUP_Ind_Shed_01","Ind_Shed_01","CUP_Ind_Shed_02","Ind_Shed_02","CUP_Ind_Tank","Ind_Tank","CUP_Ind_Workshop01","Ind_Workshop01","CUP_CABuildings2_Misc_Cargo","CABuildings2_Misc_Cargo","CUP_Misc_PowerStation","Misc_PowerStation","CUP_Misc_WaterStation","Misc_WaterStation","CUP_Rail_House_01","Rail_House_01","CUP_Shed_small","Shed_small","CUP_Shed_wooden","Shed_wooden","CUP_particle_effects","particle_effects","CUP_Chernarus_Config","Chernarus","CUP_Chernarus_Summer_Config","Chernarus_Summer","CUP_Desert2_Config","Porto","CUP_Hotfix_Config","CA_Hotfix","CUP_CA_QGClutterHotfix","CA_QGClutterHotfix","CUP_CA_Hotfix_vez_ropa","CA_Hotfix_vez_ropa","CUP_CAMisc2","CAMisc2","CUP_Misc3_Config","CAMisc3","CUP_WarfareBuildings","WarfareBuildings","CUP_Misc_e_Config","CAMisc_E","CUP_CAMisc_E_WF","CAMisc_E_WF","CUP_CAMP_Armory_Misc","CAMP_Armory_Misc","CUP_CAMP_Armory_Misc_Concrete_Wall","CAMP_Armory_Misc_Concrete_Wall","CUP_CAMP_Armory_Misc_Entrance_Gate","CAMP_Armory_Misc_Entrance_Gate","CUP_CAMP_Armory_Misc_Info_Board","CAMP_Armory_Misc_Info_Board","CUP_CAMP_Armory_Misc_Infostands","CAMP_Armory_Misc_Infostands","CUP_CAMP_Armory_Misc_Laptop","CAMP_Armory_Misc_Laptop","CUP_CAMP_Armory_Misc_Loudspeakers","CAMP_Armory_Misc_Loudspeakers","CUP_CAMP_Armory_Misc_Plasticpole","CAMP_Armory_Misc_Plasticpole","CUP_CAMP_Armory_Misc_Red_Light","CAMP_Armory_Misc_Red_Light","CUP_CAMP_Armory_Misc_Sign_Armex","CAMP_Armory_Misc_Sign_Armex","CUP_CAMP_Armory_Misc_Sign_Direction","CAMP_Armory_Misc_Sign_Direction","CUP_CA_Plants2_Bush","CA_Plants2_Bush","CUP_CA_Plants2_Misc","CA_Plants2_Misc","CUP_CA_Plants_E_Bush","CA_Plants_E_Bush","CUP_CA_Plants_PMC","CA_Plants_PMC","CUP_CARoads2Bridge","CARoads2Bridge","CUP_CARoads_PMC_Bridge","CARoads_PMC_Bridge","CUP_A_TVTower","A_TVTower","CUP_CAStructures_Nav_pier","CAStructures_Nav_pier","CUP_CAStructures_Railway","CAStructures_Railway","CUP_Structures_e_Config","CAStructures_E","CUP_CAStructures_E_HouseA","CAStructures_E_HouseA","CUP_CAStructures_E_HouseA_A_BuildingWIP","CAStructures_E_HouseA_A_BuildingWIP","CUP_CAStructures_E_HouseA_A_CityGate1","CAStructures_E_HouseA_A_CityGate1","CUP_CAStructures_E_HouseA_A_Minaret","CAStructures_E_HouseA_A_Minaret","CUP_CAStructures_E_HouseA_A_Minaret_Porto","CAStructures_E_HouseA_A_Minaret_Porto","CUP_CAStructures_E_HouseA_A_Mosque_big","CAStructures_E_HouseA_A_Mosque_big","CUP_CAStructures_E_HouseA_A_Mosque_small","CAStructures_E_HouseA_A_Mosque_small","CUP_CAStructures_E_HouseA_A_Office01","CAStructures_E_HouseA_A_Office01","CUP_CAStructures_E_HouseA_a_stationhouse","CAStructures_E_HouseA_a_stationhouse","CUP_CAStructures_E_HouseA_A_Statue","CAStructures_E_HouseA_A_Statue","CUP_CAStructures_E_HouseA_A_Villa","CAStructures_E_HouseA_A_Villa","CUP_CAStructures_E_HouseC","CAStructures_E_HouseC","CUP_CAStructures_E_HouseK","CAStructures_E_HouseK","CUP_CAStructures_E_HouseL","CAStructures_E_HouseL","CUP_CAStructures_E_Ind","CAStructures_E_Ind","CUP_CAStructures_E_Ind_Ind_Coltan_Mine","CAStructures_E_Ind_Ind_Coltan_Mine","CUP_CAStructures_E_Ind_Ind_FuelStation","CAStructures_E_Ind_Ind_FuelStation","CUP_CAStructures_E_Ind_Ind_Garage01","CAStructures_E_Ind_Ind_Garage01","CUP_CAStructures_E_Ind_Oil_Mine","CAStructures_E_Ind_Oil_Mine","CUP_CAStructures_E_Ind_IndPipes","CAStructures_E_Ind_IndPipes","CUP_CAStructures_E_Ind_Misc_PowerStation","CAStructures_E_Ind_Misc_PowerStation","CUP_CAStructures_E_Ind_Ind_Shed","CAStructures_E_Ind_Ind_Shed","CUP_CAStructures_E_Mil","CAStructures_E_Mil","CUP_CAStructures_E_Misc","CAStructures_E_Misc","CUP_CAStructures_E_Misc_Misc_cables","CAStructures_E_Misc_Misc_cables","CUP_CAStructures_E_Misc_Misc_Construction","CAStructures_E_Misc_Misc_Construction","CUP_CAStructures_E_Misc_Misc_Garbage","CAStructures_E_Misc_Misc_Garbage","CUP_CAStructures_E_Misc_Misc_Interier","CAStructures_E_Misc_Misc_Interier","CUP_CAStructures_E_Misc_Misc_Lamp","CAStructures_E_Misc_Misc_Lamp","CUP_CAStructures_E_Misc_Misc_Market","CAStructures_E_Misc_Misc_Market","CUP_CAStructures_E_Misc_Misc_powerline","CAStructures_E_Misc_Misc_powerline","CUP_CAStructures_E_Misc_Misc_Water","CAStructures_E_Misc_Misc_Water","CUP_CAStructures_E_Misc_Misc_Well","CAStructures_E_Misc_Misc_Well","CUP_CAStructures_E_Wall","CAStructures_E_Wall","CUP_CAStructures_E_Wall_Wall_L","CAStructures_E_Wall_Wall_L","CUP_Structures_pmc_Config","CAStructures_PMC","CUP_CAStructures_PMC_Buildings","CAStructures_PMC_Buildings","CUP_CAStructures_PMC_Buildings_Bunker","CAStructures_PMC_Buildings_Bunker","CUP_CAStructures_PMC_Buildings_GeneralStore_PMC","CAStructures_PMC_Buildings_GeneralStore_PMC","CUP_CAStructures_PMC_Buildings_Ruin_Cowshed","CAStructures_PMC_Buildings_Ruin_Cowshed","CUP_CAStructures_PMC_Ind","CAStructures_PMC_Ind","CUP_CAStructures_PMC_FuelStation","CAStructures_PMC_FuelStation","CUP_CAStructures_PMC_Misc","CAStructures_PMC_Misc","CUP_CAStructures_PMC_Misc_Shed","CAStructures_PMC_Misc_Shed","CUP_CAStructures_PMC_Ruins","CAStructures_PMC_Ruins","CUP_CAStructures_PMC_Walls","CAStructures_PMC_Walls","CUP_Takistan_Config","Takistan","CUP_Utes_Config","Utes","CUP_Zargabad_Config","zargabad","CUP_ibr_plants","ibr_plants","a2_epoch_weapons","A3_epoch_assets","A3_Anims_F_Heli","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_Bootcamp","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Characters_F_Mark","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","3DEN","A3_Data_F_Kart","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta","A3_Missions_F_Gamma","A3_Missions_F_Kart","A3_Modules_F_Bootcamp","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Modules_F_Exp_A","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Props_F_Exp_A_Military_Equipment","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Supplies_F_Mark","A3_UI_F_Bootcamp","A3_UI_F_Exp_A","A3_UI_F_Heli","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc","A3_Weapons_F_Kart","A3_Weapons_F_Mark_Acc","CUP_Afghan_Config","Mountains_ACR","CUP_Bohemia_Config","Woodland_ACR","CUP_Bootcamp_acr_Config","Bootcamp_ACR","CUP_Data_baf_Config","CA_BAF","CUP_Desert_e_Config","Desert_E","CUP_CALanguage_Baf","CALanguage_Baf","CUP_CALanguageMissions_baf","CALanguageMissions_baf","CUP_Misc_acr_Config","CAMisc_ACR","CUP_CAMisc_ACR_3DMarkers","CAMisc_ACR_3DMarkers","CUP_CAMisc_ACR_Container","CAMisc_ACR_Container","CUP_CAMisc_ACR_Dog","CAMisc_ACR_Dog","CUP_CAMisc_ACR_Helpers","CAMisc_ACR_Helpers","CUP_CAMisc_ACR_PBX","CAMisc_ACR_PBX","CUP_CAMisc_ACR_ScaffoldingSmall","CAMisc_ACR_ScaffoldingSmall","CUP_CAMisc_ACR_Shooting_range","CAMisc_ACR_Shooting_range","CUP_CAMisc_ACR_Sign_Mines","CAMisc_ACR_Sign_Mines","CUP_CAMisc_ACR_Targets","CAMisc_ACR_Targets","CUP_CAMisc_ACR_Targets_InvisibleTarget","CAMisc_ACR_Targets_InvisibleTarget","CUP_CAMisc_ACR_TestSphere","CAMisc_ACR_TestSphere","CUP_CAMisc_BAF","CAMisc_BAF","CUP_Provinggrounds_pmc_Config","ProvingGrounds_PMC","CUP_Shapur_baf_Config","Shapur_BAF","CUP_BaseConfig_F","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02","A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Characters_F_Common","A3_Characters_F_Bootcamp_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC","A3_Characters_F_Kart","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Exp_A_Virtual","A3_Data_F_Heli","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_Bootcamp","A3_Missions_F_Curator","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Missions_F_Exp_A","A3_Missions_F_Heli","A3_Missions_F_Mark","A3_Missions_F_MP_Mark","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Truck","A3_Soft_F_Kart_Kart_01","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Weapons_F_Bootcamp","A3_Weapons_F_Mark","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_epoch_language","A3_epoch_vehicles_1","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_CargoPoses_F_Heli","A3_Soft_F_Crusher_UGV","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Heli_Crusher_UGV","CUP_Core","CUP_StandaloneTerrains_Core","CUP_StandaloneTerrains_Core_Faction","CUP_StandaloneTerrains_Core_VehicleClass","CUP_Worlds","CUP_Worlds_Ambient","CUP_Worlds_Author","CUP_Worlds_Clutter","CUP_Worlds_ClutterDist","CUP_Worlds_Delete","CUP_Worlds_DisableInfiniteTerrain","CUP_Worlds_DustEffects","CUP_Worlds_EnvSounds","CUP_Worlds_FullDetailDist","CUP_Worlds_Grid","CUP_Worlds_Intros","CUP_Worlds_Lighting","CUP_Worlds_Lighting_Chernarus","CUP_Worlds_Lighting_Desert","CUP_Worlds_MapSize","CUP_Worlds_MidDetailTexture","CUP_Worlds_NoDetailDist","CUP_Worlds_PictureMap","CUP_Worlds_PictureShot","CUP_Worlds_Seabed","CUP_Worlds_SkyTexture","CUP_Worlds_StreetLamp","CUP_Worlds_Surfaces","CUP_Worlds_Water","A3_epoch_config","CUP_A1_EditorObjects","CUP_A2_EditorObjects","A3_epoch_code","A3_epoch_functions"}; //whitelisted cfgPatches for CUP terrains +antihack_banReason = "EpochMod Autoban"; +antihack_kickReason = "EpochMod Autokick"; +antihack_banReasons[] = { + "Mod mismatch, check that the mods you have enabled match server." +}; +antihack_banDuration = 5; // Default 5 minute ban. -1 = permanent ban. +antihack_kickReasons[] = { + "Mod mismatch, check that the mods you have enabled match server." +}; antihack_checkFiles[] = { //script check, leave it blank to disable it {"epoch_code\compile\setup\EPOCH_clientInit.sqf", "EPOCH_clientInit"}, {"epoch_code\compile\EPOCH_onEachFrame.sqf", "EPOCH_onEachFrame"}, @@ -16,10 +23,6 @@ antihack_checkFiles[] = { //script check, leave it blank to disable it {"epoch_code\compile\interface_event_handlers\EPOCH_KeyDown.sqf", "EPOCH_KeyDown"} }; antihack_addActionCheck = true; // false to disable addAction checks -antihack_customVariablesCheck = false; // true enables variable scanning on missionNamespace -antihack_customVariables[] = {}; //Add global variables from custom scripts, example: {"MyOwnVar","CP_KK"} //Global Variables begin without "_" !! -antihack_customVariablesCheckMode = 0; // 0 = Ban, 1 = Log, 2 == learning mode (only enable with trusted players in a passwored server to profile your variables keep disabled for normal operation) - adminMenu_Owner[] = {}; adminMenu_OwnerSetting[] = { "ESP-PLAYER", diff --git a/Server_Install_Pack/@epochhive/epochconfig.hpp b/Server_Install_Pack/@epochhive/epochconfig.hpp index befcdd93..f34d3869 100644 --- a/Server_Install_Pack/@epochhive/epochconfig.hpp +++ b/Server_Install_Pack/@epochhive/epochconfig.hpp @@ -12,11 +12,11 @@ lootMultiplier = 0.5; // 1 = max loot bias. This controls how much loot can payo // Events WeatherStaticForecast[] = {}; // Default: {75.5,0,{0,0,0},0,{1,1}}; // Clear day; {19,1,{1,1,40},1,{5,5}}; // Cold Foggy Rainy Overcast Windy; Format: {temp ,rain ,fog ,overcast ,wind } events[] = { - { 3600, "CarnivalSpawner" }, // SECOND , EVENT - { 2400, "EarthQuake" }, - { 1800, "ChangeWeather" }, - { 1200, "ContainerSpawner" }, - { 300, "PlantSpawner" } //No comma on last Entry + { 3600, "CarnivalSpawner", 0 , 1}, // SECOND , EVENT , INIT 1 = run script at startup, 0 normal delay, PREPOSTFIX 1 = use pre/postfix path (inside epoch settings pbo) 0 = use full file path + { 2400, "EarthQuake", 0 , 1}, + { 1800, "ChangeWeather", 1 , 1}, + { 1200, "ContainerSpawner", 0 , 1}, + { 300, "PlantSpawner", 0 , 1} //No comma on last Entry }; // Antagonists diff --git a/Server_Install_Pack/INSTALL.txt b/Server_Install_Pack/INSTALL.txt index f49d77f6..7213953e 100644 --- a/Server_Install_Pack/INSTALL.txt +++ b/Server_Install_Pack/INSTALL.txt @@ -2,25 +2,25 @@ A3 EPOCH Server Install Guide Prerequisites: -Visual C++ Redistributable Packages for Visual Studio 2013: +Visual C++ Redistributable Packages for Visual Studio 2013: http://www.microsoft.com/en-us/download/details.aspx?id=40784 -== INSTALL == +== INSTALL == 1. Remove any previous @Epoch folders and Install A3 Epoch client files (@Epoch) into Arma3 root directory. -2. Remove any previous @EpochHive folder and copy all server files from zip into Arma3 root directory. +2. Copy the pcre3.dll and @EpochHive folder into your Arma3 root directory. 3. Open "DB" folder and start redis-server.exe with the parameter "redis.conf" or use start-redis.cmd. (Only one redis instance is needed per box, All servers connecting to the same redis will share character data by default.) 4. Open @EpochHive folder and edit EpochServer.ini BattlEyePath to match your server path to Battleye. 5. If running multiple servers on the same box, open "@EpochHive" folder and edit the "EpochServer.ini" setting "InstanceID" to a unique string for each A3 Epoch server. -6. Open "SC" folder and edit the config.cfg server name, password, etc. +6. Open "SC" folder and rename server-example.cfg to server.cfg edit the server.cfg server name, password, etc. 7. Open the SC/Battleye folder and rename example-BEServer.cfg to BEServer.cfg and change the RConPassword. 7. Look at the "start-A3-cmd-line-example.txt" file for an example command line for starting your server. -== NOTES == +== NOTES == * As of 0.2.5.2 Server Hotfix Build A you only need BEC (http://ibattle.org/) with watchdog plugin (included in BEC folder) if you use do not use a PVS prefix. * You should use a service restarter (like firedaemon) to keep the redis server and Arma 3 server running. * A3 Server should be restarted every 4 hours. A good option ssing BEC http://ibattle.org/ scheduler and the #shutdown rcon command works well. (Scheduler Example: https://gist.github.com/vbawol/38b2f57d89c2c36106b3) * The log rotator found in tools should only need one path to Arma 3 changed and should be ran just before the Arma 3 server starts. (firedeamon Pre/post service: Before Event) * It is recommended that you use ASM https://github.com/fred41/ASM to monitor your server performance. -* Go to http://epochmod.com/forum/ for more help if needed. \ No newline at end of file +* Go to http://epochmod.com/forum/ for more help if needed. diff --git a/Server_Install_Pack/Keys/epoch0380.bikey b/Server_Install_Pack/Keys/epoch0380.bikey deleted file mode 100644 index fbed97a9..00000000 Binary files a/Server_Install_Pack/Keys/epoch0380.bikey and /dev/null differ diff --git a/Server_Install_Pack/LICENSE.txt b/Server_Install_Pack/LICENSE.txt index 494dbc61..3745341a 100644 --- a/Server_Install_Pack/LICENSE.txt +++ b/Server_Install_Pack/LICENSE.txt @@ -1,9 +1,4 @@ -Epoch Mod - http://www.epochmod.com -Arma 3: Epoch Mod is currently licensed under: +[Epoch Mod](http://epochmod.com) for [Arma 3](http://arma3.com) by [Epoch Mod Team](https://github.com/EpochModTeam/Epoch) -Epoch Mod by Epoch Mod Team is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. -http://creativecommons.org/licenses/by-nc-nd/4.0/ - -You must also abide by all license and game usage restrictions from BI: -Arma 3: End User License: https://www.bistudio.com/community/licenses/arma3-end-user-license -Arma 3: Game Content Rules: https://www.bistudio.com/community/game-content-usage-rules \ No newline at end of file +The contents of this github are under the following license: +http://www.bistudio.com/community/licenses/arma-public-license-share-alike diff --git a/Server_Install_Pack/README.txt b/Server_Install_Pack/README.txt index ae003a36..a06b265b 100644 --- a/Server_Install_Pack/README.txt +++ b/Server_Install_Pack/README.txt @@ -1,18 +1,18 @@ -Arma 3 Epoch Mod +Epoch Survival Gamemode for Arma 3 +===== --------------------------- -Developers --------------------------- -* Aaron Clark - [VB]AWOL - Game Design, Code -* Kenneth Bente - Axle - Public Relations, Models -* Paul Tomany - Sequisha - Models, Textures -* Dan - OrangeSherbet - Tester, Videos, Wiki Editor -* Darren Harrison - Kiory - Models, Textures -* Damian Clark - [VB]GREEN - Graphics -* Niklas Wagner - Skaronator - Code -* Andrew Gregory - Axeman - AI Code -* Florian Kinder - Fank - DLL Code -* Denis Erygin - devd - Linux DLL Support -* Richie - Map Support -* Paden Sturtevant - SteamPunkGears - Models -* Raimonds Virtoss - Raymix - UI and Code +http://epochmod.com + +This github is for the latest server files, public bug reports, and feedback related to the Epoch Survival gamemode for Arma 3. + +Lastest Stable Server Files: +https://github.com/EpochModTeam/Epoch/releases + +License: +===== +Arma Public License Share Alike (APL-SA). +http://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Credits: +===== +https://github.com/EpochModTeam/Epoch/blob/master/CREDITS.md diff --git a/Server_Install_Pack/epoch_linux_startscript.sh b/Server_Install_Pack/epoch_linux_startscript.sh index ba72b7fc..c53e3f47 100644 --- a/Server_Install_Pack/epoch_linux_startscript.sh +++ b/Server_Install_Pack/epoch_linux_startscript.sh @@ -37,7 +37,7 @@ SERVERMODS=@epochhive # !!!!!!!!!! DO NOT EDIT ANYTHING BELOW THIS LINE !!!!!!!!!! #======================================================================= CFG_DIR=${ARMA_DIR} -CONFIG=${CFG_DIR}/${NAME}/config.cfg +CONFIG=${CFG_DIR}/${NAME}/server.cfg CFG=${CFG_DIR}/${NAME}/basic.cfg LOG_DIR=${ARMA_DIR}/logs BEPATH=${CFG_DIR}/${NAME}/battleye/ @@ -51,10 +51,10 @@ LOGFILE=${LOG_DIR}/port_${PORT}.`date +%d.%m.%y_%H%M`.log SERVER=${ARMA_DIR}/arma3server #======================================================================= ulimit -c 1000000 - + case "$1" in - - + + start) # check if there is a server running or not ps ax | grep ${SERVER} | grep ${PORT} > /dev/null @@ -71,7 +71,7 @@ echo "go" >${RUNFILE} nohup /dev/null $0 watchdog & fi ;; - + stop) echo -e "Stopping A3 server if there is one (Port=\033[35m${PORT}\033[0m)..." if [ -f ${RUNFILE} ]; then @@ -88,7 +88,7 @@ rm -f ${PIDFILE} fi fi ;; - + status) if [ -f ${RUNFILE} ]; then echo -e "\033[32mRunfile exist, Server should be up or is starting...\033[0m" @@ -106,13 +106,13 @@ echo $output | ps ax | grep ${SERVER} | grep ${PORT} fi fi ;; - + restart) $0 stop sleep 5s $0 start ;; - + watchdog) # zip old logfile and move it to old directory cd ${LOG_DIR} @@ -123,7 +123,7 @@ echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Zipping logfiles from ${LOG_DIR} to else echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] No old logfile to zip in ${LOG_DIR}" fi - + # zip old logfiles and move them to old directory cd ${ARMA_DIR} if find ./*.log -type f; then @@ -133,20 +133,20 @@ echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Zipping logfiles from ${ARMA_DIR} to else echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] No old logfiles to zip in ${ARMA_DIR}" fi - + # delete old logs when older then ${DELDAYS} days find ${LOG_DIR}/old -iname "*log.tgz" -mtime +${DELDAYS} -delete echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Deleting all zipped logfile in ${LOG_DIR}/old when older then ${DELDAYS} days." - + # this is a background watchdog process. Do not start directly while [ -f ${RUNFILE} ]; do # launch the server... cd ${ARMA_DIR} echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Starting server (port ${PORT})..." export LD_LIBRARY_PATH=.:${ARMA_DIR}:${ARMA_DIR}/@epochhive:$LD_LIBRARY_PATH - + ${SERVER} >>${LOGFILE} 2>&1 -config=${CONFIG} -cfg=${CFG} -port=${PORT} -name=${NAME} -pid=${PIDFILE} -mod=${MODS} -servermod=${SERVERMODS} -bepath=${BEPATH} ${OTHERPARAMS} - + if [ -f ${RUNFILE} ]; then echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server died, waiting to restart..." sleep 5s @@ -155,7 +155,7 @@ echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server shutdown intentional, watchdo fi done ;; - + check) clear echo -ne "\033[33mArmA 3 directory:\033[0m ${ARMA_DIR} " @@ -165,7 +165,7 @@ else echo -e "\033[31mMISSING!\033[0m" echo -e "========= Check your settings (ARMA_DIR)! =========\n" fi - + echo -ne "\033[33mServer executable:\033[0m ${SERVER} " if [ -x ${SERVER} ]; then echo -e "\033[32mOK\033[0m" @@ -173,7 +173,7 @@ else echo -e "\033[31mMISSING!\033[0m" echo -e "========= Server executable not found, arma3server should be in that folder when path is right =========\n" fi - + echo -ne "\033[33mCFG directory:\033[0m ${CFG_DIR}/${NAME} " if [ -d ${CFG_DIR}/${NAME} ]; then echo -e "\033[32mOK\033[0m" @@ -182,7 +182,7 @@ echo -e "\033[31mMISSING!\033[0m" echo -e "========= We need that folder for the config files! You can use the next row to create it: =========" echo -e "\033[35mmkdir ${CFG_DIR}/${NAME}\033[0m\n" fi - + echo -ne "\033[33mConfig file:\033[0m ${CONFIG} " if [ -f ${CONFIG} ]; then echo -e "\033[32mOK\033[0m" @@ -190,7 +190,7 @@ else echo -e "\033[31mMISSING!\033[0m" echo -e "========= We need this file in that folder =========\n" fi - + echo -ne "\033[33mBasic file:\033[0m ${CFG} " if [ -f ${CFG} ]; then echo -e "\033[32mOK\033[0m" @@ -198,7 +198,7 @@ else echo -e "\033[31mMISSING!\033[0m" echo -e "========= We need this file in that folder =========\n" fi - + echo -ne "\033[33mBattleye directory:\033[0m ${BEPATH} " if [ -d ${BEPATH} ]; then echo -e "\033[32mOK\033[0m" @@ -207,7 +207,7 @@ echo -e "\033[31mMISSING!\033[0m" echo -e "========= We need that folder for the Battleye files! You can use the next row to create it: =========" echo -e "\033[35mmkdir ${BEPATH}\033[0m\n" fi - + echo -ne "\033[33mArma3Profile:\033[0m ${CFG_DIR}/${NAME}/users/${NAME}/${NAME}.arma3profile " if [ -f ${CFG_DIR}/${NAME}/users/${NAME}/${NAME}.arma3profile ]; then echo -e "\033[32mOK\033[0m" @@ -219,7 +219,7 @@ echo -n 'echo -e "version=2;\nviewDistance=3000;\npreferredObjectViewDistance=30 echo -n "${CFG_DIR}/${NAME}/users/${NAME}/${NAME}.arma3profile" echo -e "\n\033[0m" fi - + echo -ne "\033[33mLog directory:\033[0m ${LOG_DIR} " if [ -d ${LOG_DIR} ]; then echo -e "\033[32mOK\033[0m" @@ -228,7 +228,7 @@ echo -e "\033[31mMISSING!\033[0m" echo -e "========= We need that folder. You can use the next row to create it: =========" echo -e "\033[35mmkdir ${LOG_DIR}\033[0m\n" fi - + echo -ne "\033[33mOld Log directory:\033[0m ${LOG_DIR}/old " if [ -d ${LOG_DIR}/old ]; then echo -e "\033[32mOK\033[0m" @@ -237,7 +237,7 @@ echo -e "\033[31mMISSING!\033[0m" echo -e "========= We need that folder. You can use the next row to create it: =========" echo -e "\033[35mmkdir ${LOG_DIR}/old\033[0m\n" fi - + echo -ne "\033[33mProfile directory:\033[0m ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME} " if [ -d ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME} ]; then echo -e "\033[32mOK\033[0m" @@ -247,7 +247,7 @@ echo -e "========= You should create this folder. You can use the next row for t echo -e "========= ( Not sure if we need this? Capital letters are ok ?) =========" echo -e "\033[35mmkdir -p ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}\033[0m\n" fi - + echo -ne "\033[33mArma3Profile symlink:\033[0m ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}/${NAME}.Arma3Profile " if [ -L ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}/${NAME}.Arma3Profile ]; then echo -e "\033[32mOK\033[0m" @@ -257,17 +257,17 @@ echo -e "========= You should creat this symlink. You can use the next row for t echo -e "========= ( Capital letters are ok in ~/.local/share/Arma 3.. !) =========" echo -e "\033[35mln -s ${CFG_DIR}/${NAME}/${NAME}.arma3profile ~/.local/share/Arma\ 3\ -\ Other\ Profiles/${NAME}/${NAME}.Arma3Profile\033[0m\n" fi - + echo -e "\n\033[33mPort number will be: \033[0m${PORT}" echo -e "\033[33mPID file will be: \033[0m${PIDFILE}" echo -e "\033[33mRUN file will be: \033[0m${RUNFILE}" - + echo -e "\n\033[33mStart cmd will be:\033[0m" echo -e "${SERVER} >>${LOGFILE} 2>&1 -config=${CONFIG} -cfg=${CFG} -port=${PORT} -name=${NAME} -pid=${PIDFILE} -mod=${MODS} ${OTHERPARAMS}" - + echo -e "\n\033[31mIf you got something MISSING, you have to work from the top to the bottom, fix the top issue and start the check again!\033[0m" ;; - + log) # you can see the logfile in realtime, no more need for screen or something else clear @@ -276,7 +276,7 @@ echo "========================================" sleep 1s tail -f ${LOG_DIR}/port_${PORT}*.log ;; - + *) echo "$0 (start|stop|restart|status|check|log)" ;; diff --git a/Server_Install_Pack/keys/epoch0390.bikey b/Server_Install_Pack/keys/epoch0390.bikey new file mode 100644 index 00000000..9f855bbc Binary files /dev/null and b/Server_Install_Pack/keys/epoch0390.bikey differ diff --git a/Server_Install_Pack/mpmissions/epoch.Altis.pbo b/Server_Install_Pack/mpmissions/epoch.Altis.pbo index 15676b84..50ac6e81 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Altis.pbo and b/Server_Install_Pack/mpmissions/epoch.Altis.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Australia.pbo b/Server_Install_Pack/mpmissions/epoch.Australia.pbo index 7f6d5112..24f8aea3 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Australia.pbo and b/Server_Install_Pack/mpmissions/epoch.Australia.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo b/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo index fe4a9259..056d5350 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo and b/Server_Install_Pack/mpmissions/epoch.Bootcamp_ACR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo b/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo index 9a24d023..2c808eb3 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo and b/Server_Install_Pack/mpmissions/epoch.Bornholm.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo b/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo index 6c7c76de..3c3c94e6 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo and b/Server_Install_Pack/mpmissions/epoch.Chernarus.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo b/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo index 8ea686de..9f0971a1 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo and b/Server_Install_Pack/mpmissions/epoch.Chernarus_Summer.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo b/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo index fd3d3833..664e9e2a 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo and b/Server_Install_Pack/mpmissions/epoch.Desert_E.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Esseker.pbo b/Server_Install_Pack/mpmissions/epoch.Esseker.pbo index deded2fe..ee757498 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Esseker.pbo and b/Server_Install_Pack/mpmissions/epoch.Esseker.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo b/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo index 08e395ea..afec6825 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo and b/Server_Install_Pack/mpmissions/epoch.Mountains_ACR.pbo differ diff --git a/Server_Install_Pack/MPMissions/epoch.Napf.pbo b/Server_Install_Pack/mpmissions/epoch.Napf.pbo similarity index 58% rename from Server_Install_Pack/MPMissions/epoch.Napf.pbo rename to Server_Install_Pack/mpmissions/epoch.Napf.pbo index 7e342ecf..416a4da2 100644 Binary files a/Server_Install_Pack/MPMissions/epoch.Napf.pbo and b/Server_Install_Pack/mpmissions/epoch.Napf.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Porto.pbo b/Server_Install_Pack/mpmissions/epoch.Porto.pbo index 738a7d5b..f9153e53 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Porto.pbo and b/Server_Install_Pack/mpmissions/epoch.Porto.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo b/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo index 6196aefb..ca299372 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo and b/Server_Install_Pack/mpmissions/epoch.ProvingGrounds_PMC.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Sara.pbo b/Server_Install_Pack/mpmissions/epoch.Sara.pbo index 05241852..53cf5bf7 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Sara.pbo and b/Server_Install_Pack/mpmissions/epoch.Sara.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo b/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo index 3de782c7..4c0cfeaa 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo and b/Server_Install_Pack/mpmissions/epoch.SaraLite.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo b/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo index 27a7df17..8efdc5a1 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo and b/Server_Install_Pack/mpmissions/epoch.Sara_dbe1.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo b/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo index 5c979710..ae3f2b97 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo and b/Server_Install_Pack/mpmissions/epoch.Shapur_BAF.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Stratis.pbo b/Server_Install_Pack/mpmissions/epoch.Stratis.pbo index 97fa3265..cb219d23 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Stratis.pbo and b/Server_Install_Pack/mpmissions/epoch.Stratis.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Takistan.pbo b/Server_Install_Pack/mpmissions/epoch.Takistan.pbo index 6909cb24..b70875f5 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Takistan.pbo and b/Server_Install_Pack/mpmissions/epoch.Takistan.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo b/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo new file mode 100644 index 00000000..a8015de9 Binary files /dev/null and b/Server_Install_Pack/mpmissions/epoch.Tanoa.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.VR.pbo b/Server_Install_Pack/mpmissions/epoch.VR.pbo index 9381a73e..261888db 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.VR.pbo and b/Server_Install_Pack/mpmissions/epoch.VR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo b/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo index 48e0a9fa..60f27840 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo and b/Server_Install_Pack/mpmissions/epoch.Woodland_ACR.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo b/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo index eee88147..9e6a17b5 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo and b/Server_Install_Pack/mpmissions/epoch.Zargabad.pbo differ diff --git a/Server_Install_Pack/mpmissions/epoch.utes.pbo b/Server_Install_Pack/mpmissions/epoch.utes.pbo index e86a8498..ea35d006 100644 Binary files a/Server_Install_Pack/mpmissions/epoch.utes.pbo and b/Server_Install_Pack/mpmissions/epoch.utes.pbo differ diff --git a/Server_Install_Pack/sc/BattlEye/createvehicle.txt b/Server_Install_Pack/sc/BattlEye/createvehicle.txt index 02ba1834..400788cd 100644 --- a/Server_Install_Pack/sc/BattlEye/createvehicle.txt +++ b/Server_Install_Pack/sc/BattlEye/createvehicle.txt @@ -1,3 +1,3 @@ -5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|SapperB|Cloak)_F" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" +5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|SapperB|Cloak)_F" !="EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" 5 "_EPOCH" !="(SapperHead|Jack|SolarGen)_SIM_EPOCH" !="Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower)_EPOCH" !="(Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH" !="(Tipi|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen|Jack|Freezer|Tarp|CinderWallHalf|Bobber)_EPOCH" !="I_(Soldier[1-3]|Soldier)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH" !="(Hesco3|Metal)(_Ghost|_SIM|)_EPOCH" !="(Spike|Metal)_TRAP_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH" 5 SeaGull diff --git a/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt b/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt index fbd50b20..b0709cf3 100644 --- a/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt +++ b/Server_Install_Pack/sc/BattlEye/deleteVehicle.txt @@ -1 +1 @@ -5 "" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$" +5 "" !="[0-9]:[0-9]{1,4}" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$" diff --git a/Server_Install_Pack/sc/BattlEye/remoteexec.txt b/Server_Install_Pack/sc/BattlEye/remoteexec.txt index 1b0c5d4c..0848e6cc 100644 --- a/Server_Install_Pack/sc/BattlEye/remoteexec.txt +++ b/Server_Install_Pack/sc/BattlEye/remoteexec.txt @@ -1 +1 @@ -5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="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) \[.+\]" +5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="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_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|makemarker|removemarker) \[.+\]" !="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|client_bitePlayer|serverlootobject) \[.+\]" diff --git a/Server_Install_Pack/sc/BattlEye/scripts.txt b/Server_Install_Pack/sc/BattlEye/scripts.txt index de3933a8..023ccf07 100644 --- a/Server_Install_Pack/sc/BattlEye/scripts.txt +++ b/Server_Install_Pack/sc/BattlEye/scripts.txt @@ -1,9 +1,8 @@ //new2 7 "BIS_fnc_dynamictext" !="\"BIS_fnc_dynamictext"\" !="'BIS_fnc_dynamictext'" -7 forceRespawn !="reviveHandleForceRespawnAction" !="forcerespawn player;" +7 forceRespawn !="ForceRespawnDuration" !="reviveHandleForceRespawnAction" !="forcerespawn player;" 7 setFriend 7 setAmmo -7 RscDebugConsole_watch !="RscDebugConsole_watchSave = [true,true,true,true];" !="\"RscDebugConsole_watch\"" 7 enableFatigue 7 setUnitRecoilCoefficient 7 setWeaponReloadingTime @@ -11,10 +10,10 @@ 7 callExtension 7 showCommandingMenu !="showCommandingMenu '';" !"showCommandingMenu '#USER:" 7 moveIn !="\"A3\functions_f\Misc\fn_moveIn.sqf\"" !="\"A3\functions_f\arrays\fn_removeIndex.sqf\"" !="player moveInAny _vehicle;\nEPOCH_antiWallCount = EPOCH_antiWallCount + 1;" !="[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];\n_driver moveInAny _unit;" !="_driver moveInAny Epoch_mission_uav;" !="axeVIP moveInDriver vehicle axeVIP;" !="axeVIP moveInCargo vehicle axeVIP; !="_driver moveInDriver _axeCopter;" !="_unit moveInGunner _axeCopter;" !="axeVIP moveInDriver vehicle axeVIP;" !="axeVIP moveInCargo vehicle axeVIP;" -7 attachTo !="EP_light attachTo [player];" !="_bomb attachTo [_unit, [0,0,0],\"Pelvis\"];" !="_dogHolder attachTo [_dog, [-0.2,1.2,0.7]];" !="EPOCH_target attachTo[player];" !="_sapperSmoke attachTo [_sapper,[0,0,-0.4]];"" !="_cage attachTo [_cage2,[0,1.3,0]];" +7 attachTo !="EP_light attachTo [player,[0,8.11,_nlZ]];" !="_bomb attachTo [_unit, [0,0,0],\"Pelvis\"];" !="_dogHolder attachTo [_dog, [-0.2,1.2,0.7]];" !="EPOCH_target attachTo[player];" !="_sapperSmoke attachTo [_sapper,[0,0,-0.4]];"" !="_cage attachTo [_cage2,[0,1.3,0]];" 7 enableCollisionWith 7 hideObject !="_dogHolder hideobject true;" !="_dogHolder hideobject false;" !="player hideobject true;" !="_ship hideobject true;\n_ship hideobjectglobal true;" -7 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-1];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" +7 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" !="_this select 0 setvelocity (_this select 1)" !="_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];" 7 assignAs !="assignAsCargo" !="_unit assignAsGunner _axeCopter;" !="_driver assignAsDriver _axeCopter;" !="axeVIP assignAsDriver vehicle axeVIP;" 7 assignAsCargo !="_x assignAsCargo axeGeneralsBoat;" !="axeVIP assignAsCargo vehicle player;" !="axeVIP assignAsCargo vehicle axeVIP;" 7 allowDamage !="_unit allowDamage false;" !="_unit allowDamage true;" !="player allowDamage true;" !="vehicle player allowDamage true;" !="player allowDamage false;" !="_target allowDamage true;" !="_cargo allowDamage false;" @@ -22,8 +21,8 @@ 7 onMapSingleClick !="onMapSingleClick '';" !="\"onmapsingleclick\"" 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\";" !="_wh addMagazineAmmoCargo[_item, 1, _count];" !="CBA_fnc_addMagazine" !="\\fnc_addMagazine" !="\"addMagazine" 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] ;" !="CBA_fnc_addMagazineCargo" !="\\fnc_addMagazineCargo" !="\"addMagazineCargo" !="cba_fAddMagazineCargo" -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 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" !="CBA_fnc_addItem" !="\\fnc_addItem" !="\"addItem" !="fnc_addItemCargo" +7 addBackPack !="fnc_addBackpackCargo" 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];" 7 removeAllWeapons !="removeAllWeapons axeGeneral;" @@ -34,32 +33,31 @@ 7 createVehicleCrew !="createvehiclecrew _x;" 7 createVehicleLocal !"\"#particlesource\" createVehicleLocal" !"\"#lightpoint\" createVehicleLocal" !"\"BloodSplat\" createVehicleLocal" !"[\"lightning1_F\", \"lightning2_F\"] call BIS_fnc_selectRandom;\n_lighting = _class createVehicleLocal" !="SLX_XEH_DUMMY createVehicleLocal [0, 0, 0];" !="CBA_eventHandlers = "Logic" createVehicleLocal [0, 0];" 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"];" -7 createAgent !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];" +7 createAgent !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];" !="_unit = createAgent[_unitClass, position player, [], _zRange, \"FORM\"];" 7 createTeam -7 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog \"TapOut\";" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" -7 createDisplay !="createDisplay \"rmx_dynamenu\";" !="_parent createdisplay _displayClass;" -7 deleteMarker -7 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent" -7 createMarker !="CBA_fnc_createMarker\"" !="\\fnc_createMarker" !="\"createMarker" !="cba_fCreateMarker" -7 assignItem !="axeVIP assignItem _item;" +7 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" +7 createDisplay !="createDisplay \"rmx_dynamenu\";" !="_parent createdisplay _displayClass;" !="finddisplay 151 createdisplay 'RscDisplayOptionsLayout'" +7 deleteMarker !="deleteMarkerLocal _mName;" +7 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent" !="_mrkr setMarkerShapeLocal _mShape;" != "_mrkr setMarkerTypeLocal _mType;" +7 createMarker !="CBA_fnc_createMarker\"" !="\\fnc_createMarker" !="\"createMarker" !="cba_fCreateMarker" !="createMarkerLocal [_mName, _mPos];" +7 assignItem !="axeVIP assignItem _item;" !="unassignItem" 7 forceAddUniform 7 removeAllMPEventHandlers 7 setDammage 7 displaySetEventHandler 7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," !="_ctrl ctrlSetEventHandler [\"mouseEnter\"" !="_ctrlBtn ctrlSetEventHandler [\"MouseButtonDblClick\", _verAct];" 7 addMPEventHandler -7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"[\"FiredNear"\" !"[\"EpeContactStart"\" !"[\"GetOut"\" !"[\"local"\" !"[\"PostReset"\" !"[\"TaskSetAsCurrent"\" !="player addEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="\"CBA_fnc_addEventHandler\"" !="\\fnc_addEventHandler" !="\"addEventHandler" !="_eventFunc = _eventFunc + \"(_this select 0) addEventHandler ['Respawn', \" + str _eventFunc + \"];\";" !="_unit addEventHandler [\"hitpart\"," !="CBA_fnc_addEventHandler" -7 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="_display displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="_display displayaddeventhandler\n[\n\"mousemoving\"," !="_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" !="_display displayaddeventhandler [_x,_fnc_animate];" !="Development\") then\n{\n_display displayaddeventhandler [\n\"keydown\"" !="_display displayaddeventhandler [\"mousemoving\",\"with uinamespace do {['watchFields'" !="/"CBA_fnc_addDisplayHandler/"" -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)])];" !="_prevButton ctrlAddEventHandler [\"MouseButtonUp\", {_this call cba_diagnostic_fnc_debug" -7 removeAllEventHandlers !="ctrlRemoveAllEventHandlers" !="displayRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_unit removeAllEventHandlers \"Hit\";\n_unit removeAllEventHandlers \"FiredNear\";" +7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"[\"FiredNear"\" !"[\"EpeContactStart"\" !"[\"GetOut"\" !"[\"local"\" !"[\"PostReset"\" !"[\"TaskSetAsCurrent"\" !="player addEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="\"CBA_fnc_addEventHandler\"" !="\\fnc_addEventHandler" !="\"addEventHandler" !="_eventFunc = _eventFunc + \"(_this select 0) addEventHandler ['Respawn', \" + str _eventFunc + \"];\";" !="_unit addEventHandler [\"hitpart\"," !="CBA_fnc_addEventHandler" !="_ship addEventHandler [\"AttributesChanged3DEN\"" !="addEventHandler [\"HandleDamage\",bis_fnc_reviveOnPlayerHandleDamage];" +7 displayAddEventHandler !="(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !="_display displayAddEventHandler [_x,([\"CfgEpochClient\", _x, \"\"] call EPOCH_fnc_returnConfigEntryV2)];" !="_display displayaddeventhandler\n[\n\"mousemoving\"," !="_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" !="_display displayaddeventhandler [_x,_fnc_animate];" !="Development\") then\n{\n_display displayaddeventhandler [\n\"keydown\"" !="CBA_fnc_addDisplayHandler" !="_display displayAddEventHandler [\"MouseMoving" +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)])];" !="_prevButton ctrlAddEventHandler [\"MouseButtonUp\", {_this call cba_diagnostic_fnc_debug" !="BIS_RscRespawnControlsMap_ctrlHeaderRespawnButton ctrlAddEventhandler [/"ButtonDown/"" +7 removeAllEventHandlers !="ctrlRemoveAllEventHandlers" !="displayRemoveAllEventHandlers" !="_vehicle removeAllEventHandlers \"GetOut\";" !="_sapper removeAllEventHandlers \"Hit\";\n_sapper removeAllEventHandlers \"FiredNear\";" !="_unit removeAllEventHandlers \"Hit\";\n_unit removeAllEventHandlers \"FiredNear\";" !="{_ship removeAllEventHandlers _x;} forEach [\"AttributesChanged3DEN\"" !="_zombie removeAllEventHandlers \"Hit\";" !="_zombie removeAllEventHandlers \"FiredNear\";" 7 displayRemoveAllEventHandlers !="_display displayRemoveAllEventHandlers _x;" !="if !(isMultiplayer) then { { (findDisplay 46) displayRemoveAllEventHandlers _x } forEach [\"KeyUp\", \"KeyDown\"] };" 7 removeAllMissionEventHandlers 7 ctrlRemoveAllEventHandlers !="(uiNamespace getVariable 'ESP_map') ctrlRemoveAllEventHandlers 'Draw';" !="ctrlAddEventHandler ['MouseButtonDown'" -7 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !"_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler" -7 displayRemoveEventHandler !"BIS_fnc_guiMessage_status" !="(findDisplay 46) displayRemoveEventHandler [_key, _id];" -7 switchCamera !="vehicle player switchCamera" +7 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !"_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="player removeEventHandler [_x, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler" +7 switchCamera !="vehicle player switchCamera" !="_antagonist switchCamera \"Internal\";" 7 remoteControl !"fn_moduleRemoteControl.sqf" !="\"BIS_fnc_moduleRemoteControl"\" -7 drawIcon3D !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !"EPOCH_drawIcon3dStability" !"EPOCH_drawIcon3d" !"if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\"" !="drawIcon3D[\"x\addons\a3_epoch_code\Data\UI\snap_ca.paa\"" +7 drawIcon3D !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !"EPOCH_drawIcon3dStability" !"EPOCH_drawIcon3d" !"if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\"" !="drawIcon3D\n[\n(_x getVariable [\"bis_fnc_reviveGet3dIcons_textures" !="drawIcon3D[\"x\addons\a3_epoch_code\Data\UI\snap_ca.paa\"" 7 drawLine3D !"{\nfor [{_i = 1}, {_i < count _x}, {_i = _i + 1}] do {\ndrawLine3D [_x select (_i - 1), _x select _i, ((BIS_tracedShooter getVari" 7 ctrlCreate !="ctrlCreate [\"RscProgress\",_idc + 1];" !="ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\"" !="ctrlCreate [_x,call _getIDC];" !="_mainGrp = _display ctrlCreate [\"Epoch_main_config_group\",_value];" !="ctrlCreate [\"RscControlsGroupNoScrollbars\",call epoch_getIDC];" !="ctrlCreate [\"rmx_rscPicture\",(66600 + _e)];" !="ctrlCreate ["RscStructuredText",call epoch_getIDC];" 7 ctrlClassName @@ -72,6 +70,7 @@ 7 loadFile 7 selectPlayer !="selectPlayer _playerObject;" 7 setGroupIconsVisible +7 setGroupIconsVisible 7 setGroupIconsSelectable 7 setGroupIconParams 7 addGroupIcon diff --git a/Server_Install_Pack/sc/BattlEye/setvariable.txt b/Server_Install_Pack/sc/BattlEye/setvariable.txt index 73f52477..3443ada5 100644 --- a/Server_Install_Pack/sc/BattlEye/setvariable.txt +++ b/Server_Install_Pack/sc/BattlEye/setvariable.txt @@ -1 +1 @@ -5 "" !=(Offer|Accept|BUILD_SLOT|TRADE_ACTIVE|last_targeter) !="bis_fnc_objectvar_var" !="bis_fnc_selectrespawntemplate_respawned" +5 "" !=(Offer|Accept|BUILD_SLOT|TRADE_ACTIVE|last_targeter|epoch_(antagobj|antagBomb|gm_enabled)) !="bis_fnc_objectvar_var" !="bis_fnc_selectrespawntemplate_respawned" diff --git a/Server_Install_Pack/sc/server-example.cfg b/Server_Install_Pack/sc/server-example.cfg index c8dff4ca..e38769aa 100644 --- a/Server_Install_Pack/sc/server-example.cfg +++ b/Server_Install_Pack/sc/server-example.cfg @@ -1,14 +1,14 @@ // EPOCH SERVER CONFIG // GLOBAL SETTINGS -hostname = "EpochMod.com (0.3.8|1.58) ID02 YourHost"; +hostname = "EpochMod.com (0.3.8|1.60) ID02 YourHost"; password = ""; passwordAdmin = "!CHANGE_THIS_PASSWORD!"; serverCommandPassword = "!CHANGE_THIS_PASSWORD!"; logFile = "A3Master.log"; verifySignatures = 2; BattlEye = 1; -requiredBuild = 135656; +requiredBuild = 136470; // WHITELIST FILE TYPES allowedLoadFileExtensions[] = {:}; diff --git a/Server_Install_Pack/sc/users/sc/sc.arma3profile b/Server_Install_Pack/sc/users/sc/sc.arma3profile index 929ab13a..09f7ce5d 100644 --- a/Server_Install_Pack/sc/users/sc/sc.arma3profile +++ b/Server_Install_Pack/sc/users/sc/sc.arma3profile @@ -11,7 +11,7 @@ class DifficultyPresets class Options { // Simulation - reducedDamage = false; // Reduced damage + reducedDamage = 0; // Reduced damage // Situational awareness groupIndicators = 2; // Group indicators (0 = never, 1 = limited distance, 2 = always) @@ -24,23 +24,22 @@ class DifficultyPresets // Personal awareness weaponInfo = 1; // Weapon info (0 = never, 1 = fade out, 2 = always) stanceIndicator = 1; // Stance indicator (0 = never, 1 = fade out, 2 = always) - staminaBar = false; // Stamina bar - weaponCrosshair = true; // Weapon crosshair - visionAid = false; // Vision aid - + staminaBar = 1; // Stamina bar (0 = never, 1 = always) + weaponCrosshair = 1; // Weapon crosshair (0 = never, 1 = always) + visionAid = 0; // Vision aid (0 = never, 1 = always) // View - thirdPersonView = true; // 3rd person view - cameraShake = true; // Camera shake + thirdPersonView = 1; // 3rd person view (0 = enabled, 1 = disabled) + cameraShake = 1; // Camera shake (0 = enabled, 1 = disabled) // Multiplayer - scoreTable = true; // Score table - deathMessages = true; // Killed by - vonID = true; // VON ID + scoreTable = 1; // Score table + deathMessages = 1; // Killed by + vonID = 1; // VON ID // Misc - mapContent = false; // Extended map content - autoReport = false; // Automatic reporting - multipleSaves = false; // Multiple saves + mapContent = 0; // Extended map content + autoReport = 0; // Automatic reporting + multipleSaves = 0; // Multiple saves }; aiLevelPreset=2; }; diff --git a/Server_Install_Pack/start-A3-cmd-line-example.txt b/Server_Install_Pack/start-A3-cmd-line-example.txt index cf5afdba..0b0cf3f0 100644 --- a/Server_Install_Pack/start-A3-cmd-line-example.txt +++ b/Server_Install_Pack/start-A3-cmd-line-example.txt @@ -1 +1 @@ --mod=@Epoch; -serverMod=@EpochHive; -config=C:\arma3server\SC\config.cfg -ip=192.168.71.234 -port=2302 -profiles=SC -cfg=C:\arma3server\SC\basic.cfg -name=SC \ No newline at end of file +-mod=@Epoch; -serverMod=@EpochHive; -config=C:\arma3server\SC\server.cfg -ip=192.168.71.234 -port=2302 -profiles=SC -cfg=C:\arma3server\SC\basic.cfg -name=SC diff --git a/Sources/description.ext b/Sources/description.ext index 9c91e93f..a076c83d 100644 --- a/Sources/description.ext +++ b/Sources/description.ext @@ -1,2 +1,2 @@ -// Epoch Sandbox Survival Gamemode +// Epoch Survival Gamemode #include "epoch_config\sandbox_config.hpp" diff --git a/Sources/epoch_code/System/EPOCH_zombie_brain.fsm b/Sources/epoch_code/System/EPOCH_zombie_brain.fsm new file mode 100644 index 00000000..8ae184e4 --- /dev/null +++ b/Sources/epoch_code/System/EPOCH_zombie_brain.fsm @@ -0,0 +1,881 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"brainz",0,4346,-25.000000,75.000000,75.000000,125.000000,0.000000,"brainz"}; +item1[] = {"_",8,218,125.000000,-175.000000,225.000000,-125.000000,0.000000,""}; +item2[] = {"instinct",2,250,125.000000,-250.000000,225.000000,-200.000000,0.000000,"instinct"}; +item3[] = {"check",4,218,275.000000,-250.000000,375.000000,-200.000000,5.000000,"check"}; +item4[] = {"pre_dispose",2,250,-75.000000,-100.000000,25.000000,-50.000000,0.000000,"pre dispose"}; +item5[] = {"dispose_1",4,218,-75.000000,-275.000000,25.000000,-225.000000,100.000000,"dispose"}; +item6[] = {"wait_dispose",4,218,-100.000000,-25.000000,0.000000,25.000000,0.000000,"wait" \n "dispose"}; +item7[] = {"reset_vars",2,250,125.000000,-100.000000,225.000000,-50.000000,0.000000,"reset vars"}; +item8[] = {"do_attack",4,218,550.000000,-100.000000,650.000000,-50.000000,60.000000,"do attack"}; +item9[] = {"dispose",4,218,-75.000000,-200.000000,25.000000,-150.000000,200.000000,"dispose"}; +item10[] = {"imaginary_target",4,218,600.000000,-150.000000,700.000000,-100.000000,70.000000,"imaginary" \n "target"}; +item11[] = {"move",4,218,375.000000,-375.000000,475.000000,-325.000000,60.000000,"move"}; +item12[] = {"checking_status",2,250,400.000000,-175.000000,500.000000,-125.000000,0.000000,"checking status"}; +item13[] = {"smell",4,218,475.000000,-325.000000,575.000000,-275.000000,90.000000,"smell"}; +item14[] = {"final_checks___r",4,218,375.000000,-75.000000,475.000000,-25.000000,10.000000,"final" \n "checks / resets"}; +item15[] = {"done",4,218,275.000000,-100.000000,375.000000,-50.000000,100.000000,"done"}; +item16[] = {"moan",4,218,300.000000,-400.000000,400.000000,-350.000000,70.000000,"moan"}; +item17[] = {"Wait_random",4,218,25.000000,-25.000000,125.000000,25.000000,10.000000,"Wait random"}; +item18[] = {"end",1,250,-150.000000,75.000000,-50.000000,125.000000,0.000000,"end"}; +item19[] = {"attack",4,218,-50.000000,-350.000000,50.000000,-300.000000,90.000000,"attack"}; +item20[] = {"stuck",4,218,475.000000,-50.000000,575.000000,0.000000,30.000000,"stuck"}; +item21[] = {"pre_vars___check",4,218,375.000000,-300.000000,475.000000,-250.000000,95.000000,"pre vars / checks"}; +item22[] = {"sight___target",4,218,550.000000,-275.000000,650.000000,-225.000000,85.000000,"sight / target"}; +item23[] = {"hearing___target",4,218,600.000000,-225.000000,700.000000,-175.000000,80.000000,"hearing / target"}; +item24[] = {"spin",2,250,-50.000000,-425.000000,50.000000,-375.000000,0.000000,"spin"}; +item25[] = {"wait",4,218,75.000000,-425.000000,175.000000,-375.000000,0.000000,"wait"}; +item26[] = {"scream",4,218,200.000000,-425.000000,300.000000,-375.000000,80.000000,"scream"}; +item27[] = {"____FAKE____",9,0,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"}; +link0[] = {0,17}; +link1[] = {1,2}; +link2[] = {2,3}; +link3[] = {2,5}; +link4[] = {2,9}; +link5[] = {2,11}; +link6[] = {2,16}; +link7[] = {2,19}; +link8[] = {2,26}; +link9[] = {3,12}; +link10[] = {4,6}; +link11[] = {5,2}; +link12[] = {6,18}; +link13[] = {7,1}; +link14[] = {7,9}; +link15[] = {8,12}; +link16[] = {9,4}; +link17[] = {10,12}; +link18[] = {11,2}; +link19[] = {12,8}; +link20[] = {12,13}; +link21[] = {12,14}; +link22[] = {12,15}; +link23[] = {12,20}; +link24[] = {12,21}; +link25[] = {12,22}; +link26[] = {12,23}; +link27[] = {13,12}; +link28[] = {14,12}; +link29[] = {15,7}; +link30[] = {16,2}; +link31[] = {17,7}; +link32[] = {19,24}; +link33[] = {20,12}; +link34[] = {21,12}; +link35[] = {22,12}; +link36[] = {23,12}; +link37[] = {24,25}; +link38[] = {25,2}; +link39[] = {26,2}; +link40[] = {27,10}; +globals[] = {0.000000,0,0,0,0,640,480,1,267,6316128,1,-268.969421,732.515686,320.848328,-611.003845,978,854,1}; +window[] = {2,-1,-1,-32000,-32000,551,26,1051,26,3,996}; +*//*%FSM*/ +class FSM +{ + fsmName = "zombie"; + class States + { + /*%FSM*/ + class brainz + { + name = "brainz"; + itemno = 0; + init = /*%FSM*/"_zombie = _this select 0;" \n + "_sBomb = _this select 1;" \n + "_head = objNull;" \n + "_lastAlert = diag_tickTime;" \n + "_trgt = player;" \n + "" \n + "//Defaults" \n + "_fsmPath = ""epoch_code\system"";" \n + "_zombie setBehaviour ""CARELESS"";" \n + "_zombie setUnitPos ""UP""; " \n + "_trgtArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n + "_vehArray = [""Car""];" \n + "_trgt = player;" \n + "_t = diag_tickTime;" \n + "_zedPos = getPosATL _zombie;" \n + "" \n + "//Behaviour Vars" \n + "_attackDist = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""attackDist"");" \n + "_groanTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""groanTrig"");" \n + "_zDisposeRange = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""disposeRange"");" \n + "_sHideTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""hideLevel""); " \n + "_moveTrig = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""chargeLevel""); " \n + "_sHardness = floor (random 6) max 1;" \n + "_checkFreq = getNumber (getMissionConfig ""CfgEpochRyanZombie"" >> ""reflexSpeed"");" \n + "_welcomeWait = random 4;" \n + "_config = 'CfgEpochClient' call EPOCH_returnConfig;" \n + "_jammerRange = getNumber(_config >> ""buildingJammerRange"");" \n + "_zSmell = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""smell"");" \n + "_zSight = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""sight"");" \n + "_zHear = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""hearing"");" \n + "_zMem = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""memory"");" \n + "_zMoans = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""moans"");" \n + "_zScreams = getArray (getMissionConfig ""CfgEpochRyanZombie"" >> ""screams"");" \n + "" \n + "//Smell" \n + "_smellDist = _zSmell select 0;" \n + "_smellCoeff = _zSmell select 1;" \n + "" \n + "//Sight" \n + "_sightDist = _zSight select 0;" \n + "_sightCoeff = _zSight select 1;" \n + "_sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt];" \n + "" \n + "//Hearing" \n + "_hearDist = _zHear select 0;" \n + "_hearCoeff = _zHear select 1;" \n + "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n + "_shotDist = 0;" \n + "" \n + "//Memory" \n + "_memTime = _zMem select 0;" \n + "_memCoeff = _zMem select 1;" \n + "_m = _t;" \n + "_spottedPos = [0,0,0];" \n + "" \n + "//Moving" \n + "_moveTo = [0,0,0];" \n + "" \n + "//Init moveTo" \n + "_zombie moveTo _zedPos;" \n + "" \n + "//Attack" \n + "_lastAttack = _t;" \n + "_doAttack = false;" \n + "" \n + "//Sounds" \n + "_doMoan = false;" \n + "_doScream = false;" \n + "_lastMoan = _t;" \n + "" \n + "//Missions" \n + "_traderDispose = false;" \n + "" \n + "//FSM" \n + "_walkHandle = -1;" \n + "" \n + "_requestDispose = false;" \n + "_nrstTrgt = objNull;" \n + "_lowDist = 0;" \n + "_currDist = 0;" \n + "_filterBuilds = [""Land_i_Addon_03_V1_F"",""Land_Offices_01_V1_F""];" \n + "" \n + "_u = _t;" \n + "_c = _u;" \n + "_f = _c;" \n + "_h = _f;" \n + "_d2 = _h;" \n + "" \n + "" \n + "" \n + "_dirTo = 0;" \n + "_lDist = 0;" \n + "_checkEntry = """";" \n + "" \n + "_decisionMade = false;" \n + "_actionDone = false;" \n + "_zombiePos=[0,0,0];" \n + "_moveTo=[0,0,0];" \n + "_trgtPos=[0,0,0];" \n + "_hidePos = [0,0,0];" \n + "_nrPlyrs = [];" \n + "_circlePos = [0,0,0];" \n + "_behindPos = [0,0,0];" \n + "_sSide = 90;" \n + "" \n + "_vectTot = [0,0,0];" \n + "" \n + "_lastAction = """";" \n + "_maxStalkDist = 48;" \n + "_maxStalkDistPerm = 48;" \n + "_minStalkDist = 12;" \n + "_minStalkDistPerm = 12;" \n + "_doWander = false;" \n + "_callHide = false;" \n + "_callMove = false;" \n + "_callGroan = false;" \n + "" \n + "//Feeling vars" \n + "_sAnger = 50;" \n + "_sFear = 50;" \n + "_threateLevel = 0;" \n + "_addThreat = 0;" \n + "_sHit = [objNull, 0];" \n + "" \n + "_angerCoeff = random 1;" \n + "_calmAngerCoeff = 1 - _angerCoeff;" \n + "_fearCoeff = random 1;" \n + "_calmFearCoeff = 1 - _fearCoeff;" \n + "" \n + "_stuckCount = 0;" \n + "" \n + "_traderDispose = false;" \n + "" \n + "_doMove = false;" \n + "_sanityCheckDone = false;" \n + "_canSee = ([_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _trgt] >= 0.5);" \n + "_nrTrgts = [];" \n + "_threatLevel = 0;" \n + "_trgtDist = _trgt distance _zombie;" \n + "_sanityCheck = 0;" \n + "_doHide = false;" \n + "_doAttack = false;" \n + "_firedNear = 0;" \n + "" \n + "" \n + "" \n + "" \n + "//Debug - Uncomment Sounds for live" \n + "_randomGroan = {" \n + "/*" \n + "_sounds = [""sapper_groan0"",""sapper_groan1"",""sapper_groan2""];" \n + "_sound = selectRandom _sounds;" \n + "" \n + "_zombie say3D _sound;" \n + "[player, _zombie, _sound, Epoch_personalToken] remoteExec [""EPOCH_server_handle_say3D"",2];" \n + "*/" \n + "};" \n + "" \n + "_doInterrupt = {" \n + "_actionDone = true;" \n + "_criteria = ""(true)"";" \n + "};" \n + "" \n + "//DEBUG" \n + "_doDebug = false;" \n + "axeDebug = _doDebug ;" \n + "if(_doDebug)then{" \n + "axeDebug = true;" \n + "_jammerRange = 75;" \n + "axeZed = _zombie;" \n + "_debugDo = ""START"";" \n + "_mkrName = """";" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait_random + { + itemno = 17; + priority = 10.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _t) > _welcomeWait;"/*%FSM*/; + action=/*%FSM*/"call _randomGroan;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class instinct + { + name = "instinct"; + itemno = 2; + init = /*%FSM*/"//systemchat format[""I %1"",diag_tickTime];" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = 9; + priority = 200.000000; + to="pre_dispose"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle setFSMVariable [""_callDispose"", true];" \n + "};" \n + "_zombie removeAllEventHandlers ""Hit"";" \n + "_zombie removeAllEventHandlers ""FiredNear"";" \n + "//[] call EPOCH_zombieSpawn;" \n + "" \n + "_t = diag_tickTime;" \n + "" \n + "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose_1 + { + itemno = 5; + priority = 100.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(alive _zombie) || _traderDispose || _trgtDist > _zDisposeRange;"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class attack + { + itemno = 19; + priority = 90.000000; + to="spin"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doAttack"/*%FSM*/; + action=/*%FSM*/"_zombie moveTo _zedPos;" \n + "_aslPos = ATLToASL _zedPos;" \n + "_trgtPos = getPosASLVisual _trgt;" \n + "_unitV = velocity _zombie;" \n + "_unitvDir = vectorDir _zombie;" \n + "_vDir = _aslPos vectorFromTo _trgtPos;" \n + "_unitvUp = vectorUp _trgt;" \n + "_lastAttack = _t;" \n + "_doAttack = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class scream + { + itemno = 26; + priority = 80.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doScream"/*%FSM*/; + action=/*%FSM*/"_random = selectRandom _zScreams;" \n + "playSound format [""%1"",_random];" \n + "_doScream = false;" \n + "_debugDo = ""SCREAM"";" \n + "//systemChat ""Scream"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class moan + { + itemno = 16; + priority = 70.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doMoan && diag_tickTime - _lastMoan > 8"/*%FSM*/; + action=/*%FSM*/"_random = selectRandom _zMoans;" \n + "playSound format [""%1"",_random];" \n + "_doMoan = false;" \n + "_lastMoan = _t;" \n + "_debugDo = ""SOUNDS"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = 11; + priority = 60.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_moveTo isEqualTo [0,0,0]) && moveToCompleted _zombie"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle = [""EPOCH_zombie_walking"",_fsmPath,[_zombie]] call EPOCH_fnc_dynamicFSM;" \n + "};" \n + "_walkHandle setFSMVariable [""_nextPos"", _moveTo];" \n + "_walkHandle setFSMVariable [""_deadTrgts"", _deadTrgts];" \n + "_moveTo = [0,0,0];" \n + "_debugDo = ""MOVE"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class check + { + itemno = 3; + priority = 5.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime > _u + _checkFreq"/*%FSM*/; + action=/*%FSM*/"_sanityCheck = 100;" \n + "_debugDo = ""CHECK"";" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class pre_dispose + { + name = "pre_dispose"; + itemno = 4; + init = /*%FSM*/"_nrTrgts = _zedPos nearEntities [_trgtArr, 480];" \n + "_canSee = [];" \n + "{" \n + " if !(lineIntersects [eyePos _trgt, eyePos _zombie, _zombie, _trgt]) then{" \n + " _canSee pushBack _x;" \n + " };" \n + "}forEach _nrTrgts;" \n + "if (count _canSee < 1)then{" \n + "deleteVehicle _zombie;" \n + "_t = _t + 480;" \n + "}else{" \n + "_zombie setdamage 1;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait_dispose + { + itemno = 6; + priority = 0.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _t > 480;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset_vars + { + name = "reset_vars"; + itemno = 7; + init = /*%FSM*/"//System Vars" \n + "_t = diag_tickTime;" \n + "_u = _t;" \n + "" \n + "_doLoiter = false;" \n + "_loiterType = 0;" \n + "" \n + "_doMove = false;" \n + "_moving = false;" \n + "_moveCount = 0;" \n + "_attempts = 0;" \n + "" \n + "_doGroan = false;" \n + "" \n + "" \n + "_rnd = 0;" \n + "_sWait = 0;" \n + "_doDispose = false;" \n + "_chooseTarget = false;" \n + "" \n + "_nrTrgts=[];" \n + "_doHide = false;" \n + "" \n + "//Moving" \n + "_moving = false;" \n + "" \n + "//Sight" \n + "//_spottedPos = [0,0,0];" \n + "" \n + "//Safezones" \n + "_inSafe = false;" \n + "" \n + "//Dispose" \n + "" \n + "//FSM" \n + "" \n + "" \n + "//Brain Vars" \n + "_override = false;" \n + "_criteria =""(false)"";" \n + "_criteriaMet = false;" \n + "_criteriaMetAction = nil;" \n + "_allowInterrupt = false;" \n + "_interruptReason = ""(false)"";" \n + "" \n + "_debugDo = ""RESET"";" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = 9; + priority = 200.000000; + to="pre_dispose"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose || !(alive _zombie)"/*%FSM*/; + action=/*%FSM*/"if(_walkHandle < 0)then{" \n + "_walkHandle setFSMVariable [""_callDispose"", true];" \n + "};" \n + "_zombie removeAllEventHandlers ""Hit"";" \n + "_zombie removeAllEventHandlers ""FiredNear"";" \n + "//[] call EPOCH_zombieSpawn;" \n + "" \n + "_t = diag_tickTime;" \n + "" \n + "//systemChat ""Dispose/Respawn"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 1; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class checking_status + { + name = "checking_status"; + itemno = 12; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class done + { + itemno = 15; + priority = 100.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck < 1" \n + ""/*%FSM*/; + action=/*%FSM*/"_debugDo = ""CHECKED"";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class pre_vars___check + { + itemno = 21; + priority = 95.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 95;"/*%FSM*/; + action=/*%FSM*/"//Zed" \n + "_zedPos = getPosATL _zombie;" \n + "_zedSpeed = speed _zombie;" \n + "" \n + "//Target" \n + "_trgtDist = _trgt distance _zombie;" \n + "_trgtPos = getPosATL _trgt;" \n + "_deadTrgts = [];" \n + "" \n + "//Smell" \n + "_smellVect = [0,0,0];" \n + "_smellPos = [0,0,0];" \n + "_canSmellCount = 0;" \n + "" \n + "//Sight" \n + "_canSee = false;" \n + "_visTrgts = [];" \n + "_sightVect = [0,0,0];" \n + "_spottedVect = [0,0,0];" \n + "" \n + "//Attack" \n + "_sight = 0;" \n + "" \n + "" \n + "//Hearing" \n + "_hearVect = [0,0,0];" \n + "" \n + "//Target" \n + "_spottedVect = [0,0,0];" \n + "" \n + "//Wander - Imaginary Target" \n + "_wanderVect = [0,0,0];" \n + "" \n + "_vectTot = [0,0,0];" \n + "_vectDiv = 0;" \n + "" \n + "//EH" \n + "_zFiredNear = _zombie getVariable [""zFiredNear"",[objNull, 0]];" \n + "_shotDist = _zFiredNear select 1;" \n + "" \n + "//Memory" \n + "if(diag_tickTime - _m > _memTime)then{" \n + "_spottedPos = [0,0,0];" \n + "};" \n + "" \n + "//Safe Zones" \n + "" \n + "_restricted = nearestObjects [player, [""ProtectionZone_Invisible_F""], 30];" \n + "if !(_restricted isEqualTo []) then {" \n + "_inSafe = true;" \n + "};" \n + "" \n + "_sanityCheck = 95;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class smell + { + itemno = 13; + priority = 90.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 90 && !_moving && _smellCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_nrstTrgt = objNull;" \n + "//_nrTrgts = _zedPos nearEntities [_trgtArr, _smellDist];" \n + "_nrTrgts = nearestObjects [_zedPos, _trgtArr, _smellDist];" \n + "_avPos = [0,0,0];" \n + "_upwindPos = [0,0,0];" \n + "_smellTrgtPos = [];" \n + "" \n + "{" \n + " if(alive _x)then{" \n + " _upwindPos = [_x, _smellDist, winddir] call BIS_fnc_relPos;" \n + " if(_zombie distance _upwindPos < _smellDist + 1)exitWith{" \n + " _smellTrgtPos = getPosATL _x;" \n + " _canSmellCount =_canSmellCount + 1;" \n + " };" \n + " }else{" \n + " _deadTrgts pushBack _x;" \n + " };" \n + "} forEach _nrTrgts;" \n + "" \n + "" \n + "if(_canSmellCount > 0)then{" \n + "_smellVect = _zedPos vectorDiff _smellTrgtPos;" \n + "_vectDiv = _vectDiv + 1;" \n + "};" \n + "" \n + "" \n + "_sanityCheck = 90;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sight___target + { + itemno = 22; + priority = 85.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 85 && _sightCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"//_nrTrgts = _zedPos nearEntities [_trgtArr, _sightDist];" \n + "_nrTrgts = nearestObjects [_zedPos, _trgtArr, _sightDist];" \n + "_sightPos = [0,0,0];" \n + "_avPos = [0,0,0];" \n + "" \n + "_trgtCount = count _nrTrgts;" \n + "_visTrgts = [];" \n + "" \n + "if(_trgtCount > 0)then{" \n + "" \n + "" \n + "" \n + " {" \n + " _sight = [_zombie, ""VIEW""] checkVisibility [eyePos _zombie,aimPos _x];" \n + " if(alive _x)then{" \n + " if(_sight >= 0.62)then{" \n + " _thisPos = getPosATL _x;" \n + " _relDir = _zombie getRelDir _thisPos;" \n + " if(_relDir < 42 || _relDir > 318)then{" \n + " _visTrgts pushBack _x;" \n + " _avPos = _avPos vectorAdd _thisPos;" \n + " };" \n + " };" \n + " }else{" \n + " _deadTrgts pushBack _x;" \n + " };" \n + " } forEach _nrTrgts;" \n + "" \n + " if(count _visTrgts > 0)then{" \n + " _spottedPos = getPosATL (_visTrgts select 0);" \n + " //_sightVect = _zedPos vectorDiff ([_avPos,_trgtCount,false] call EPOCH_fnc_vectorDivide);" \n + " _sightVect = _zedPos vectorDiff _spottedPos;" \n + " _sightVect = [_sightVect,_sightCoeff] call BIS_fnc_vectorMultiply;" \n + " _vectDiv = _vectDiv + 1;" \n + " _canSee = true;" \n + " }; " \n + "" \n + "};" \n + "_sanityCheck = 85;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class hearing___target + { + itemno = 23; + priority = 80.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 80 && !_moving && (_shotDist > 0 && _shotDist < _hearDist) && _hearCoeff > 0 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_trgt = (_zFiredNear select 0);" \n + "_hearTrgtPos = getPosATL _trgt;" \n + "_hearVect = _zedPos vectorDiff _hearTrgtPos;" \n + "_hearVect = [_hearVect,_hearCoeff] call BIS_fnc_vectorMultiply;" \n + "_vectDiv = _vectDiv + 1;" \n + "_zombie setVariable [""zFiredNear"", nil];" \n + "_sanityCheck = 80;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class do_attack + { + itemno = 8; + priority = 60.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 60 && _sight > 0.6 && _trgtDist < _attackDist && diag_tickTime - _lastAttack > 3 && !_inSafe"/*%FSM*/; + action=/*%FSM*/"_doAttack = true;" \n + "_doScream = true;" \n + "_sanityCheck = 60;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class stuck + { + itemno = 20; + priority = 30.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 30 && _moving && _attempts > 6 && _zedSpeed < 0.4" \n + "" \n + "" \n + ""/*%FSM*/; + action=/*%FSM*/"" \n + " if (!(_moveTo isEqualTo [0,0,0])) then {" \n + "" \n + "// _moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n + " _zombie moveTo _zedPos;" \n + " _attempts = 0;" \n + " //systemChat format[""UnSticking: %1"", diag_tickTime];" \n + " };" \n + "" \n + "_sanityCheck = 30;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class final_checks___r + { + itemno = 14; + priority = 10.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 10;"/*%FSM*/; + action=/*%FSM*/"" \n + "_sAnger =_sAnger min 100 max 0;" \n + "_sFear =_sFear min 100 max 0;" \n + "" \n + "if(_vectDiv > 0)then{" \n + "_vectTot = _smellVect vectorAdd _sightVect vectorAdd _hearVect vectorAdd _spottedVect vectorAdd _wanderVect;" \n + "_moveTo = _zedPos vectorDiff ([_vectTot,_vectDiv,false] call EPOCH_fnc_vectorDivide);" \n + "_doMoan = true;" \n + "//_moveTo = [_moveTo, floor(random 2), floor(random 360)] call BIS_fnc_relPos;" \n + "};" \n + "" \n + "" \n + "if(_zedPos distance _spottedPos < 3)then{" \n + "_spottedPos = [0,0,0];" \n + "};" \n + "" \n + "if(_zombie getVariable [""EPOCH_callGroan"",false])then{_zombie setVariable [""EPOCH_callGroan"",false];_callGroan = true; _doGroan = true;};" \n + "if(_zombie getVariable [""EPOCH_callBoom"",false])then{_zombie setVariable [""EPOCH_callBoom"",false];_callBoom = true; _doBoom = true;};" \n + "" \n + "" \n + "if(_doDebug)then{" \n + "_plyrVel = velocity player;" \n + "_plyrVelSpeed = (_plyrVel select 0) + (_plyrVel select 1);" \n + "_plyRelDir = (player getRelDir _zedPos) - 180; " \n + "hintSilent format [""ZOMBIE (%4)\nStalk: %1 / %2\nDist To Move: %3 | Plyr:%6\nSee: %5 (%20)\nAnger: %7\nFear: %8\nHit: %9\nNear: %10\nSmell: %11\nMoved(ing):%12(%17)\nAttempts: %15\nPlyr Vel: %13\nRDir: %14\nSpeed: %16\nVectors: %18\nFPS: %19"",_minStalkDist,_maxStalkDist,_moveTo distance _zombie,_debugDo, _canSee,_zombie distance _trgt,_sAnger,_sFear,_sHit,_zFiredNear,_canSmellCount,moveToCompleted _zombie, _plyrVelSpeed,_plyRelDir,_attempts,_zedSpeed,_moving,_vectDiv,diag_FPS,_sight];" \n + "[_zombie,_zedPos,wind,""Sign_Arrow_Direction_Pink_F""] call EPOCH_fncHordeMemberVelPointer;" \n + "[""target"",0.8,_moveTo]call EPOCH_fnc_DebugMarker;" \n + "[""zed"",0.8,_zedPos]call EPOCH_fnc_DebugMarker;" \n + "};" \n + "" \n + "_sHit = [objNull, 0];" \n + "_zFiredNear = [objNull, 0];" \n + "_sanityCheck = 0;" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 18; + init = /*%FSM*/"if (!isNull _zombie) then {" \n + "deleteVehicle _zombie;//Move to cleanup" \n + "};" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class spin + { + name = "spin"; + itemno = 24; + init = /*%FSM*/"_t = diag_tickTime;" \n + "_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait + { + itemno = 25; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _t > 0.6;"/*%FSM*/; + action=/*%FSM*/"[_zombie,_trgt] call EPOCH_client_bitePlayer;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ____FAKE____ + { + name = "____FAKE____"; + itemno = 27; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class imaginary_target + { + itemno = 10; + priority = 70.000000; + to="checking_status"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_sanityCheck > 70 && _vectDiv < 1"/*%FSM*/; + action=/*%FSM*/"_rndPos = [_zedPos, random 360, ((random 4) max 1)] call BIS_fnc_relPos;" \n + "_wanderVect = _zedPos vectorDiff _rndPos;" \n + "_vectDiv = _vectDiv + 1;" \n + "_sanityCheck = 70;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="brainz"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/Sources/epoch_code/System/EPOCH_zombie_walking.fsm b/Sources/epoch_code/System/EPOCH_zombie_walking.fsm new file mode 100644 index 00000000..76dd1ca0 --- /dev/null +++ b/Sources/epoch_code/System/EPOCH_zombie_walking.fsm @@ -0,0 +1,294 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"zombie",0,250,-100.000000,-250.000000,0.000000,-200.000000,0.000000,"zombie"}; +item1[] = {"instinct",2,250,150.000000,-175.000000,250.000000,-125.000000,0.000000,"instinct"}; +item2[] = {"action",2,250,150.000000,-25.000000,250.000000,25.000000,0.000000,"action"}; +item3[] = {"dispose",4,218,150.000000,-250.000000,250.000000,-200.000000,90.000000,"dispose"}; +item4[] = {"_",8,218,150.000000,75.000000,250.000000,125.000000,0.000000,""}; +item5[] = {"reset___control",2,250,-100.000000,-100.000000,0.000000,-50.000000,0.000000,"reset / control"}; +item6[] = {"_",8,218,-100.000000,-175.000000,0.000000,-125.000000,0.000000,""}; +item7[] = {"complete",4,218,-100.000000,-25.000000,0.000000,25.000000,100.000000,"complete"}; +item8[] = {"end",1,4346,-100.000000,75.000000,0.000000,125.000000,0.000000,"end"}; +item9[] = {"dispose",4,218,25.000000,75.000000,125.000000,125.000000,120.000000,"dispose"}; +item10[] = {"instinct_done",4,218,150.000000,-100.000000,250.000000,-50.000000,100.000000,"instinct done"}; +item11[] = {"move",4,218,300.000000,-175.000000,400.000000,-125.000000,60.000000,"move"}; +item12[] = {"_",8,218,25.000000,-175.000000,125.000000,-125.000000,0.000000,""}; +item13[] = {"move",4,218,300.000000,-25.000000,400.000000,25.000000,10.000000,"move"}; +item14[] = {"do_move",2,250,300.000000,75.000000,400.000000,125.000000,0.000000,"do move"}; +link0[] = {0,6}; +link1[] = {1,3}; +link2[] = {1,10}; +link3[] = {1,11}; +link4[] = {2,7}; +link5[] = {2,9}; +link6[] = {2,13}; +link7[] = {3,1}; +link8[] = {4,2}; +link9[] = {5,12}; +link10[] = {6,5}; +link11[] = {7,5}; +link12[] = {9,8}; +link13[] = {10,2}; +link14[] = {11,1}; +link15[] = {12,1}; +link16[] = {13,14}; +link17[] = {14,4}; +globals[] = {25.000000,0,0,0,0,640,480,1,246,6316128,1,-246.574387,523.779114,344.046051,-352.794586,1006,910,1}; +window[] = {2,-1,-1,-1,-1,793,389,1414,268,3,1024}; +*//*%FSM*/ +class FSM +{ + fsmName = "zombie walking"; + class States + { + /*%FSM*/ + class zombie + { + name = "zombie"; + itemno = ; + init = /*%FSM*/"//Developer code" \n + "//Author: axeman (Andrew Gregory | andrew@andgregor.co.uk)" \n + "//Licence:" \n + "//You may not copy, reproduce, edit, move or transfer in any way without the express permission of the author." \n + "//All files contained in this MPMission folder also fall under the Epoch Mod Creative Commons Licence: https://creativecommons.org/licenses/by-nc-nd/4.0/" \n + "//Any files triggered, called, execVM'ed, execFSM'ed etc, by this file fall under the same agreement." \n + "" \n + "//systemChat ""INIT WALKING"";" \n + "_unit = _this select 0;" \n + "" \n + "_moveTo = [];" \n + "_nextPos = [];" \n + "" \n + "_callDispose = false;" \n + "_doDispose = false;" \n + "_decisionMade = false;" \n + "_t = diag_tickTime;" \n + "_c = diag_tickTime;" \n + "_sFreqCheck = 1.5;" \n + "_lFreqCheck = 12;" \n + "_doneCheck = false;" \n + "" \n + "//Debug" \n + "_showDebug = {" \n + "hint format [""SAPPER\nAnger: %2\nCanSee: %3\nTarget: %4\nHit: %5\nNear: %6FPS:%1"",diag_fps,_sAnger,_canSee,_trgt,_sHit,_sFiredNear];" \n + "};" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = ; + priority = 0.000000; + to="reset___control"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class instinct + { + name = "instinct"; + itemno = ; + init = /*%FSM*/"//systemchat format [""WI:%1"",diag_tickTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class instinct_done + { + itemno = ; + priority = 100.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_decisionMade;"/*%FSM*/; + action=/*%FSM*/"_decisionMade = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose + { + itemno = ; + priority = 90.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _unit || _callDispose;"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;" \n + "_decisionMade = true;" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = ; + priority = 60.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_moveTo isEqualTo _nextPos)"/*%FSM*/; + action=/*%FSM*/"_doMove = true;" \n + "_decisionMade = true;" \n + "_moveTo = [] + _nextPos;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class action + { + name = "action"; + itemno = ; + init = /*%FSM*/"//systemchat format [""WA:%1"",diag_tickTime];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class dispose + { + itemno = ; + priority = 120.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class complete + { + itemno = ; + priority = 100.000000; + to="reset___control"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_actionDone && ((call compile _criteria) || (diag_tickTime > (_t + _sWait)));"/*%FSM*/; + action=/*%FSM*/"" \n + "if(!isNil ""_criteriaMetAction"")then{" \n + "call _criteriaMetAction;" \n + "};" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class move + { + itemno = ; + priority = 10.000000; + to="do_move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doMove;" \n + ""/*%FSM*/; + action=/*%FSM*/"_doMove = false;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset___control + { + name = "reset___control"; + itemno = ; + init = /*%FSM*/"//Brain Vars" \n + "_criteria =""(false)"";" \n + "_criteriaMetAction = nil;" \n + "_actionDone = false;" \n + "_sWait = 0;" \n + "" \n + "_newTrgt = false;" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = ; + priority = 0.000000; + to="instinct"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = ; + init = /*%FSM*/"//systemchat format[""Walk Disposing for %1"",_unit];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class do_move + { + name = "do_move"; + itemno = ; + init = /*%FSM*/"_unit moveTo _moveTo;" \n + "" \n + "" \n + "_actionDone = true;" \n + "_criteria = ""moveToCompleted _unit || _newTrgt"";" \n + "_sWait = (_unit distance _moveTo) * 2;" \n + "" \n + "if(axeDebug)then{" \n + "[_unit, _moveTo, ""Sign_Arrow_F""] call EPOCH_fnc_debugArrow;" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = ; + priority = 0.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="zombie"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ diff --git a/Sources/epoch_code/System/player_login.fsm b/Sources/epoch_code/System/player_login.fsm index 3c08596f..40eb0198 100644 --- a/Sources/epoch_code/System/player_login.fsm +++ b/Sources/epoch_code/System/player_login.fsm @@ -1,8 +1,8 @@ -/*%FSM*/ +/*%FSM*/ /*%FSM*/ /* -item0[] = {"INIT",0,4346,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"}; -item1[] = {"FINISH",1,250,-25.000000,1475.000000,75.000000,1525.000000,0.000000,"FINISH"}; +item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"}; +item1[] = {"FINISH",1,4346,-25.000000,1475.000000,75.000000,1525.000000,0.000000,"FINISH"}; item2[] = {"true",8,218,-150.000000,-125.000000,-50.000000,-75.000000,0.000000,"true"}; item3[] = {"Version_Check",2,250,-25.000000,-75.000000,75.000000,-25.000000,0.000000,"Version Check"}; item4[] = {"Player_Object_Re",4,218,-150.000000,75.000000,-50.000000,125.000000,0.000000,"Player" \n "Object Ready"}; @@ -183,1171 +183,1256 @@ link93[] = {82,76}; link94[] = {83,16}; link95[] = {83,22}; link96[] = {84,31}; -globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-328.063843,350.313202,140.961456,-412.815704,813,880,1}; -window[] = {2,-1,-1,-1,-1,897,-1550,-566,130,3,831}; +globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-534.004700,883.834412,1895.573975,986.017029,1287,884,1}; +window[] = {2,-1,-1,-32000,-32000,1149,2931,3915,382,3,1305}; *//*%FSM*/ class FSM { - fsmName = "Epoch Login"; - class States - { - /*%FSM*/ - class INIT - { - name = "INIT"; - init = /*%FSM*/"titleCut ["""", ""BLACK FADED"", 1337];" \n - "0 fadeSound 0;" \n - "//player enableSimulation false;" \n - "" \n - "_debug = true;" \n - "_myTime = diag_tickTime;" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Init"";" \n - "};" \n - "" \n - "_finalPlayerObjectCheck = {" \n - " (_mass == (loadAbs _playerObject))" \n - "};" \n - "" \n - "EPOCH_loginFSM = _thisFSM;" \n - "EPOCH_playerLoginInit = {" \n - " EPOCH_loginFSM setFSMVariable [_this select 0, _this select 1];" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true + fsmName = "Epoch Login"; + class States { - priority = 0.000000; - to="Process_1"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; + /*%FSM*/ + class INIT + { + name = "INIT"; + itemno = 0; + init = /*%FSM*/"titleCut ["""", ""BLACK FADED"", 1337];" \n + "0 fadeSound 0;" \n + "//player enableSimulation false;" \n + "" \n + "_debug = true;" \n + "_myTime = diag_tickTime;" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Init"";" \n + "};" \n + "" \n + "_finalPlayerObjectCheck = {" \n + " (_mass == (loadAbs _playerObject))" \n + "};" \n + "" \n + "EPOCH_loginFSM = _thisFSM;" \n + "EPOCH_playerLoginInit = {" \n + " EPOCH_loginFSM setFSMVariable [_this select 0, _this select 1];" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 62; + priority = 0.000000; + to="Process_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class FINISH + { + name = "FINISH"; + itemno = 1; + init = /*%FSM*/"[] spawn {" \n + " disableSerialization;" \n + " waitUntil{!isNull (findDisplay 46)};" \n + " _display = findDisplay 46;" \n + " {" \n + " _display displayAddEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n + " } forEach ([""CfgEpochClient"", ""displayAddEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n + " call epoch_dynamicHUD_start; " \n + " player switchMove """";" \n + "};" \n + "" \n + "3 fadeSound 1;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Finish!"";" \n + "};" \n + "" \n + "EPOCH_loginFSM = nil;" \n + "EPOCH_playerLoginInit = nil;" \n + "" \n + "//player enableSimulation true;" \n + "" \n + "titleCut ["""", ""BLACK IN"", 1];" \n + "1338 cutText ["""",""PLAIN"",0]; " \n + "" \n + "progressLoadingScreen 1.0;" \n + "" \n + "endLoadingScreen;" \n + "EPOCH_loadingScreenDone = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Version_Check + { + name = "Version_Check"; + itemno = 3; + init = /*%FSM*/"if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Version Check"";" \n + "};" \n + "" \n + "// SHOULD BE:" \n + "_epoch_assets0 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets"");" \n + "_epoch_assets1 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_1"");" \n + "_epoch_assets2 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""epoch_objects"");" \n + "_epoch_assets3 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_3"");" \n + "_epoch_config = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_config"");" \n + "_epoch_language = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_language"");" \n + "_epoch_underground = getText(configFile >> ""Epoch"" >> ""Version"" >> ""Underground_Epoch"");" \n + "_epoch_vehicles = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_vehicles"");" \n + "_epoch_weapons = getText(configFile >> ""Epoch"" >> ""Version"" >> ""a3_epoch_weapons"");" \n + "" \n + "" \n + "// IS:" \n + "_my_epoch_assets0 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets"" >> ""epochVersion"");" \n + "_my_epoch_assets1 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_1"" >> ""epochVersion"");" \n + "_my_epoch_assets2 = getText(configFile >> ""CfgPatches"" >> ""epoch_objects"" >> ""epochVersion"");" \n + "_my_epoch_assets3 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_3"" >> ""epochVersion"");" \n + "_my_epoch_config = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_config"" >> ""epochVersion"");" \n + "_my_epoch_language = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_language"" >> ""epochVersion"");" \n + "_my_epoch_underground = getText(configFile >> ""CfgPatches"" >> ""Underground_Epoch"" >> ""epochVersion"");" \n + "_my_epoch_vehicles = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_vehicles"" >> ""epochVersion"");" \n + "_my_epoch_weapons = getText(configFile >> ""CfgPatches"" >> ""a3_epoch_weapons"" >> ""epochVersion"");" \n + "" \n + "progressLoadingScreen 0.1;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wrong_Version + { + itemno = 7; + priority = 10.000000; + to="ERROR_Wrong_Version"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_epoch_assets0 != _epoch_assets0 ||" \n + "_my_epoch_assets1 != _epoch_assets1 ||" \n + "_my_epoch_assets2 != _epoch_assets2 ||" \n + "_my_epoch_assets3 != _epoch_assets3 ||" \n + "_my_epoch_config != _epoch_config ||" \n + "_my_epoch_language != _epoch_language ||" \n + "_my_epoch_underground != _epoch_underground ||" \n + "_my_epoch_vehicles != _epoch_vehicles ||" \n + "_my_epoch_weapons != _epoch_weapons"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class true + { + itemno = 44; + priority = 0.000000; + to="Arma_Version_Che"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Player_UID + { + name = "Check_Player_UID"; + itemno = 5; + init = /*%FSM*/"if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Check PlayerUID"";" \n + "};" \n + "" \n + "_playerUID = getPlayerUID player;" \n + "" \n + "progressLoadingScreen 0.2;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class PlayerUID_Okay + { + itemno = 6; + priority = 10.000000; + to="Check_Server_1"; + precondition = /*%FSM*/"!isNil ""_playerUID"""/*%FSM*/; + condition=/*%FSM*/"_playerUID != """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Empty_PlayerUID + { + itemno = 12; + priority = 0.000000; + to="ERROR_PlayerUID"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Wrong_Version + { + name = "ERROR_Wrong_Version"; + itemno = 9; + init = /*%FSM*/"_msg = ""You have an outdated version of Epoch"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_EPOCHVERSION = true;" \n + " publicVariableServer ""PLAYER_REJECT_EPOCHVERSION"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Disconnect + { + name = "Disconnect"; + itemno = 10; + init = /*%FSM*/"endLoadingScreen;" \n + "1338 cutText [_msg,""PLAIN"",0]; " \n + "deleteVehicle player;" \n + "call _rejectPlayer;" \n + "_myTime = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Check_if_Player + { + itemno = 28; + priority = 0.000000; + to="Reject_without_B"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 2"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_PlayerUID + { + name = "ERROR_PlayerUID"; + itemno = 13; + init = /*%FSM*/"_msg = ""Can not setup Player Object! (Error 01)"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_UID = true;" \n + " publicVariableServer ""PLAYER_REJECT_UID"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Setup_Player_Var + { + name = "Setup_Player_Var"; + itemno = 17; + init = /*%FSM*/"diag_log format[""DEBUG TIME WAITED: %1"", (diag_tickTime - _myTime)];" \n + "{" \n + " missionNamespace setVariable[(format[""EPOCH_player%1"", EPOCH_customVars select _forEachIndex]), _x];" \n + "} forEach _playerVariables;" \n + """Loading Player Variables... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.7;" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup Player Variables"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 24; + priority = 0.000000; + to="Setup_EH_s_and_H"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Request_Hive + { + name = "Request_Hive"; + itemno = 18; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "" \n + "[player] remoteExec [""EPOCH_server_checkPlayer"",2];" \n + "" \n + """Loading Player Data... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.5;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Hive_Response + { + itemno = 75; + priority = 0.000000; + to="Process_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""_checkPlayer_PVC"""/*%FSM*/; + action=/*%FSM*/"_newChar = _checkPlayer_PVC;" \n + "_checkPlayer_PVC = nil;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 19; + priority = 0.000000; + to="ERROR_Server_not_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not + { + name = "ERROR_Server_not"; + itemno = 20; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NoResponse2 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NoResponse2"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Wrong_Server + { + name = "ERROR_Wrong_Server"; + itemno = 25; + init = /*%FSM*/"_msg = format[""Server and Client running with different Version! (You: %1 // Server: %2)"",getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version""),_serverVersion];" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_ServerVersion = true;" \n + " publicVariableServer ""PLAYER_REJECT_ServerVersion"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Setup_Player_Obj + { + name = "Setup_Player_Obj"; + itemno = 27; + init = /*%FSM*/"_ply = player;" \n + "_group = group player;" \n + "" \n + "selectPlayer _playerObject;" \n + "" \n + "deleteVehicle _ply;" \n + "deleteGroup _group;" \n + "" \n + """Loading Player Body... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.8;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup Player Object"";" \n + "};" \n + "" \n + "_myTime = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_ + { + itemno = 66; + priority = 0.000000; + to="ERROR_Player_Setup"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 60"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class new_player_____p + { + itemno = 49; + priority = 0.000000; + to="Setup_Player_Var"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_playerObject == player"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Display_Message + { + name = "Display_Message"; + itemno = 33; + init = /*%FSM*/"[] spawn {" \n + " waitUntil{!isNull (findDisplay 46)};" \n + " (findDisplay 46) displayAddEventHandler [""KeyDown"",""true""];" \n + " (findDisplay 46) displayAddEventHandler [""KeyUp"",""true""];" \n + "};" \n + "_myTime = diag_tickTime;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Display_Message + { + itemno = 26; + priority = 0.000000; + to="Disconnect"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Server + { + name = "Check_Server"; + itemno = 35; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Check Server"";" \n + "};" \n + """Checking Server... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.4;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Server_not_worki + { + itemno = 36; + priority = 10.000000; + to="ERROR_Server_not_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_BADHIVE""" \n + ""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Okay + { + itemno = 11; + priority = 0.000000; + to="Server_Version_C"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""Epoch_ServerVersion"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_1 + { + name = "ERROR_Server_not_1"; + itemno = 37; + init = /*%FSM*/"_msg = ""Server not Ready (Error 03)"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NotReady2 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NotReady2"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Server_1 + { + name = "Check_Server_1"; + itemno = 39; + init = /*%FSM*/"progressLoadingScreen 0.3;" \n + """Server initializing... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 40; + priority = 0.000000; + to="ERROR_Server_not_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 180"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Ready + { + itemno = 34; + priority = 0.000000; + to="Check_Server"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_SERVER_READY"""/*%FSM*/; + action=/*%FSM*/"EPOCH_SERVER_READY = nil;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_2 + { + name = "ERROR_Server_not_2"; + itemno = 41; + init = /*%FSM*/"_msg = ""Server not Ready (Error 02)"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_NotReady1 = true;" \n + " publicVariableServer ""PLAYER_REJECT_NotReady1"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Reject_without_B + { + name = "Reject_without_B"; + itemno = 43; + init = /*%FSM*/"[] spawn {" \n + " waitUntil{!isNull (findDisplay 46)};" \n + " waitUntil {" \n + " (findDisplay 46) closeDisplay 0;" \n + " isNull (findDisplay 46)" \n + " };" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Arma_Version_Che + { + name = "Arma_Version_Che"; + itemno = 45; + init = /*%FSM*/"progressLoadingScreen 0.15;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Outdated_Version + { + itemno = 46; + priority = 10.000000; + to="ERROR_Wrong_Version_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"productVersion select 2 < getNumber(configFile >> ""CfgMods"" >> ""Epoch"" >> ""ArmAVersion"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Player_Object_Re + { + itemno = 4; + priority = 0.000000; + to="Check_Player_UID"; + precondition = /*%FSM*/"!isNull player"/*%FSM*/; + condition=/*%FSM*/"player == player"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Wrong_Version_1 + { + name = "ERROR_Wrong_Version_1"; + itemno = 47; + init = /*%FSM*/"_msg = ""You have an outdated version of ArmA 3"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_ARMAVERSION = true;" \n + " publicVariableServer ""PLAYER_REJECT_ARMAVERSION"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Setup_EH_s_and_H + { + name = "Setup_EH_s_and_H"; + itemno = 50; + init = /*%FSM*/"{" \n + " player addEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n + "} forEach ([""CfgEpochClient"", ""addEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n + "" \n + "if (count EPOCH_playerHitPoints isEqualTo count ((getAllHitPointsDamage player) param [0,[]])) then {" \n + " {" \n + " player setHitIndex [_forEachIndex, _x];" \n + " }forEach EPOCH_playerHitPoints;" \n + "};" \n + "" \n + "[] spawn EPOCH_masterLoop;" \n + "true call EPOCH_fnc_Weather;" \n + "[5,100] spawn EPOCH_niteLight;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup EH's"";" \n + "};" \n + "" \n + """Loading... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.9;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Has_Current_Weap + { + itemno = 53; + priority = 10.000000; + to="Find_Active_Weap"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_currentWeapon != """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class no_weapons + { + itemno = 51; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_currentWeapon == """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process + { + name = "Process"; + itemno = 52; + init = /*%FSM*/"progressLoadingScreen 0.975;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Preload_done + { + itemno = 29; + priority = 0.000000; + to="FINISH"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"preloadCamera _playerPos"/*%FSM*/; + action=/*%FSM*/"call compile _extraPayload;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Find_Active_Weap + { + name = "Find_Active_Weap"; + itemno = 54; + init = /*%FSM*/"_activeWeapon = currentWeapon player;" \n + "progressLoadingScreen 0.95;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Current_Weapon_S + { + itemno = 56; + priority = 0.000000; + to="Do_nothing"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_activeWeapon == _currentWeapon"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Current_Weapon_Not + { + itemno = 55; + priority = 0.000000; + to="Select_Weapon"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_activeWeapon != _currentWeapon"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Select_Weapon + { + name = "Select_Weapon"; + itemno = 57; + init = /*%FSM*/"_currentWeapon spawn {" \n + " uiSleep 1; " \n + " player selectWeapon _this;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 58; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Do_nothing + { + name = "Do_nothing"; + itemno = 59; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 58; + priority = 0.000000; + to="Process"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Check_New_Player + { + name = "Check_New_Player"; + itemno = 60; + init = /*%FSM*/"_myTime = diag_tickTime;" \n + "" \n + "player reveal _playerObject;" \n + "" \n + "_playerPos = getpos _playerObject;" \n + "" \n + "" \n + """Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.6;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class check_new__player + { + itemno = 61; + priority = 0.000000; + to="Setup_Player_Obj"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(isNull _playerObject) && {_playerObject getVariable [""SETUP"",false]} && {_playerPos nearObjectsReady 10} && {call _finalPlayerObjectCheck}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 15; + priority = 0.000000; + to="ERROR_Server_not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process_1 + { + name = "Process_1"; + itemno = 63; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait_ArmA_Loading + { + itemno = 64; + priority = 0.000000; + to="Start_Loading_Sc"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(call BIS_fnc_isLoading)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Start_Loading_Sc + { + name = "Start_Loading_Sc"; + itemno = 65; + init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Start Loadingscreen"";" \n + "};" \n + """Starting Epoch... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 2; + priority = 0.000000; + to="Version_Check"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Player_Setup + { + name = "ERROR_Player_Setup"; + itemno = 67; + init = /*%FSM*/"_msg = ""Problem setting up player"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_InvaildSetup = true;" \n + " publicVariableServer ""PLAYER_REJECT_InvaildSetup"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Server_Version_C + { + name = "Server_Version_C"; + itemno = 69; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wrong_Server_Ver + { + itemno = 23; + priority = 10.000000; + to="ERROR_Wrong_Server"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"Epoch_ServerVersion != getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Version_Okay + { + itemno = 70; + priority = 0.000000; + to="Request_Hive"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_3 + { + name = "ERROR_Server_not_3"; + itemno = 72; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_HiveNotResponse = true;" \n + " publicVariableServer ""PLAYER_REJECT_HiveNotResponse"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process_2 + { + name = "Process_2"; + itemno = 77; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class new_character + { + itemno = 74; + priority = 10.000000; + to="Open_Gender_Selection"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_newChar"/*%FSM*/; + action=/*%FSM*/"endLoadingScreen;" \n + "_myGenderTime = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class load_old_charact + { + itemno = 76; + priority = 0.000000; + to="Process_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Open_Gender_Selection + { + name = "Open_Gender_Selection"; + itemno = 78; + init = /*%FSM*/"createdialog ""SelectGender"";"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Gender_Selected + { + itemno = 80; + priority = 10.000000; + to="Send_character_s"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout + { + itemno = 81; + priority = 0.000000; + to="Send_character_s"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _myGenderTime) > 30)"/*%FSM*/; + action=/*%FSM*/"EPOCH_PlayerIsMale = true;" \n + "closeDialog 0;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Reopen_when_client + { + itemno = 79; + priority = 0.000000; + to="Open_Gender_Selection"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!dialog && isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Send_character_s + { + name = "Send_character_s"; + itemno = 82; + init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n + """Gender Selected... Please wait!"" call Epoch_updateLoadingScreen;" \n + "" \n + "[player,EPOCH_PlayerIsMale] remoteExec [""EPOCH_server_loadPlayer"",2];" \n + "EPOCH_PlayerIsMale = nil;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class load_old_charact + { + itemno = 76; + priority = 0.000000; + to="Process_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Process_3 + { + name = "Process_3"; + itemno = 83; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout_No_Respo + { + itemno = 22; + priority = 0.000000; + to="ERROR_Server_not_4"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Response + { + itemno = 16; + priority = 0.000000; + to="Check_New_Player"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""_C_SET"""/*%FSM*/; + action=/*%FSM*/"_playerObject = _C_SET deleteAt 0;" \n + "_playerVariables = _C_SET deleteAt 0;" \n + "_currentWeapon = _C_SET deleteAt 0;" \n + "_mass = _C_SET deleteAt 0;" \n + "" \n + "Epoch_my_GroupUID = _C_SET deleteAt 0;" \n + "Epoch_canBeRevived = _C_SET deleteAt 0;" \n + "Epoch_personalToken = _C_SET deleteAt 0;" \n + "Epoch_my_Group = _C_SET deleteAt 0;" \n + "" \n + "_extraPayload = _C_SET deleteAt 0;" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_4 + { + name = "ERROR_Server_not_4"; + itemno = 84; + init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n + "_msg call Epoch_updateLoadingScreen;" \n + "diag_log _msg;" \n + "" \n + "_rejectPlayer = {" \n + " PLAYER_REJECT_HiveLoadChar = true;" \n + " publicVariableServer ""PLAYER_REJECT_HiveLoadChar"";" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 32; + priority = 0.000000; + to="Display_Message"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class FINISH - { - name = "FINISH"; - init = /*%FSM*/"[] spawn {" \n - " disableSerialization;" \n - " waitUntil{!isNull (findDisplay 46)};" \n - " _display = findDisplay 46;" \n - " {" \n - " _display displayAddEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n - " } forEach ([""CfgEpochClient"", ""displayAddEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n - " " \n - " player switchMove """";" \n - "};" \n - "" \n - "3 fadeSound 1;" \n - "" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Finish!"";" \n - "};" \n - "" \n - "EPOCH_loginFSM = nil;" \n - "EPOCH_playerLoginInit = nil;" \n - "" \n - "//player enableSimulation true;" \n - "" \n - "titleCut ["""", ""BLACK IN"", 1];" \n - "1338 cutText ["""",""PLAIN"",0]; " \n - "" \n - "progressLoadingScreen 1.0;" \n - "" \n - "endLoadingScreen;" \n - "EPOCH_loadingScreenDone = true;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - }; - }; - /*%FSM*/ - /*%FSM*/ - class Version_Check - { - name = "Version_Check"; - init = /*%FSM*/"if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Version Check"";" \n - "};" \n - "" \n - "// SHOULD BE:" \n - "_epoch_assets0 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets"");" \n - "_epoch_assets1 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_1"");" \n - "_epoch_assets2 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""epoch_objects"");" \n - "_epoch_assets3 = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_assets_3"");" \n - "_epoch_config = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_config"");" \n - "_epoch_language = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_language"");" \n - "_epoch_underground = getText(configFile >> ""Epoch"" >> ""Version"" >> ""Underground_Epoch"");" \n - "_epoch_vehicles = getText(configFile >> ""Epoch"" >> ""Version"" >> ""A3_epoch_vehicles"");" \n - "_epoch_weapons = getText(configFile >> ""Epoch"" >> ""Version"" >> ""a3_epoch_weapons"");" \n - "" \n - "" \n - "// IS:" \n - "_my_epoch_assets0 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets"" >> ""epochVersion"");" \n - "_my_epoch_assets1 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_1"" >> ""epochVersion"");" \n - "_my_epoch_assets2 = getText(configFile >> ""CfgPatches"" >> ""epoch_objects"" >> ""epochVersion"");" \n - "_my_epoch_assets3 = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_assets_3"" >> ""epochVersion"");" \n - "_my_epoch_config = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_config"" >> ""epochVersion"");" \n - "_my_epoch_language = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_language"" >> ""epochVersion"");" \n - "_my_epoch_underground = getText(configFile >> ""CfgPatches"" >> ""Underground_Epoch"" >> ""epochVersion"");" \n - "_my_epoch_vehicles = getText(configFile >> ""CfgPatches"" >> ""A3_epoch_vehicles"" >> ""epochVersion"");" \n - "_my_epoch_weapons = getText(configFile >> ""CfgPatches"" >> ""a3_epoch_weapons"" >> ""epochVersion"");" \n - "" \n - "progressLoadingScreen 0.1;" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Wrong_Version + initState="INIT"; + finalStates[] = { - priority = 10.000000; - to="ERROR_Wrong_Version"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_epoch_assets0 != _epoch_assets0 ||" \n - "_my_epoch_assets1 != _epoch_assets1 ||" \n - "_my_epoch_assets2 != _epoch_assets2 ||" \n - "_my_epoch_assets3 != _epoch_assets3 ||" \n - "_my_epoch_config != _epoch_config ||" \n - "_my_epoch_language != _epoch_language ||" \n - "_my_epoch_underground != _epoch_underground ||" \n - "_my_epoch_vehicles != _epoch_vehicles ||" \n - "_my_epoch_weapons != _epoch_weapons"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; + "FINISH", + "Reject_without_B", }; - /*%FSM*/ - /*%FSM*/ - class true - { - priority = 0.000000; - to="Arma_Version_Che"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Check_Player_UID - { - name = "Check_Player_UID"; - init = /*%FSM*/"if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Check PlayerUID"";" \n - "};" \n - "" \n - "_playerUID = getPlayerUID player;" \n - "" \n - "progressLoadingScreen 0.2;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class PlayerUID_Okay - { - priority = 10.000000; - to="Check_Server_1"; - precondition = /*%FSM*/"!isNil ""_playerUID"""/*%FSM*/; - condition=/*%FSM*/"_playerUID != """""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Empty_PlayerUID - { - priority = 0.000000; - to="ERROR_PlayerUID"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Wrong_Version - { - name = "ERROR_Wrong_Version"; - init = /*%FSM*/"_msg = ""You have an outdated version of Epoch"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_EPOCHVERSION = true;" \n - " publicVariableServer ""PLAYER_REJECT_EPOCHVERSION"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Disconnect - { - name = "Disconnect"; - init = /*%FSM*/"endLoadingScreen;" \n - "1338 cutText [_msg,""PLAIN"",0]; " \n - "deleteVehicle player;" \n - "call _rejectPlayer;" \n - "_myTime = diag_tickTime;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Check_if_Player - { - priority = 0.000000; - to="Reject_without_B"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 2"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_PlayerUID - { - name = "ERROR_PlayerUID"; - init = /*%FSM*/"_msg = ""Can not setup Player Object! (Error 01)"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_UID = true;" \n - " publicVariableServer ""PLAYER_REJECT_UID"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Setup_Player_Var - { - name = "Setup_Player_Var"; - init = /*%FSM*/"diag_log format[""DEBUG TIME WAITED: %1"", (diag_tickTime - _myTime)];" \n - "{" \n - " missionNamespace setVariable[(format[""EPOCH_player%1"", EPOCH_customVars select _forEachIndex]), _x];" \n - "} forEach _playerVariables;" \n - """Loading Player Variables... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.7;" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Setup Player Variables"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Setup_EH_s_and_H"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Request_Hive - { - name = "Request_Hive"; - init = /*%FSM*/"_myTime = diag_tickTime;" \n - "" \n - "[player] remoteExec [""EPOCH_server_checkPlayer"",2];" \n - "" \n - """Loading Player Data... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.5;" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Hive_Response - { - priority = 0.000000; - to="Process_2"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""_checkPlayer_PVC"""/*%FSM*/; - action=/*%FSM*/"_newChar = _checkPlayer_PVC;" \n - "_checkPlayer_PVC = nil;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Timeout_No_Respo - { - priority = 0.000000; - to="ERROR_Server_not_3"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Server_not - { - name = "ERROR_Server_not"; - init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_NoResponse2 = true;" \n - " publicVariableServer ""PLAYER_REJECT_NoResponse2"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Wrong_Server - { - name = "ERROR_Wrong_Server"; - init = /*%FSM*/"_msg = format[""Server and Client running with different Version! (You: %1 // Server: %2)"",getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version""),_serverVersion];" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_ServerVersion = true;" \n - " publicVariableServer ""PLAYER_REJECT_ServerVersion"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Setup_Player_Obj - { - name = "Setup_Player_Obj"; - init = /*%FSM*/"_ply = player;" \n - "_group = group player;" \n - "" \n - "selectPlayer _playerObject;" \n - "" \n - "deleteVehicle _ply;" \n - "deleteGroup _group;" \n - "" \n - """Loading Player Body... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.8;" \n - "" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Setup Player Object"";" \n - "};" \n - "" \n - "_myTime = diag_tickTime;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Timeout_ - { - priority = 0.000000; - to="ERROR_Player_Setup"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 60"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class new_player_____p - { - priority = 0.000000; - to="Setup_Player_Var"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_playerObject == player"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Display_Message - { - name = "Display_Message"; - init = /*%FSM*/"[] spawn {" \n - " waitUntil{!isNull (findDisplay 46)};" \n - " (findDisplay 46) displayAddEventHandler [""KeyDown"",""true""];" \n - " (findDisplay 46) displayAddEventHandler [""KeyUp"",""true""];" \n - "};" \n - "_myTime = diag_tickTime;" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Display_Message - { - priority = 0.000000; - to="Disconnect"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 10"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Check_Server - { - name = "Check_Server"; - init = /*%FSM*/"_myTime = diag_tickTime;" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Check Server"";" \n - "};" \n - """Checking Server... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.4;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Server_not_worki - { - priority = 10.000000; - to="ERROR_Server_not_1"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""EPOCH_BADHIVE""" \n - ""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Server_Okay - { - priority = 0.000000; - to="Server_Version_C"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""Epoch_ServerVersion"""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Server_not_1 - { - name = "ERROR_Server_not_1"; - init = /*%FSM*/"_msg = ""Server not Ready (Error 03)"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_NotReady2 = true;" \n - " publicVariableServer ""PLAYER_REJECT_NotReady2"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Check_Server_1 - { - name = "Check_Server_1"; - init = /*%FSM*/"progressLoadingScreen 0.3;" \n - """Server initializing... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Timeout_No_Respo - { - priority = 0.000000; - to="ERROR_Server_not_2"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 180"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Server_Ready - { - priority = 0.000000; - to="Check_Server"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""EPOCH_SERVER_READY"""/*%FSM*/; - action=/*%FSM*/"EPOCH_SERVER_READY = nil;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Server_not_2 - { - name = "ERROR_Server_not_2"; - init = /*%FSM*/"_msg = ""Server not Ready (Error 02)"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_NotReady1 = true;" \n - " publicVariableServer ""PLAYER_REJECT_NotReady1"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Reject_without_B - { - name = "Reject_without_B"; - init = /*%FSM*/"[] spawn {" \n - " waitUntil{!isNull (findDisplay 46)};" \n - " waitUntil {" \n - " (findDisplay 46) closeDisplay 0;" \n - " isNull (findDisplay 46)" \n - " };" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - }; - }; - /*%FSM*/ - /*%FSM*/ - class Arma_Version_Che - { - name = "Arma_Version_Che"; - init = /*%FSM*/"progressLoadingScreen 0.15;" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Outdated_Version - { - priority = 10.000000; - to="ERROR_Wrong_Version_1"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"productVersion select 2 < getNumber(configFile >> ""CfgMods"" >> ""Epoch"" >> ""ArmAVersion"")"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Player_Object_Re - { - priority = 0.000000; - to="Check_Player_UID"; - precondition = /*%FSM*/"!isNull player"/*%FSM*/; - condition=/*%FSM*/"player == player"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Wrong_Version_1 - { - name = "ERROR_Wrong_Version_1"; - init = /*%FSM*/"_msg = ""You have an outdated version of ArmA 3"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_ARMAVERSION = true;" \n - " publicVariableServer ""PLAYER_REJECT_ARMAVERSION"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Setup_EH_s_and_H - { - name = "Setup_EH_s_and_H"; - init = /*%FSM*/"{" \n - " player addEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n - "} forEach ([""CfgEpochClient"", ""addEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n - "" \n - "if (count EPOCH_playerHitPoints isEqualTo count ((getAllHitPointsDamage player) param [0,[]])) then {" \n - " {" \n - " player setHitIndex [_forEachIndex, _x];" \n - " }forEach EPOCH_playerHitPoints;" \n - "};" \n - "" \n - "[] spawn EPOCH_masterLoop;" \n - "true call EPOCH_fnc_Weather;" \n - "[5,100] spawn EPOCH_niteLight;" \n - "" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Setup EH's"";" \n - "};" \n - "" \n - """Loading... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.9;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Has_Current_Weap - { - priority = 10.000000; - to="Find_Active_Weap"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_currentWeapon != """""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class no_weapons - { - priority = 0.000000; - to="Process"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_currentWeapon == """""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Process - { - name = "Process"; - init = /*%FSM*/"progressLoadingScreen 0.975;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Preload_done - { - priority = 0.000000; - to="FINISH"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"preloadCamera _playerPos"/*%FSM*/; - action=/*%FSM*/"call compile _extraPayload;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Find_Active_Weap - { - name = "Find_Active_Weap"; - init = /*%FSM*/"_activeWeapon = currentWeapon player;" \n - "progressLoadingScreen 0.95;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Current_Weapon_S - { - priority = 0.000000; - to="Do_nothing"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_activeWeapon == _currentWeapon"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Current_Weapon_Not - { - priority = 0.000000; - to="Select_Weapon"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_activeWeapon != _currentWeapon"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Select_Weapon - { - name = "Select_Weapon"; - init = /*%FSM*/"_currentWeapon spawn {" \n - " uiSleep 1; " \n - " player selectWeapon _this;" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Process"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Do_nothing - { - name = "Do_nothing"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Process"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Check_New_Player - { - name = "Check_New_Player"; - init = /*%FSM*/"_myTime = diag_tickTime;" \n - "" \n - "player reveal _playerObject;" \n - "" \n - "_playerPos = getpos _playerObject;" \n - "" \n - "" \n - """Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.6;" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class check_new__player - { - priority = 0.000000; - to="Setup_Player_Obj"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(isNull _playerObject) && {_playerObject getVariable [""SETUP"",false]} && {_playerPos nearObjectsReady 10} && {call _finalPlayerObjectCheck}"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Timeout_No_Respo - { - priority = 0.000000; - to="ERROR_Server_not"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Process_1 - { - name = "Process_1"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Wait_ArmA_Loading - { - priority = 0.000000; - to="Start_Loading_Sc"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(call BIS_fnc_isLoading)"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Start_Loading_Sc - { - name = "Start_Loading_Sc"; - init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Start Loadingscreen"";" \n - "};" \n - """Starting Epoch... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Version_Check"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Player_Setup - { - name = "ERROR_Player_Setup"; - init = /*%FSM*/"_msg = ""Problem setting up player"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_InvaildSetup = true;" \n - " publicVariableServer ""PLAYER_REJECT_InvaildSetup"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Server_Version_C - { - name = "Server_Version_C"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Wrong_Server_Ver - { - priority = 10.000000; - to="ERROR_Wrong_Server"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"Epoch_ServerVersion != getText(configFile >> ""CfgMods"" >> ""Epoch"" >> ""version"")"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Version_Okay - { - priority = 0.000000; - to="Request_Hive"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Server_not_3 - { - name = "ERROR_Server_not_3"; - init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_HiveNotResponse = true;" \n - " publicVariableServer ""PLAYER_REJECT_HiveNotResponse"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Process_2 - { - name = "Process_2"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class new_character - { - priority = 10.000000; - to="Open_Gender_Selection"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_newChar"/*%FSM*/; - action=/*%FSM*/"endLoadingScreen;" \n - "_myGenderTime = diag_tickTime;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class load_old_charact - { - priority = 0.000000; - to="Process_3"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Open_Gender_Selection - { - name = "Open_Gender_Selection"; - init = /*%FSM*/"createdialog ""SelectGender"";"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Gender_Selected - { - priority = 10.000000; - to="Send_character_s"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Timeout - { - priority = 0.000000; - to="Send_character_s"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"((diag_tickTime - _myGenderTime) > 30)"/*%FSM*/; - action=/*%FSM*/"EPOCH_PlayerIsMale = true;" \n - "closeDialog 0;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Reopen_when_client - { - priority = 0.000000; - to="Open_Gender_Selection"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!dialog && isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Send_character_s - { - name = "Send_character_s"; - init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n - """Gender Selected... Please wait!"" call Epoch_updateLoadingScreen;" \n - "" \n - "[player,EPOCH_PlayerIsMale] remoteExec [""EPOCH_server_loadPlayer"",2];" \n - "EPOCH_PlayerIsMale = nil;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class load_old_charact - { - priority = 0.000000; - to="Process_3"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_myTime = diag_tickTime;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class Process_3 - { - name = "Process_3"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Timeout_No_Respo - { - priority = 0.000000; - to="ERROR_Server_not_4"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(diag_tickTime - _myTime) > 120"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Response - { - priority = 0.000000; - to="Check_New_Player"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""_C_SET"""/*%FSM*/; - action=/*%FSM*/"_playerObject = _C_SET deleteAt 0;" \n - "_playerVariables = _C_SET deleteAt 0;" \n - "_currentWeapon = _C_SET deleteAt 0;" \n - "_mass = _C_SET deleteAt 0;" \n - "" \n - "Epoch_my_GroupUID = _C_SET deleteAt 0;" \n - "Epoch_canBeRevived = _C_SET deleteAt 0;" \n - "Epoch_personalToken = _C_SET deleteAt 0;" \n - "Epoch_my_Group = _C_SET deleteAt 0;" \n - "" \n - "_extraPayload = _C_SET deleteAt 0;" \n - "" \n - ""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class ERROR_Server_not_4 - { - name = "ERROR_Server_not_4"; - init = /*%FSM*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n - "_msg call Epoch_updateLoadingScreen;" \n - "diag_log _msg;" \n - "" \n - "_rejectPlayer = {" \n - " PLAYER_REJECT_HiveLoadChar = true;" \n - " publicVariableServer ""PLAYER_REJECT_HiveLoadChar"";" \n - "};"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Display_Message"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - }; - initState="INIT"; - finalStates[] = - { - "FINISH", - "Reject_without_B", - }; }; /*%FSM*/ \ No newline at end of file diff --git a/Sources/epoch_code/System/task_control.fsm b/Sources/epoch_code/System/task_control.fsm new file mode 100644 index 00000000..fadb8606 --- /dev/null +++ b/Sources/epoch_code/System/task_control.fsm @@ -0,0 +1,1654 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"task_control",0,250,-225.000000,-625.000000,-125.000000,-575.000000,0.000000,"task control"}; +item1[] = {"delay",4,218,-500.000000,-250.000000,-400.000000,-200.000000,0.000000,"delay"}; +item2[] = {"setup",2,250,-650.000000,-625.000000,-550.000000,-575.000000,0.000000,"setup"}; +item3[] = {"_",8,218,-500.000000,-625.000000,-400.000000,-575.000000,0.000000,""}; +item4[] = {"items_and_vars",2,250,-500.000000,-175.000000,-400.000000,-125.000000,0.000000,"items" \n "and" \n "vars"}; +item5[] = {"task_completed",4,218,300.000000,75.000000,400.000000,125.000000,15.000000,"task" \n "completed"}; +item6[] = {"end",1,250,-775.000000,350.000000,-675.000000,400.000000,0.000000,"end"}; +item7[] = {"no_item_spawn",4,218,-350.000000,-175.000000,-250.000000,-125.000000,0.000000,"no item spawn"}; +item8[] = {"do_monitor",2,250,-75.000000,-25.000000,25.000000,25.000000,0.000000," do monitor"}; +item9[] = {"next",2,250,300.000000,-25.000000,400.000000,25.000000,0.000000,"next"}; +item10[] = {"loop",4,218,75.000000,-25.000000,175.000000,25.000000,5.000000,"loop"}; +item11[] = {"_",8,218,-75.000000,-100.000000,25.000000,-50.000000,0.000000,""}; +item12[] = {"_",8,218,75.000000,-325.000000,175.000000,-275.000000,0.000000,""}; +item13[] = {"chat_conditions",2,250,-75.000000,-175.000000,25.000000,-125.000000,0.000000,"chat conditions"}; +item14[] = {"event_conditions",2,250,300.000000,-325.000000,400.000000,-275.000000,0.000000,"event" \n "conditions"}; +item15[] = {"_",8,218,300.000000,-250.000000,400.000000,-200.000000,0.000000,""}; +item16[] = {"comms",2,250,-500.000000,-350.000000,-400.000000,-300.000000,0.000000,"comms"}; +item17[] = {"_",8,218,300.000000,-100.000000,400.000000,-50.000000,0.000000,""}; +item18[] = {"task_conditions",2,250,300.000000,-175.000000,400.000000,-125.000000,0.000000,"task" \n "conditions"}; +item19[] = {"chat_1",4,218,75.000000,-100.000000,175.000000,-50.000000,5.000000,"chat 1"}; +item20[] = {"chat_2",4,218,75.000000,-175.000000,175.000000,-125.000000,10.000000,"chat 2"}; +item21[] = {"chat_3",4,218,75.000000,-250.000000,175.000000,-200.000000,15.000000,"chat 3"}; +item22[] = {"item_spawn",4,218,-650.000000,-175.000000,-550.000000,-125.000000,5.000000,"item spawn"}; +item23[] = {"actions",2,250,-350.000000,-25.000000,-250.000000,25.000000,0.000000,"actions"}; +item24[] = {"point",4,218,-150.000000,350.000000,-50.000000,400.000000,0.000000,"point"}; +item25[] = {"spawn_item",2,250,-650.000000,-25.000000,-550.000000,25.000000,0.000000,"spawn item"}; +item26[] = {"ready",4,218,-500.000000,-25.000000,-400.000000,25.000000,0.000000,"ready"}; +item27[] = {"in_house",4,218,-775.000000,50.000000,-675.000000,100.000000,10.000000,"in house"}; +item28[] = {"hidden_nearby",4,218,-775.000000,-175.000000,-675.000000,-125.000000,5.000000,"hidden nearby"}; +item29[] = {"near_player",4,218,-775.000000,-25.000000,-675.000000,25.000000,15.000000,"near player"}; +item30[] = {"event_1",4,218,425.000000,-400.000000,525.000000,-350.000000,10.000000,"event 1"}; +item31[] = {"event_2",4,218,300.000000,-400.000000,400.000000,-350.000000,15.000000,"event 2"}; +item32[] = {"event_3",4,218,175.000000,-400.000000,275.000000,-350.000000,20.000000,"event 3"}; +item33[] = {"_",8,218,-650.000000,-400.000000,-550.000000,-350.000000,0.000000,""}; +item34[] = {"completed",2,250,175.000000,75.000000,275.000000,125.000000,0.000000,"completed"}; +item35[] = {"diag_1",4,218,300.000000,150.000000,400.000000,200.000000,15.000000,"diag 1"}; +item36[] = {"diag_2",4,218,175.000122,210.091980,275.000122,260.091980,10.000000,"diag 2"}; +item37[] = {"pause",4,218,300.000000,275.000000,400.000000,325.000000,0.000000,"pause"}; +item38[] = {"reward",2,250,25.000000,275.000000,125.000000,325.000000,0.000000,"reward"}; +item39[] = {"comms_1",2,4346,-150.000000,425.000000,-50.000000,475.000000,0.000000,"comms"}; +item40[] = {"mission_complete",4,218,-650.000000,350.000000,-550.000000,400.000000,10.000000,"mission complete"}; +item41[] = {"_",8,218,25.000000,75.000000,125.000000,125.000000,0.000000,""}; +item42[] = {"_",8,218,-350.000000,100.000000,-250.000000,150.000000,0.000000,""}; +item43[] = {"markers",2,250,-225.000000,175.000000,-125.000000,225.000000,0.000000,"markers"}; +item44[] = {"continue",4,218,-75.000000,175.000000,25.000000,225.000000,100.000000,"continue"}; +item45[] = {"radius",4,218,-300.000000,350.000000,-200.000000,400.000000,0.000000,"radius"}; +item46[] = {"marker_pos",4,218,-350.000000,225.000000,-250.000000,275.000000,0.000000,"marker pos"}; +item47[] = {"do_markers",2,250,-225.000000,275.000000,-125.000000,325.000000,0.000000,"do markers"}; +item48[] = {"find_spot",2,250,-900.000000,-175.000000,-800.000000,-125.000000,0.000000,"find spot"}; +item49[] = {"task_failed",4,218,450.000000,-25.000000,550.000000,25.000000,10.000000,"task" \n "failed"}; +item50[] = {"failed",2,250,450.000000,75.000000,550.000000,125.000000,0.000000,"failed"}; +item51[] = {"diag",4,218,575.000000,-25.000000,675.000000,25.000000,5.000000,"diag"}; +item52[] = {"fsm",4,218,575.000000,75.000000,675.000000,125.000000,10.000000,"fsm"}; +item53[] = {"sqf",4,218,575.000000,150.000000,675.000000,200.000000,15.000000,"sqf"}; +item54[] = {"call",4,218,575.000000,225.000000,675.000000,275.000000,20.000000,"call"}; +item55[] = {"clean_up",2,250,300.000000,425.000000,400.000000,475.000000,0.000000,"clean up"}; +item56[] = {"_",8,218,25.000000,425.000000,125.000000,475.000000,0.000000,""}; +item57[] = {"markers",4,218,525.000000,350.000000,625.000000,400.000000,5.000000,"markers"}; +item58[] = {"fsm",4,218,-225.000000,-100.000000,-125.000000,-50.000000,15.000000,"fsm"}; +item59[] = {"sqf",4,218,-225.000000,-25.000000,-125.000000,25.000000,10.000000,"sqf"}; +item60[] = {"call",4,218,-225.000000,50.000000,-125.000000,100.000000,20.000000,"call"}; +item61[] = {"not_hidden",4,218,-900.000000,-100.000000,-800.000000,-50.000000,10.000000,"not hidden"}; +item62[] = {"is_hidden",4,218,-775.000000,-100.000000,-675.000000,-50.000000,5.000000,"is hidden"}; +item63[] = {"gui",2,250,-775.000000,-250.000000,-675.000000,-200.000000,0.000000,"gui"}; +item64[] = {"no_dialogoue",4,218,-650.000000,-250.000000,-550.000000,-200.000000,10.000000,"no dialogoue"}; +item65[] = {"dialogue",4,218,-900.000000,-250.000000,-800.000000,-200.000000,5.000000,"dialogue"}; +item66[] = {"remind_dialogue",4,218,200.000000,350.000000,300.000000,400.000000,10.000000,"remind" \n "dialogue"}; +item67[] = {"_",8,218,-300.000000,425.000000,-200.000000,475.000000,0.000000,""}; +item68[] = {"next_task",2,250,-500.000000,425.000000,-400.000000,475.000000,0.000000,"next task"}; +item69[] = {"clean_up",4,218,400.000000,350.000000,500.000000,400.000000,15.000000,"clean up"}; +item70[] = {"comms_2",2,250,-75.000000,-325.000000,25.000000,-275.000000,0.000000,"comms"}; +item71[] = {"server",4,218,-75.000000,-250.000000,25.000000,-200.000000,10.000000,"server"}; +item72[] = {"simple_task",4,218,-225.000000,-450.000000,-125.000000,-400.000000,10.000000,"simple" \n "task"}; +item73[] = {"skip",4,218,-500.000000,225.000000,-400.000000,275.000000,5.000000,"skip"}; +item74[] = {"run_test",4,218,-500.000000,-525.000000,-400.000000,-475.000000,20.000000,"run test"}; +item75[] = {"override_for_task",2,250,-500.000000,-450.000000,-400.000000,-400.000000,0.000000,"override for" \n "task Editor"}; +item76[] = {"bin_it",4,218,425.000000,-325.000000,525.000000,-275.000000,5.000000,"bin it"}; +item77[] = {"",7,210,708.500000,-141.500000,716.500000,-133.500000,0.000000,""}; +item78[] = {"",7,210,708.500000,446.000000,716.500000,454.000000,0.000000,""}; +item79[] = {"next_task",4,218,-650.000000,425.000000,-550.000000,475.000000,5.000000,"next task"}; +item80[] = {"",7,210,-929.000000,446.000000,-921.000000,454.000000,0.000000,""}; +item81[] = {"",7,210,-929.000000,-604.000000,-921.000000,-596.000000,0.000000,""}; +item82[] = {"call",4,218,103.990662,149.799805,193.990662,199.799805,5.000000,"call"}; +link0[] = {0,3}; +link1[] = {1,4}; +link2[] = {2,33}; +link3[] = {2,72}; +link4[] = {2,74}; +link5[] = {3,2}; +link6[] = {4,7}; +link7[] = {4,22}; +link8[] = {5,34}; +link9[] = {7,23}; +link10[] = {8,11}; +link11[] = {9,5}; +link12[] = {9,10}; +link13[] = {9,49}; +link14[] = {10,8}; +link15[] = {11,13}; +link16[] = {12,14}; +link17[] = {13,12}; +link18[] = {13,19}; +link19[] = {13,20}; +link20[] = {13,21}; +link21[] = {13,71}; +link22[] = {14,15}; +link23[] = {14,30}; +link24[] = {14,31}; +link25[] = {14,32}; +link26[] = {14,76}; +link27[] = {15,18}; +link28[] = {16,1}; +link29[] = {17,9}; +link30[] = {18,17}; +link31[] = {19,13}; +link32[] = {20,13}; +link33[] = {21,13}; +link34[] = {22,25}; +link35[] = {23,42}; +link36[] = {23,58}; +link37[] = {23,59}; +link38[] = {23,60}; +link39[] = {23,73}; +link40[] = {24,47}; +link41[] = {25,26}; +link42[] = {25,27}; +link43[] = {25,28}; +link44[] = {25,29}; +link45[] = {26,23}; +link46[] = {27,25}; +link47[] = {28,48}; +link48[] = {29,25}; +link49[] = {30,14}; +link50[] = {31,14}; +link51[] = {32,14}; +link52[] = {33,16}; +link53[] = {34,35}; +link54[] = {34,36}; +link55[] = {34,41}; +link56[] = {34,82}; +link57[] = {35,34}; +link58[] = {36,34}; +link59[] = {37,55}; +link60[] = {38,37}; +link61[] = {39,67}; +link62[] = {40,6}; +link63[] = {41,38}; +link64[] = {42,43}; +link65[] = {43,44}; +link66[] = {43,46}; +link67[] = {44,8}; +link68[] = {45,47}; +link69[] = {46,47}; +link70[] = {47,24}; +link71[] = {47,44}; +link72[] = {47,45}; +link73[] = {48,61}; +link74[] = {48,62}; +link75[] = {49,50}; +link76[] = {50,37}; +link77[] = {50,51}; +link78[] = {50,52}; +link79[] = {50,53}; +link80[] = {50,54}; +link81[] = {51,50}; +link82[] = {52,50}; +link83[] = {53,50}; +link84[] = {54,50}; +link85[] = {55,56}; +link86[] = {55,57}; +link87[] = {55,66}; +link88[] = {55,69}; +link89[] = {56,39}; +link90[] = {57,55}; +link91[] = {58,23}; +link92[] = {59,23}; +link93[] = {60,23}; +link94[] = {61,48}; +link95[] = {62,25}; +link96[] = {63,64}; +link97[] = {63,65}; +link98[] = {64,4}; +link99[] = {65,63}; +link100[] = {66,55}; +link101[] = {67,68}; +link102[] = {68,40}; +link103[] = {68,79}; +link104[] = {69,55}; +link105[] = {70,12}; +link106[] = {71,70}; +link107[] = {72,23}; +link108[] = {73,68}; +link109[] = {74,75}; +link110[] = {75,33}; +link111[] = {75,72}; +link112[] = {76,77}; +link113[] = {77,78}; +link114[] = {78,55}; +link115[] = {79,80}; +link116[] = {80,81}; +link117[] = {81,2}; +link118[] = {82,34}; +globals[] = {0.000000,0,0,0,0,640,480,1,402,6316128,1,-1036.249023,990.485596,688.632874,-753.906189,1242,884,1}; +window[] = {2,-1,-1,-1,-1,642,365,1390,117,3,1260}; +*//*%FSM*/ +class FSM +{ + fsmName = "task control client"; + class States + { + /*%FSM*/ + class task_control + { + name = "task_control"; + itemno = 0; + init = /*%FSM*/"_plyr = player;" \n + "_taskName = _this select 0;" \n + "_unit = objNull;" \n + "_taskItem = objNull;" \n + "_taskID = 0;" \n + "_editorTest = false;" \n + "if(count _this > 1)then{" \n + "_editorTest = _this select 1;" \n + "};" \n + "if(count _this > 2)then{" \n + "_taskID = _this select 2;" \n + "};" \n + "if(count _this > 3)then{" \n + "_unit = _this select 3;" \n + "};" \n + "if(count _this >4)then{" \n + "_plyr = _this select 4;" \n + "};" \n + "_trgt = _plyr;" \n + "if(count _this > 5)then{" \n + "_trgt = _this select 5;" \n + "};" \n + "" \n + "//Common Vars" \n + "_plyrArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n + "_config = 'inGameTasks' call EPOCH_returnConfig;" \n + "_scriptPath = getText ( _config >> ""file"");" \n + "_fsmPath = ""epoch_code\system"";" \n + "_filterBuilds = getArray ( _config >> ""filterBuilds"");" \n + "" \n + "//DECLARE" \n + "_taskCall = """";" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 3; + priority = 0.000000; + to="setup"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class setup + { + name = "setup"; + itemno = 2; + init = /*%FSM*/"" \n + "//_config = missionConfigFile;" \n + "" \n + "//Mission Control - WIP. TODO: Move to serverside mission control UINamespace not secure." \n + "//uiNameSpace setVariable [""axeTask"",_taskName];" \n + "_plyrVar = missionNamespace getVariable [""EPOCH_playerMissionArray"",[]];" \n + "_taskIndex = ((_plyrVar apply {_x find ""axeTask"" > -1;}) find true);" \n + "if(_taskIndex > -1)then{" \n + "_plyrVar deleteAt _taskIndex;" \n + "};" \n + "_plyrVar pushBack [""axeTask"",_taskName];" \n + "missionNamespace setVariable [""EPOCH_playerMissionArray"",_plyrVar];" \n + "" \n + "missionNameSpace setVariable [""axeTask"",_taskName];" \n + "" \n + "//Built in Vars" \n + "_startTime = diag_tickTime;" \n + "EPOCH_task_startTime = _startTime;" \n + "EPOCH_taskLastLoop = EPOCH_task_startTime;" \n + "EPOCH_taskItem = objNull;" \n + "if(isNil ""EPOCH_taskMarkerName"")then{EPOCH_taskMarkerName = """";};" \n + "" \n + "//Task Vars from Config with relevant local vars" \n + "//TODO - Move relevant ones into FSM so only called if required." \n + "_taskTitle = getText ( _config >> _taskName >> ""title"");" \n + "EPOCH_taskTitle = _taskTitle;" \n + "_taskDesc = getText ( _config >> _taskName >> ""desc"");" \n + "_taskImg = getText ( _config >> _taskName >> ""img"");" \n + "_taskSimple = getNumber ( _config >> _taskName >> ""simpleTask"");" \n + "_taskDelay = getNumber ( _config >> _taskName >> ""triggerDelay"");" \n + "_taskTrigger = getText ( _config >> _taskName >> ""triggerCondition"");" \n + "_taskFSM = getText ( _config >> _taskName >> ""initfsm"");" \n + "_taskSQF = getText ( _config >> _taskName >> ""initsqf"");" \n + "_taskCall = getText ( _config >> _taskName >> ""initcall"");" \n + "_binTask = getNumber ( _config >> _taskName >> ""callEventBinTask"");" \n + "_taskEventCond1 = compile getText ( _config >> _taskName >> ""callEventCondition1"");" \n + "_taskEventCond2 = compile getText ( _config >> _taskName >> ""callEventCondition2"");" \n + "_taskEventCond3 = compile getText ( _config >> _taskName >> ""callEventCondition3"");" \n + "_taskEventSQF1 = getText ( _config >> _taskName >> ""callEventSQF1"");" \n + "_taskEventSQF2 = getText ( _config >> _taskName >> ""callEventSQF2"");" \n + "_taskEventSQF3 = getText ( _config >> _taskName >> ""callEventSQF3"");" \n + "_taskEventFSM1 = getText ( _config >> _taskName >> ""callEventFSM1"");" \n + "_taskEventFSM2 = getText ( _config >> _taskName >> ""callEventFSM2"");" \n + "_taskEventFSM3 = getText ( _config >> _taskName >> ""callEventFSM3"");" \n + "_taskEventCALL1 = compile getText ( _config >> _taskName >> ""callEventCALL1"");" \n + "_taskEventCALL2 = compile getText ( _config >> _taskName >> ""callEventCALL2"");" \n + "_taskEventCALL3 = compile getText ( _config >> _taskName >> ""callEventCALL3"");" \n + "_taskEventTask1 = getText ( _config >> _taskName >> ""callEventTask1"");" \n + "_taskEventTask2 = getText ( _config >> _taskName >> ""callEventTask2"");" \n + "_taskEventTask3 = getText ( _config >> _taskName >> ""callEventTask3"");" \n + "_event1Done = false;" \n + "_event2Done = false;" \n + "_event3Done = false;" \n + "_taskItems = getArray ( _config >> _taskName >> ""items"");" \n + "_taskItemSpawn = getNumber ( _config >> _taskName >> ""itemSpawn"");" \n + "_taskMarkerType = getNumber ( _config >> _taskName >> ""markerType"");" \n + "_taskMarkerRad = getNumber ( _config >> _taskName >> ""markerRadius"");" \n + "_taskMarkerText = getText ( _config >> _taskName >> ""markerText"");" \n + "_taskMarkerVis = getNumber ( _config >> _taskName >> ""markerVisible"");" \n + "_taskDiagSquelch = getNumber ( _config >> _taskName >> ""diagSquelch"");" \n + "_lastChat = diag_tickTime;" \n + "_taskDiagCond1 = compile getText ( _config >> _taskName >> ""diag1Condition"");" \n + "_taskDiagCond2 = compile getText ( _config >> _taskName >> ""diag2Condition"");" \n + "_taskDiagCond3 = compile getText ( _config >> _taskName >> ""diag3Condition"");" \n + "_taskDiag1 = getArray ( _config >> _taskName >> ""dialogue1"");" \n + "_taskDiag2 = getArray ( _config >> _taskName >> ""dialogue2"");" \n + "_taskDiag3 = getArray ( _config >> _taskName >> ""dialogue3"");" \n + "_chat1Done = false;" \n + "_chat2Done = false;" \n + "_chat3Done = false;" \n + "" \n + "//Failed" \n + "_taskFailedCond = compile getText ( _config >> _taskName >> ""failedCondition"");" \n + "_taskFailDist = getNumber ( _config >> _taskName >> ""abandonDist"");" \n + "if(_taskFailDist < 1)then{_taskFailDist=999999;};" \n + "_taskFailTime = getNumber ( _config >> _taskName >> ""abandonTime"");" \n + "if(_taskFailTime < 1)then{_taskFailTime=999999;};" \n + "_taskFailed = false;" \n + "//Failed Calls and Diag done in task failed." \n + "_taskFailedCall = compile """";" \n + "" \n + "//Completed" \n + "_taskCompleteCond = compile getText ( _config >> _taskName >> ""completeCondition"");" \n + "_taskReward = getArray ( _config >> _taskName >> ""reward"");" \n + "_taskCompleteDiag1 = getArray ( _config >> _taskName >> ""completed1"");" \n + "_taskCompleteDiag2 = getArray ( _config >> _taskName >> ""completed2"");" \n + "_taskCompleteCall = compile getText ( _config >> _taskName >> ""completedCALL"");" \n + "_diag1Done = false;" \n + "_diag2Done = false;" \n + "_taskReminder = getArray ( _config >> _taskName >> ""reminder"");" \n + "_taskCheckTime = getNumber ( _config >> _taskName >> ""taskCheckTime"");" \n + "" \n + "" \n + "_taskNextTrigger = getArray ( _config >> _taskName >> ""nextTask"");" \n + "_taskCleanup = getNumber ( _config >> _taskName >> ""cleanUp"");" \n + "_missionCleanUp = getArray ( _config >> _taskName >> ""cleanUpCalls"");" \n + "" \n + "_completed = false;" \n + "" \n + "//Custom Vars" \n + "_customVars = [];" \n + "_varNames = getArray ( _config >> ""varName"");" \n + "_varDatas = getArray ( _config >> ""varData"");" \n + "_serverCmd = [];" \n + "_doSkip = false;" \n + "_taskFailed = false;" \n + "_doBin = false;" \n + "" \n + "if(count _varNames > 0)then{" \n + "" \n + "{" \n + "call compile format [""missionNamespace setVariable%3""""%1"""", %2%4;"",parseText _x,_varDatas select _forEachIndex,parseText ""["",parseText ""]""];" \n + "//systemChat format [""%1 = %2"",parseText (_x),(_varDatas select _forEachIndex)];" \n + "//_customVars pushBack (_varDatas select _forEachIndex);" \n + "}forEach _varNames;" \n + "" \n + "};" \n + "" \n + "//Functions" \n + "_execFSM = {" \n + "//systemChat format[""execing FSM %1"",_this];" \n + "call compile format [""[_taskName,_plyr,_unit,_taskItem] execFSM """"%1"""""",_this];" \n + "};" \n + "" \n + "_execSQF = {" \n + "//systemChat format[""execing SQF %1"",_this];" \n + "call compile format [""[_taskName,_plyr,_unit,_taskItem] execVM """"%1"""""",_this];" \n + "};" \n + "" \n + "_spawnWH = {" \n + "_retTaskWH = objNull;" \n + "_retTaskWH = createVehicle[""GroundWeaponHolder"",_this select 0,[],0,""CAN_COLLIDE""];" \n + "_retTaskWH" \n + "};" \n + "" \n + "//SystemChat format [""INIT: %1"",_taskTitle];" \n + "_debugDo = ""INIT"";" \n + "_showDebug = {" \n + "//hint format [""%4\n%1\nStage: %2\nMsg: %3\nTask: %4"", _debugDo,_missionStage,_msg1,_missionName,_taskTitle];" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class run_test + { + itemno = 74; + priority = 20.000000; + to="override_for_task"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_editorTest"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class simple_task + { + itemno = 72; + priority = 10.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskSimple > 0;"/*%FSM*/; + action=/*%FSM*/"_doSkip = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 33; + priority = 0.000000; + to="comms"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class items_and_vars + { + name = "items_and_vars"; + itemno = 4; + init = /*%FSM*/"//SystemChat format [""START: Do Spawn: %1"",_taskItemSpawn];" \n + "_taskStartPos = getPosATL _plyr;" \n + "_startTime = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class item_spawn + { + itemno = 22; + priority = 5.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn > 0 && count _taskItems > 0"/*%FSM*/; + action=/*%FSM*/"_taskItem = objNull;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class no_item_spawn + { + itemno = 7; + priority = 0.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 6; + init = /*%FSM*/"//uiNameSpace setVariable [""axeTask"",nil];" \n + "if!(_doBin)then{" \n + "_plyrVar = missionNamespace getVariable [""EPOCH_playerMissionArray"",[]];" \n + "_taskIndex = ((_plyrVar apply {_x find ""axeTask"" > -1;}) find true);" \n + "if(_taskIndex > -1)then{" \n + "_plyrVar deleteAt _taskIndex;" \n + "};" \n + "missionNamespace setVariable [""EPOCH_playerMissionArray"",_plyrVar];" \n + "};" \n + "if(count _missionCleanUp > 0)then{" \n + "{" \n + "call compile _x;" \n + "} forEach _missionCleanUp;" \n + "};" \n + "_debugDo = ""DISPOSE"";" \n + "diag_log format [""Task Failed: %1"",_taskName];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class do_monitor + { + name = "do_monitor"; + itemno = 8; + init = /*%FSM*/"_lastLoop = diag_tickTime;" \n + "EPOCH_taskLastLoop = _lastLoop;" \n + "_plyPos = getPosATL _plyr;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 11; + priority = 0.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class next + { + name = "next"; + itemno = 9; + init = /*%FSM*/"//Clean Up / Other Options here"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class task_completed + { + itemno = 5; + priority = 15.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_completed && diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/"_lastLoop = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class task_failed + { + itemno = 49; + priority = 10.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskFailed"/*%FSM*/; + action=/*%FSM*/"_taskFailedDiag = [];" \n + "_taskFailedFSM = """";" \n + "_taskFailedSQF = """";" \n + "_taskFailedCall = compile """";" \n + "" \n + "if!(_editorTest)then{" \n + "_taskFailedDiag = getArray ( _config >> _taskName >> ""failed"");" \n + "_taskFailedFSM = getText ( _config >> _taskName >> ""failedFSM"");" \n + "_taskFailedSQF = getText ( _config >> _taskName >> ""failedSQF"");" \n + "_taskFailedCall = compile getText ( _config >> _taskName >> ""failedCall"");" \n + "_nextTask = getArray ( _config >> _taskName >> ""failedTask"");" \n + "}else{" \n + "_taskFailedDiag = parseText axeValCacheList select 41;" \n + "_taskFailedFSM = axeValCacheList select 42;" \n + "_taskFailedSQF = axeValCacheList select 43;" \n + "_taskFailedCall = axeValCacheList select 44;" \n + "_nextTask = parseText axeValCacheList select 45;" \n + "};" \n + "" \n + "_taskReminder = [];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class loop + { + itemno = 10; + priority = 5.000000; + to="do_monitor"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((!_completed) || (!_taskFailed)) && diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class chat_conditions + { + name = "chat_conditions"; + itemno = 13; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class chat_3 + { + itemno = 21; + priority = 15.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastChat > _taskDiagSquelch && call _taskDiagCond3 && count _taskDiag3 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskDiag3;" \n + "" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "" \n + "" \n + "_chat3Done = true;" \n + "_lastChat = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class chat_2 + { + itemno = 20; + priority = 10.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastChat > _taskDiagSquelch && call _taskDiagCond2 && count _taskDiag2 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskDiag2;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_chat2Done = true;" \n + "_lastChat = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class server + { + itemno = 71; + priority = 10.000000; + to="comms_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _serverCmd > 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class chat_1 + { + itemno = 19; + priority = 5.000000; + to="chat_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_chat1Done) && call _taskDiagCond1 && count _taskDiag1 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskDiag1;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_chat1Done = true;" \n + "_lastChat = diag_tickTime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 12; + priority = 0.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class event_conditions + { + name = "event_conditions"; + itemno = 14; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class event_3 + { + itemno = 32; + priority = 20.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_event3Done) && call _taskEventCond3"/*%FSM*/; + action=/*%FSM*/"if!(_taskEventFSM3 == """")then{" \n + "_taskEventFSM3 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF3 == """")then{" \n + "_taskEventSQF3 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL3) == ""{}"")then{" \n + "call _taskEventCALL3;" \n + "};" \n + "" \n + "if!(_taskEventTask3 == """")then{" \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask3];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event3Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class event_2 + { + itemno = 31; + priority = 15.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_event2Done) && call _taskEventCond2"/*%FSM*/; + action=/*%FSM*/"if!(_taskEventFSM2 == """")then{" \n + "_taskEventFSM2 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF2 == """")then{" \n + "_taskEventSQF2 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL2) == ""{}"")then{" \n + "call _taskEventCALL2;" \n + "};" \n + "" \n + "if!(_taskEventTask2 == """")then{" \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask2];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event2Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class event_1 + { + itemno = 30; + priority = 10.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_event1Done) && call _taskEventCond1"/*%FSM*/; + action=/*%FSM*/"if!(_taskEventFSM1 == """")then{" \n + "_taskEventFSM1 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF1 == """")then{" \n + "_taskEventSQF1 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL1) == ""{}"")then{" \n + "call _taskEventCALL1;" \n + "};" \n + "" \n + "if!(_taskEventTask1 == """")then{" \n + "//TODO: Allow new separate mission from here." \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask1];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event1Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class bin_it + { + itemno = 76; + priority = 5.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doBin"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 15; + priority = 0.000000; + to="task_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class comms + { + name = "comms"; + itemno = 16; + init = /*%FSM*/"//[_plyr,0,_taskID] remoteExec [""EPOCH_Server_missionComms"",3];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class delay + { + itemno = 1; + priority = 0.000000; + to="items_and_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime > _startTime + _taskDelay"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class task_conditions + { + name = "task_conditions"; + itemno = 18; + init = /*%FSM*/"if((_plyPos distance _taskStartPos > _taskFailDist) || (diag_tickTIme - _startTime > _taskFailTime) || (call _taskFailedCond))then{" \n + "_taskFailed = true;" \n + "};" \n + "" \n + "if(call _taskCompleteCond)then{" \n + "_completed = true;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 17; + priority = 0.000000; + to="next"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class actions + { + name = "actions"; + itemno = 23; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class call + { + itemno = 60; + priority = 20.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskCall == """")" \n + "//USE isNill NOT == """""/*%FSM*/; + action=/*%FSM*/"call compile _taskCall;" \n + "_taskCall = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class fsm + { + itemno = 58; + priority = 15.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskFSM == """")"/*%FSM*/; + action=/*%FSM*/"_taskFSM call _execFSM;" \n + "_taskFSM = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sqf + { + itemno = 59; + priority = 10.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskSQF == """")"/*%FSM*/; + action=/*%FSM*/"systemChat ""SQF NOT NIL"";" \n + "_taskSQF call _execSQF;" \n + "_taskSQF = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class skip + { + itemno = 73; + priority = 5.000000; + to="next_task"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doSkip"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 42; + priority = 0.000000; + to="markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class spawn_item + { + name = "spawn_item"; + itemno = 25; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class near_player + { + itemno = 29; + priority = 15.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn == 3"/*%FSM*/; + action=/*%FSM*/"_pos = getPosATL player;" \n + "_taskItem = [_pos] call _spawnWH;" \n + "_taskItemSpawn = -1;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class in_house + { + itemno = 27; + priority = 10.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn == 1"/*%FSM*/; + action=/*%FSM*/"_nrBuilds = nearestObjects [_plyr,[""house""],50];" \n + "_arrGarr = [];" \n + "_bldMap = [];" \n + "_pos = getPosATL _plyr;" \n + "" \n + "{" \n + "" \n + "if(!((typeOf _x) in _filterBuilds))then{" \n + "" \n + " _garrCount = 0;" \n + "" \n + " while {format [""%1"", _x buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n + " _garrCount = _garrCount + 1;" \n + " };" \n + "" \n + " if(_garrCount > 0)then{" \n + " _arrGarr pushBack [_x,_garrCount];" \n + " };" \n + "" \n + "};" \n + "" \n + "}forEach _nrBuilds;" \n + "" \n + "if(count _arrGarr > 0)then{" \n + "" \n + " {" \n + " _garrPos = (_x select 0) buildingPos (floor random (_x select 1));" \n + " _bldMap pushBack _garrPos;" \n + "" \n + " }forEach _arrGarr;" \n + "" \n + "};" \n + "" \n + "if(count _bldMap > 0)then{" \n + "_pos = _bldMap select (floor random (count _bldMap));" \n + "};" \n + "" \n + "" \n + "//_taskItem = createVehicle[""WeaponHolderSimulated"",_pos,[],0,""CAN_COLLIDE""];" \n + "_taskItem = [_pos] call _spawnWH;" \n + "" \n + "" \n + "_taskItemSpawn = -1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class hidden_nearby + { + itemno = 28; + priority = 5.000000; + to="find_spot"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskItemSpawn == 2"/*%FSM*/; + action=/*%FSM*/"_taskItemSpawn = -1;" \n + "_posSafe = false;" \n + "_done = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ready + { + itemno = 26; + priority = 0.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNull _taskItem"/*%FSM*/; + action=/*%FSM*/"[player,Epoch_personalToken,_taskItems,[],_taskItem,false] remoteExec [""EPOCH_Server_createObject"",2];" \n + "EPOCH_taskItem = _taskItem;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class completed + { + name = "completed"; + itemno = 34; + init = /*%FSM*/"//Put more checks in for empty dialogue array so as not just waiting a set time"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class diag_1 + { + itemno = 35; + priority = 15.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_diag1Done && count _taskCompleteDiag1 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskCompleteDiag1;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_diag1Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class diag_2 + { + itemno = 36; + priority = 10.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_diag1Done && (!_diag2Done) && diag_tickTime - _lastLoop > 20 && count _taskCompleteDiag2 > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskCompleteDiag2;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_diag2Done = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class call + { + itemno = 82; + priority = 5.000000; + to="completed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(str(_taskCompleteCall) == ""{}"")"/*%FSM*/; + action=/*%FSM*/"call _taskCompleteCall;" \n + "_taskCompleteCall = compile """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 41; + priority = 0.000000; + to="reward"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reward + { + name = "reward"; + itemno = 38; + init = /*%FSM*/"if(count _taskReward > 0)then{" \n + "" \n + "diag_log format [""spawn reward: %1"",_taskReward];" \n + "" \n + "_rewardHolder = [getPosATL player] call _spawnWH;" \n + "" \n + "[player,Epoch_personalToken,_taskReward,[],_rewardHolder,false] remoteExec [""EPOCH_Server_createObject"",2];" \n + "" \n + "};" \n + "" \n + "_debugDo = ""REWARD"";"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class pause + { + itemno = 37; + priority = 0.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class comms_1 + { + name = "comms_1"; + itemno = 39; + init = /*%FSM*/"//[_plyr,1,_taskID] remoteExec [""EPOCH_Server_missionComms"",3];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 67; + priority = 0.000000; + to="next_task"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class markers + { + name = "markers"; + itemno = 43; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class continue + { + itemno = 44; + priority = 100.000000; + to="do_monitor"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"//no marker" \n + "_taskMarkerType < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class marker_pos + { + itemno = 46; + priority = 0.000000; + to="do_markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskMarkerType > 0"/*%FSM*/; + action=/*%FSM*/"_markerPos = [];" \n + "if(isNil ""EPOCH_taskMarkerPos"")then{" \n + "if!(isNull _trgt)then{" \n + "_markerPos = getPos _trgt;" \n + "};" \n + "" \n + "if!(isNull _unit)then{" \n + "_markerPos = getPos _unit;" \n + "};" \n + "" \n + "if!(isNull _taskItem)then{" \n + "_markerPos = getPos _taskItem;" \n + "};" \n + "" \n + "}else{" \n + "_markerPos = EPOCH_taskMarkerPos;" \n + "};" \n + "" \n + "_mkrName = format[""EPOCHTaskMark%1%2"", _taskName,diag_tickTime];" \n + "EPOCH_taskMarkerName = _mkrName;" \n + "_markerText = getText ( _config >> _taskName >> ""markerText"");" \n + "_markerRad = getNumber ( _config >> _taskName >> ""markerRadius"");" \n + "" \n + "if(_taskMarkerType == 2)then{" \n + "_markerPos set [0, (_markerPos select 0) + (floor (random _markerRad) - (_markerRad / 2))];" \n + "_markerPos set [1, (_markerPos select 1) + (floor (random _markerRad) - (_markerRad / 2))];" \n + "};" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class do_markers + { + name = "do_markers"; + itemno = 47; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class continue + { + itemno = 44; + priority = 100.000000; + to="do_monitor"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"//no marker" \n + "_taskMarkerType < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class radius + { + itemno = 45; + priority = 0.000000; + to="do_markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskMarkerType == 2"/*%FSM*/; + action=/*%FSM*/"[[_taskMarkerVis,player],_markerPos,""ELLIPSE"",""mil_dot"",_markerText,""ColorYellow"",[_taskMarkerRad,_taskMarkerRad], ""SolidBorder"", 42, 0.6,_taskTitle] remoteExec [""EPOCH_server_makeMarker"",2];" \n + "_taskMarkerType = -1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class point + { + itemno = 24; + priority = 0.000000; + to="do_markers"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskMarkerType == 1"/*%FSM*/; + action=/*%FSM*/"[[_taskMarkerVis,player],_markerPos,""ICON"",""mil_dot"",_markerText,""ColorYellow"",[0.8,0.8], ""SolidBorder"", 42, 0.6,_taskTitle] remoteExec [""EPOCH_server_makeMarker"",2];" \n + "_taskMarkerType = -1;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class find_spot + { + name = "find_spot"; + itemno = 48; + init = /*%FSM*/"//TODO: try catch used incorrectly here" \n + "try{" \n + "_pos = [(getPosATL _plyr), (floor (random 80) + 42), floor random 360] call BIS_fnc_relPos;" \n + "" \n + "if (!lineIntersects [eyePos _plyr, _pos, _plyr, _unit]) then {_posSafe = true;};" \n + "" \n + "if(_posSafe)then{" \n + "//_taskItem = createVehicle[""GroundWeaponHolder"",_pos,[],0,""CAN_COLLIDE""];" \n + "_taskItem = [_pos] call _spawnWH;" \n + "_taskItemSpawn = -1;" \n + "_done = true;" \n + "};" \n + "" \n + "}catch{" \n + "systemchat format[""CATCH:%1"",_exception];" \n + "done = true;" \n + "_taskItemSpawn = 1;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class not_hidden + { + itemno = 61; + priority = 10.000000; + to="find_spot"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_posSafe;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class is_hidden + { + itemno = 62; + priority = 5.000000; + to="spawn_item"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_done;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class failed + { + name = "failed"; + itemno = 50; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class call + { + itemno = 54; + priority = 20.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(str(_taskFailedCall) == ""{}"")"/*%FSM*/; + action=/*%FSM*/"call _taskFailedCall;" \n + "_taskFailedCall = compile """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class sqf + { + itemno = 53; + priority = 15.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskFailedSQF == """")"/*%FSM*/; + action=/*%FSM*/"_taskFailedSQF call _execSQF;" \n + "_taskFailedSQF = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class fsm + { + itemno = 52; + priority = 10.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskFailedFSM == """")"/*%FSM*/; + action=/*%FSM*/"_taskFailedFSM call _execFSM;" \n + "_taskFailedFSM = """";"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class diag + { + itemno = 51; + priority = 5.000000; + to="failed"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskFailedDiag > 0"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskFailedDiag;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_taskFailedDiag = [];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class pause + { + itemno = 37; + priority = 0.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_tickTime - _lastLoop > _taskCheckTime"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class clean_up + { + name = "clean_up"; + itemno = 55; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class clean_up + { + itemno = 69; + priority = 15.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskCleanup > 0"/*%FSM*/; + action=/*%FSM*/"//deleteVehicle _taskItem;" \n + "//[_plyr,0,_taskID,_taskItem] remoteExec [""EPOCH_Server_missionComms"",3];" \n + "_taskCleanup = -1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class remind_dialogue + { + itemno = 66; + priority = 10.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskReminder > 0 && !_taskFailed"/*%FSM*/; + action=/*%FSM*/"_diag = selectRandom _taskReminder;" \n + "[format [""%1"",_diag], 5] call Epoch_message;" \n + "_taskReminder = [];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class markers + { + itemno = 57; + priority = 5.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(isNil ""EPOCH_taskMarkerName"") && (_taskCleanup > 0 || _taskFailed)"/*%FSM*/; + action=/*%FSM*/"[player,_taskMarkerVis,EPOCH_taskMarkerName] remoteExec [""EPOCH_server_removeMarker"",2];" \n + "_mkrName = nil;" \n + "EPOCH_taskMarkerName = nil;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 56; + priority = 0.000000; + to="comms_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class gui + { + name = "gui"; + itemno = 63; + init = /*%FSM*/"//GUI dialogue Options for Raymix :)"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class no_dialogoue + { + itemno = 64; + priority = 10.000000; + to="items_and_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskTitle == """""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dialogue + { + itemno = 65; + priority = 5.000000; + to="gui"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_taskTitle == """")"/*%FSM*/; + action=/*%FSM*/"" \n + "axeTaskTitle = _taskTitle;" \n + "axeTaskDesc = _taskDesc;" \n + "axeTaskImg = _taskImg;" \n + "createDialog ""taskAccept"";" \n + "" \n + "_taskTitle = """";"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class next_task + { + name = "next_task"; + itemno = 68; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class mission_complete + { + itemno = 40; + priority = 10.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskNextTrigger < 1 || !alive _plyr || _taskFailed || _doBin"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class next_task + { + itemno = 79; + priority = 5.000000; + to="setup"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _taskNextTrigger > 0 && !_taskFailed"/*%FSM*/; + action=/*%FSM*/"_taskName = selectRandom _taskNextTrigger;" \n + "diag_log format [""Trigger Next Task: %1"",_taskName];" \n + "_taskNextTrigger = [];"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class comms_2 + { + name = "comms_2"; + itemno = 70; + init = /*%FSM*/"" \n + "systemChat format [""SERVER CMD: %1"",_serverCmd];" \n + "" \n + "_serverCmd = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 12; + priority = 0.000000; + to="event_conditions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class override_for_task + { + name = "override_for_task"; + itemno = 75; + init = /*%FSM*/"_taskAuthor = axeValCacheList select 0;" \n + "_taskTitle = axeValCacheList select 1;" \n + "_taskSimple = parseNumber (axeValCacheList select 2);" \n + "_taskDesc = ""Test Task"";" \n + "_taskImg = ""NOIMG"";" \n + "_taskTrigger = axeValCacheList select 3;" \n + "_taskLimit = parseNumber (axeValCacheList select 4);" \n + "_taskCheckTime = parseNumber (axeValCacheList select 5);" \n + "_taskDelay = parseNumber (axeValCacheList select 6);" \n + "_taskItems = parseText axeValCacheList select 7;" \n + "_taskItemSpawn = parseNumber (axeValCacheList select 8);" \n + "_taskMarkerType = parseNumber (axeValCacheList select 9);" \n + "_taskMarkerRad = parseNumber (axeValCacheList select 10);" \n + "_taskMarkerText = axeValCacheList select 11;" \n + "_taskFSM = axeValCacheList select 12;" \n + "_taskSQF = axeValCacheList select 13;" \n + "_taskCall = axeValCacheList select 14;" \n + "_binTask = parseNumber (axeValCacheList select 15);" \n + "_taskEventCond1 = axeValCacheList select 16;" \n + "_taskEventCond2 = axeValCacheList select 17;" \n + "_taskEventCond3 = axeValCacheList select 18;" \n + "_taskEventCALL1 = axeValCacheList select 19;" \n + "_taskEventFSM1 = axeValCacheList select 20;" \n + "_taskEventSQF1 = axeValCacheList select 21;" \n + "_taskEventTask1 = axeValCacheList select 22;" \n + "_taskEventCALL2 = axeValCacheList select 23;" \n + "_taskEventFSM2 = axeValCacheList select 24;" \n + "_taskEventSQF2 = axeValCacheList select 25;" \n + "_taskEventTask2 = axeValCacheList select 26;" \n + "_taskEventCALL3 = axeValCacheList select 27;" \n + "_taskEventFSM3 = axeValCacheList select 28;" \n + "_taskEventSQF3 = axeValCacheList select 29;" \n + "_taskEventTask3 = axeValCacheList select 30;" \n + "_taskDiagCond1 = axeValCacheList select 31;" \n + "_taskDiag1 = parseText axeValCacheList select 32;" \n + "_taskDiagSquelch = parseNumber (axeValCacheList select 33);" \n + "_taskDiagCond2 = axeValCacheList select 34;" \n + "_taskDiag2 = parseText axeValCacheList select 35;" \n + "_taskDiagCond3 = axeValCacheList select 36;" \n + "_taskDiag3 = parseText axeValCacheList select 37;" \n + "_taskFailedCond = axeValCacheList select 38;" \n + "_taskFailDist = parseNumber (axeValCacheList select 39);" \n + "_taskFailTime = parseNumber (axeValCacheList select 40);" \n + "//See task failed for this bit" \n + "_taskCleanup = parseNumber (axeValCacheList select 46);" \n + "_taskCompleteCond = axeValCacheList select 47;" \n + "_taskReward = parseText axeValCacheList select 48;" \n + "_taskCompleteDiag1 = parseText axeValCacheList select 49;" \n + "_taskCompleteDiag2 = parseText axeValCacheList select 50;" \n + "_taskReminder = axeValCacheList select 51;" \n + "_taskNextTrigger = parseText axeValCacheList select 52;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class simple_task + { + itemno = 72; + priority = 10.000000; + to="actions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_taskSimple > 0;"/*%FSM*/; + action=/*%FSM*/"_doSkip = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 33; + priority = 0.000000; + to="comms"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="task_control"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ diff --git a/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf b/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf index 634fefaa..9256f4a6 100644 --- a/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf +++ b/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf */ if !(isNull _this) then{ [player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_teleportPlayer",2]; diff --git a/Sources/epoch_code/compile/EPOCH_LootIT.sqf b/Sources/epoch_code/compile/EPOCH_LootIT.sqf index 6c9ce005..438fa9b7 100644 --- a/Sources/epoch_code/compile/EPOCH_LootIT.sqf +++ b/Sources/epoch_code/compile/EPOCH_LootIT.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_LootIT.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_LootIT.sqf */ if (!isNull _this) then { [_this,player,Epoch_personalToken] remoteExec ["EPOCH_server_lootContainer",2]; diff --git a/Sources/epoch_code/compile/EPOCH_PutHandler.sqf b/Sources/epoch_code/compile/EPOCH_PutHandler.sqf index dfbf9ba8..96270c38 100644 --- a/Sources/epoch_code/compile/EPOCH_PutHandler.sqf +++ b/Sources/epoch_code/compile/EPOCH_PutHandler.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_PutHandler.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_PutHandler.sqf */ _class = param [2]; //Radio Check diff --git a/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf b/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf index 64ea1e89..afd21762 100644 --- a/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf +++ b/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_QuickTakeAll.sqf */ private ["_magazines","_items","_weapons"]; closeDialog 0; diff --git a/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf b/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf index 634f78d1..094064bc 100644 --- a/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf +++ b/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_QuickTakeLoad.sqf */ private ["_magazines"]; createDialog "QuickTake"; diff --git a/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf b/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf index 2b4b5275..06a6ab2a 100644 --- a/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf +++ b/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_SpawnTraderMiltia.sqf */ private ["_startPos","_rndHouse","_unit","_trgt","_nrBuilds","_grp"]; _trgt = player; diff --git a/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf b/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf index 55b026a5..93e2bb38 100644 --- a/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf +++ b/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf @@ -10,14 +10,14 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_UnisexCheck.sqf */ private ["_femaleVariant","_vest","_item","_config","_woman","_maleVariant","_vestItems","_mags"]; params ["_unit","_container","_item"]; // check for access of a locked container if (_container getVariable['EPOCH_Locked', false]) then { - // kick player + // kick player, TODO: temp ban? EPOCH_kicked = format ["%1 attempted to access a locked %2 with %3",_unit,_container,_item]; publicVariableServer "EPOCH_kicked"; }; diff --git a/Sources/epoch_code/compile/EPOCH_antiWall.sqf b/Sources/epoch_code/compile/EPOCH_antiWall.sqf index eb0cdd39..8a7d44b0 100644 --- a/Sources/epoch_code/compile/EPOCH_antiWall.sqf +++ b/Sources/epoch_code/compile/EPOCH_antiWall.sqf @@ -10,20 +10,19 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_antiWall.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_antiWall.sqf */ -private ["_worldPos","_front","_dirTo","_front2"]; +private ["_start","_end","_dirTo"]; params ["_unit","_position","_vehicle"]; if (_unit == player) then { - _worldPos = getPosATLVisual _vehicle; - _worldPos set[2, (_worldPos select 2) + 1]; - _front = _worldPos; + _start = getPosWorld _vehicle; + // _worldPos set[2, (_worldPos select 2) + 1]; _dirTo = _vehicle getDir player; - _front2 = _vehicle getPos [(_vehicle distance player) + 1, _dirTo]; + _end = _vehicle getPos [(_vehicle distance player) + 1, _dirTo]; { if (_x isKindOf "Const_All_Walls_F") exitWith{ player moveInAny _vehicle; EPOCH_antiWallCount = EPOCH_antiWallCount + 1; }; - } forEach lineintersectsobjs[ATLToASL _front, ATLToASL _front2, player, _vehicle, true, 2]; + } forEach lineintersectsobjs[_start, AGLToASL _end, player, _vehicle, true, 2]; }; diff --git a/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf b/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf index 47da22fb..c2c4e7fc 100644 --- a/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf +++ b/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_callSapperMigration.sqf */ private ["_trgt","_sapperCount","_notReady","_start","_dirTo","_finish","_nrPlyrs","_abortAfter","_pos","_axeSapper","_disableAI"]; @@ -42,13 +42,17 @@ while {_notReady} do { }; if(_abortAfter < 42)then{ - for "_i" from 1 to _sapperCount step 1 do { - _pos = _start findEmptyPosition [0,20,"Epoch_Sapper_F"]; - _axeSapper = createAgent ["Epoch_Sapper_F", _pos, [], 12, "FORM"]; - waitUntil {_axeSapper == _axeSapper}; - _axeSapper call _disableAI; - EPOCHSapperMigrationHandle = [_axeSapper,_finish] execFSM "\x\addons\a3_epoch_code\System\sapperSwarmMember.fsm"; - uiSleep 0.75; + + [_sapperCount,_start,_disableAI,_finish]spawn{ + params["_sapperCount","_start","_disableAI","_finish",["_pos",[]],["_axeSapper", objNull]]; + for "_i" from 1 to _sapperCount step 1 do { + _pos = _start findEmptyPosition [0,20,"Epoch_Sapper_F"]; + _axeSapper = createAgent ["Epoch_Sapper_F", _pos, [], 12, "FORM"]; + waitUntil {_axeSapper == _axeSapper}; + _axeSapper call _disableAI; + EPOCHSapperMigrationHandle = [_axeSapper,_finish] execFSM "\x\addons\a3_epoch_code\System\sapperSwarmMember.fsm"; + uiSleep 0.75; + }; + Epoch_axeMigrationRunning = true; }; - Epoch_axeMigrationRunning = true; }; diff --git a/Sources/epoch_code/compile/EPOCH_chopWood.sqf b/Sources/epoch_code/compile/EPOCH_chopWood.sqf index 9f03544d..eceae481 100644 --- a/Sources/epoch_code/compile/EPOCH_chopWood.sqf +++ b/Sources/epoch_code/compile/EPOCH_chopWood.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_chopWood.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_chopWood.sqf */ private ["_currentPos","_object","_type","_start","_end","_p3dName","_finalConfig","_str","_sel_object","_findStart","_objects","_config"]; diff --git a/Sources/epoch_code/compile/EPOCH_consumeItem.sqf b/Sources/epoch_code/compile/EPOCH_consumeItem.sqf index 4c311b04..e3739760 100644 --- a/Sources/epoch_code/compile/EPOCH_consumeItem.sqf +++ b/Sources/epoch_code/compile/EPOCH_consumeItem.sqf @@ -10,71 +10,28 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_consumeItem.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_consumeItem.sqf */ -private ["_type","_magazineSize","_text","_item","_pic","_magazinesAmmoFull","_magazineSizeMax","_config","_pos","_object","_isStorage","_isOk","_buildClass","_interactReturnOnUse","_vehicle","_currentFuel","_canCapacity","_interactAttributes","_fuelCapacity","_newFuel","_removeItem","_vehicles","_transportFuel","_highestDMG","_currentHIT","_currentDMG","_newDMG","_paintCanIndex","_paintCanColor","_msg","_color","_unifiedInteract","_interactOption"]; +private ["_cfgBaseBuilding","_cfgItemInteractions","_type","_magazineSize","_text","_item","_pic","_magazinesAmmoFull","_magazineSizeMax","_pos","_object","_isStorage","_isOk","_buildClass","_interactReturnOnUse","_vehicle","_currentFuel","_canCapacity","_interactAttributes","_fuelCapacity","_newFuel","_removeItem","_vehicles","_transportFuel","_highestDMG","_currentHIT","_currentDMG","_newDMG","_paintCanIndex","_paintCanColor","_msg","_color","_unifiedInteract","_interactOption"]; +EPOCH_InteractedItem params ["_text","_item","_pic"]; -_text = EPOCH_InteractedItem select 0; -_item = EPOCH_InteractedItem select 1; -_pic = EPOCH_InteractedItem select 2; - -_type = "CfgMagazines"; -if (isClass (configfile >> "CfgWeapons" >> _item)) then {_type = "CfgWeapons"}; - -_config = (configfile >> _type >> _item); -_type = getNumber(_config >> "type"); -_interactOption = getNumber(_config >> "interactAction"); -_interactReturnOnUse = getText(_config >> "interactReturnOnUse"); -_interactAttributes = getArray(_config >> "interactAttributes"); +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_cfgItemInteractions = (('CfgItemInteractions' call EPOCH_returnConfig) >> _item); +_interactOption = getNumber(_cfgItemInteractions >> "interactAction"); +_interactReturnOnUse = getText(_cfgItemInteractions >> "interactReturnOnUse"); +_interactAttributes = getArray(_cfgItemInteractions >> "interactAttributes"); _removeItem = {([player,_this] call BIS_fnc_invRemove) == 1}; -_giveAttributes = { - private ["_return","_randomData","_index","_data","_addPlus"]; - _index = _this select 0; - _data = _this select 1; - _addPlus = if (_data > 0) then {"+"} else {""}; - _return = ""; - if (_data != 0) then { - _editableVars = [["Temp"],["Hunger"],["Thirst"],["Energy"],["Soiled"],["Immunity"],["Toxicity",true],["Stamina"],["Wet"],["BloodP"],["Karma"],["Alcohol"],["Radiation"]]; - _selectedVar = _editableVars select _index; - _selectedVar params ["_selectedVarName",["_randomNum",false]]; - _varName = format["EPOCH_player%1",_selectedVarName]; - _customVarIndex = EPOCH_customVars find _selectedVarName; - _limits = EPOCH_customVarLimits select _customVarIndex; - _limits params [["_max",100],["_min",0]]; - if (_max isEqualType "") then { - _max = missionNamespace getVariable [_max, 0]; - }; - if (_min isEqualType "") then { - _min = missionNamespace getVariable [_min, 0]; - }; - _currentVal = missionNamespace getVariable [_varName, EPOCH_defaultVars select _customVarIndex]; - if (_randomNum) then { - _data = round(random _data); - }; - _newValue = ((_currentVal + _data) min _max) max _min; - missionNamespace setVariable [_varName, _newValue]; - if (_selectedVarName == "Temp") then { - _celcuis = _data call EPOCH_convertTemp; - _celcuisNew = _newValue call EPOCH_convertTemp; - _return = format["%1: %2%3 (%4 °F) %2%5 (%6 °C)",(localize format["str_epoch_pvar_%1",_selectedVarName]),_addPlus,_data,_newValue,_celcuis,_celcuisNew]; - } else { - _return = format["%1: %2%3 (%4/%5)", (localize format["str_epoch_pvar_%1",_selectedVarName]), _addPlus, _data, _newValue, _max]; - }; - }; - _return -}; - _unifiedInteract = { if (_item call _removeItem) then { if (_interactReturnOnUse != "") then { _interactReturnOnUse call EPOCH_fnc_addItemOverflow; }; { - _output = [_forEachIndex, _x] call _giveAttributes; + _output = _x call EPOCH_giveAttributes; if (_output != "") then { - [format["%1", _output], 5] call Epoch_dynamicText; + [_output, 5] call Epoch_message; }; } foreach _interactAttributes; }; @@ -82,7 +39,7 @@ _unifiedInteract = { switch _interactOption do { case 0: { - _magazineSizeMax = getNumber (_config >> "count"); + _magazineSizeMax = getNumber (configfile >> "CfgMagazines" >> _item >> "count"); // allow repack for all magazines with greater than 1 bullet if (_magazineSizeMax > 1) then { @@ -108,7 +65,7 @@ switch _interactOption do { if ((_magazineSize % _magazineSizeMax) > 0) then { player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)]; }; - ["Ammo Repacked", 5] call Epoch_dynamicText; + ["Ammo Repacked", 5] call Epoch_message; }; }; case 1: _unifiedInteract; // Eat 1 @@ -118,9 +75,10 @@ switch _interactOption do { _buildingJammerRange = ["CfgEpochClient", "buildingJammerRange", 75] call EPOCH_fnc_returnConfigEntryV2; _buildingCountLimit = ["CfgEpochClient", "buildingCountLimit", 200] call EPOCH_fnc_returnConfigEntryV2; _partCheck = _item in (magazines player); - _buildClass = getText(configfile >> "CfgMagazines" >> _item >> "buildClass"); + + _buildClass = getText(_cfgItemInteractions >> "buildClass"); if (_buildClass != "" && _partCheck) then { - _isStorage = getNumber(configfile >> "CfgMagazines" >> _item >> "isStorage"); + _isStorage = getNumber(_cfgItemInteractions >> "isStorage"); _isOk = if (_isStorage == 1 || _buildClass isKindOf "Secure_Storage_Temp") then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 }; @@ -149,7 +107,7 @@ switch _interactOption do { [_object] spawn EPOCH_simulSwap; }; } else { - ["Building Disallowed: Frequency Unstable", 5] call Epoch_dynamicText; + ["Building Disallowed: Frequency Unstable", 5] call Epoch_message; }; } else { _object=createVehicle[_buildClass,_pos,[],0,"CAN_COLLIDE"]; @@ -157,14 +115,14 @@ switch _interactOption do { [_object,_item] spawn EPOCH_staticMove; }; // _object spawn EPOCH_countdown; - [format["Press '%1' to drop object.", "1"], 5] call Epoch_dynamicText; + [format["Press '%1' to drop object.", "1"], 5] call Epoch_message; } else { - ["Need Energy< / t>", 5] call Epoch_dynamicText; + ["Need Energy", 5] call Epoch_message; }; }; } else { - ["World limit reached", 5] call Epoch_dynamicText; + ["World limit reached", 5] call Epoch_message; }; }; }; @@ -186,7 +144,7 @@ switch _interactOption do { // send [_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2]; - ["Fuel Added", 5] call Epoch_dynamicText; + ["Fuel Added", 5] call Epoch_message; }; }; }; @@ -201,10 +159,10 @@ switch _interactOption do { if (_item call _removeItem) then { _interactReturnOnUse call EPOCH_fnc_addItemOverflow; [_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2]; - ["Fuel Siphoned", 5] call Epoch_dynamicText; + ["Fuel Siphoned", 5] call Epoch_message; }; } else { - ["Not Enough Fuel", 5] call Epoch_dynamicText; + ["Not Enough Fuel", 5] call Epoch_message; }; } else { @@ -217,10 +175,10 @@ switch _interactOption do { if (_transportFuel > _canCapacity) then { if (_item call _removeItem) then { _interactReturnOnUse call EPOCH_fnc_addItemOverflow; - ["Fuel Siphoned", 5] call Epoch_dynamicText; + ["Fuel Siphoned", 5] call Epoch_message; }; } else { - ["Not Enough Fuel", 5] call Epoch_dynamicText; + ["Not Enough Fuel", 5] call Epoch_message; }; }; }; @@ -261,7 +219,7 @@ switch _interactOption do { [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; }; }; - ["Vehicle Partially Repaired", 5] call Epoch_dynamicText; + ["Vehicle Partially Repaired", 5] call Epoch_message; }; }; }; @@ -271,7 +229,7 @@ switch _interactOption do { if (_vehicle in _vehicles) then { if (_item call _removeItem) then { [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; - ["Vehicle Fully Repaired", 5] call Epoch_dynamicText; + ["Vehicle Fully Repaired", 5] call Epoch_message; }; }; }; @@ -283,24 +241,23 @@ switch _interactOption do { _vehicle = cursorTarget; if (_vehicle in _vehicles) then { if ("" call EPOCH_isBuildAllowed) then { - _color = getArray(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "availableTextures"); + _color = getArray(_cfgBaseBuilding >> (typeOf _vehicle) >> "availableTextures"); if !(_color isEqualTo[]) then { if (_item call _removeItem) then { // find _paintCanIndex from config - _paintCanIndex = getNumber(configfile >> "CfgMagazines" >> _item >> "textureIndex"); - _paintCanColor = getText(configfile >> "CfgMagazines" >> _item >> "colorName"); + _paintCanIndex = getNumber(_cfgItemInteractions >> "textureIndex"); + _paintCanColor = getText(_cfgItemInteractions >> "colorName"); [_vehicle,_paintCanIndex,player,Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2]; - _msg = format["Wall Painted %1", _paintCanColor]; - [format["%1", _msg], 5] call Epoch_dynamicText; + [format["Wall Painted %1", _paintCanColor], 5] call Epoch_message; }; }; } else { - ["Disallowed", 5] call Epoch_dynamicText; + ["Disallowed", 5] call Epoch_message; }; }; }; @@ -312,14 +269,14 @@ switch _interactOption do { if (damage _vehicle != 0) then { if (_item call _removeItem) then { [_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; - ["Healed other player", 5] call Epoch_dynamicText; + ["Healed other player", 5] call Epoch_message; }; }; } else { if (damage player != 0) then { if (_item call _removeItem) then { [player,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; - ["Healed yourself", 5] call Epoch_dynamicText; + ["Healed yourself", 5] call Epoch_message; }; }; }; @@ -328,11 +285,11 @@ switch _interactOption do { case 14: { // Unpack Backpack if (_item call _removeItem) then { [_interactReturnOnUse,player,Epoch_personalToken] remoteExec ["EPOCH_server_unpackBackpack",2]; - ["Unpacked backpack", 5] call Epoch_dynamicText; + ["Unpacked backpack", 5] call Epoch_message; }; }; default { - ["Found nothing", 5] call Epoch_dynamicText; + ["Found nothing", 5] call Epoch_message; }; }; diff --git a/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf b/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf index 1e766bf1..dd7b9430 100644 --- a/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf +++ b/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_debugMonitor.sqf */ private ["_customVars","_hours"]; _hours = floor(servertime/60/60); @@ -18,7 +18,7 @@ _hours = floor(servertime/60/60); _customVars = ""; { _val = missionNamespace getVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex]; - if !(_x in ["AliveTime","SpawnArray","HitPoints"]) then { + if !(_x in ["AliveTime","SpawnArray","HitPoints","MissionArray"]) then { if (_x == "Temp") then { _customVars = _customVars + format["%1: %2°F | %3°C
", _x,_val,_val call EPOCH_convertTemp]; } else { diff --git a/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf b/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf index 737ca857..438e334a 100644 --- a/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf +++ b/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_effectCrypto.sqf */ if (_this isEqualType 0) then { EPOCH_playerCrypto = _this; diff --git a/Sources/epoch_code/compile/EPOCH_fish.sqf b/Sources/epoch_code/compile/EPOCH_fish.sqf index f5922214..a5cadd5d 100644 --- a/Sources/epoch_code/compile/EPOCH_fish.sqf +++ b/Sources/epoch_code/compile/EPOCH_fish.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_fish.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_fish.sqf */ private ["_bobber","_diffTime","_fishes","_fish","_randomChanceMax","_randomChance","_castTime","_nearByBobbers","_nearByBobbersLocal","_objects","_currentPos"]; @@ -30,7 +30,7 @@ if (surfaceIsWater _currentPos) then { EPOCH_myBobber = _bobber; } else { if (_bobber distance player > 12) then { - ["No bobber found within 12m.", 5] call Epoch_dynamicText; + ["No bobber found within 12m.", 5] call Epoch_message; } else { _castTime = _bobber getVariable ["EPOCH_bobberTime", diag_tickTime]; _diffTime = (diag_tickTime - _castTime) / 10; @@ -59,10 +59,10 @@ if (surfaceIsWater _currentPos) then { _fish = selectRandom _fishes; if (_fish != "") then { _fish call EPOCH_fnc_addItemOverflow; - ["Fish Caught", 5] call Epoch_dynamicText; + ["Fish Caught", 5] call Epoch_message; }; } else { - ["Fish Got Away", 5] call Epoch_dynamicText; + ["Fish Got Away", 5] call Epoch_message; }; }; }; diff --git a/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf b/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf index 56c60579..2bb1bb41 100644 --- a/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf +++ b/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf @@ -10,12 +10,12 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_handleServerMessage.sqf Example: [_this select 1, _this select 2] remoteExec ['EPOCH_handleServerMessage',_x]; */ if (isLocalized (_this select 0)) then{ - [format["%1", format[localize (_this select 0), _this select 1]], 5] call Epoch_dynamicText; + [format["%1", format[localize (_this select 0), _this select 1]], 5] call Epoch_message; }; diff --git a/Sources/epoch_code/compile/EPOCH_interact.sqf b/Sources/epoch_code/compile/EPOCH_interact.sqf index c60ccca1..187ebdef 100644 --- a/Sources/epoch_code/compile/EPOCH_interact.sqf +++ b/Sources/epoch_code/compile/EPOCH_interact.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_interact.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_interact.sqf */ private ["_vehSlot","_storSlot"]; 0 call EPOCH_refeshUI; diff --git a/Sources/epoch_code/compile/EPOCH_lootTrash.sqf b/Sources/epoch_code/compile/EPOCH_lootTrash.sqf index 5f4a1604..e3856953 100644 --- a/Sources/epoch_code/compile/EPOCH_lootTrash.sqf +++ b/Sources/epoch_code/compile/EPOCH_lootTrash.sqf @@ -10,35 +10,33 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_lootTrash.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_lootTrash.sqf */ -private["_found", "_return", "_foundLocalAnimal", "_str", "_blood", "_foundTerminal", "_index"]; - +private["_found", "_return", "_foundLootObject", "_blood", "_foundTerminal", "_index"]; _return = false; -_config = 'CfgEpochClient' call EPOCH_returnConfig; -_configWorldInteractions = (_config >> "CfgWorldInteractions"); -_configWorldName = (_config >> worldname); - if (diag_tickTime - EPOCH_lastTrash > 2) then { EPOCH_lastTrash = diag_tickTime; + _config = 'CfgEpochClient' call EPOCH_returnConfig; + _configWorldInteractions = (_config >> "CfgWorldInteractions"); + _configWorldName = (_config >> worldname); + _interactAttributes = []; + _cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig; + _inputWorldTypes = ["bankTerminal"]; + _inputWorldTypes append getArray(_configWorldName >> "TrashClasses"); + _destroyTrashObj = objNull; _lootAnimalObj = objNull; _bankTerminal = objNull; _trashType = 0; - _objects = nearestObjects[player, [], 2]; - { _found = false; _foundTerminal = false; - _foundLocalAnimal = false; + _foundLootObject = false; if !(_x isKindOf "All") then { if (alive _x) then { - _str = str(_x); - _inputWorldTypes = ["bankTerminal"]; - _inputWorldTypes append getArray(_configWorldName >> "TrashClasses"); - _getWorldTypes = [_str, _inputWorldTypes] call EPOCH_worldObjectType; + _getWorldTypes = [str(_x), _inputWorldTypes] call EPOCH_worldObjectType; { _found = _getWorldTypes param [_inputWorldTypes find _x, false]; if (_found) exitWith{ _trashType = _forEachIndex }; @@ -46,42 +44,43 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then { _foundTerminal = _getWorldTypes param [_inputWorldTypes find "bankTerminal", false]; }; } else { + _foundObjType = typeOf _x; + _foundObjConfig = (_cfgObjectInteractions >> _foundObjType); + _foundWorldConfig = (_configWorldInteractions >> _foundObjType); if (alive _x) then { - _foundTerminal = (getNumber(_configWorldInteractions >> (typeOf _x) >> "bankTerminal") == 1); - if (_x isKindOf "Snake_random_EPOCH") then { - _foundLocalAnimal = true; - if (random 1 < 0.1) then { - EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100; - }; - }; + { + _found = (getNumber(_foundWorldConfig >> _x) == 1); + if (_found) exitWith{ _trashType = _forEachIndex }; + } forEach getArray(_configWorldName >> "TrashClasses"); + _foundTerminal = (getNumber(_foundWorldConfig >> "bankTerminal") == 1); + _foundLootObject = ((getNumber(_foundObjConfig >> "interactMode") == 3) && (getNumber (_foundObjConfig >> "aliveState") == 0)); } else { - 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 { - _foundLocalAnimal = true; - }; + _foundLootObject = (getNumber(_cfgObjectInteractions >> _foundObjType >> "interactMode") == 3); }; }; if (_found) exitWith{ _destroyTrashObj = _x }; - if (_foundLocalAnimal) exitWith{ _lootAnimalObj = _x }; + if (_foundLootObject) exitWith{ _lootAnimalObj = _x }; if (_foundTerminal) exitWith{ _bankTerminal = _x }; }forEach _objects; if (!isNull _lootAnimalObj) then { + + _cfgItemInteractions = (_cfgObjectInteractions >> (typeOf _lootAnimalObj)); + _interactAttributes = getArray(_cfgItemInteractions >> "interactAttributes"); + _bloodPos = getPosATL _lootAnimalObj; _blood = "BloodSplat" createVehicleLocal _bloodPos; _blood setPosATL _bloodPos; - EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100; + // send [_lootAnimalObj, player, Epoch_personalToken] remoteExec ["EPOCH_server_lootAnimal",2]; _return = true; - ["Object Looted", 5] call Epoch_dynamicText; }; if (!isNull _destroyTrashObj) then { [_destroyTrashObj, _trashType, player, Epoch_personalToken] remoteExec ["EPOCH_server_destroyTrash",2]; - EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100; + _interactAttributes = [["Soiled",1]]; _return = true; - ["Object Looted", 5] call Epoch_dynamicText; - // Snake Den if (random 1 < 0.04) then { _animalPos = getposATL _destroyTrashObj; @@ -112,5 +111,12 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then { }; _return = true; }; + + { + _output = _x call EPOCH_giveAttributes; + if (_output != "") then { + [_output, 5] call Epoch_message; + }; + } foreach _interactAttributes; }; _return diff --git a/Sources/epoch_code/compile/EPOCH_makeMarker.sqf b/Sources/epoch_code/compile/EPOCH_makeMarker.sqf new file mode 100644 index 00000000..47311c89 --- /dev/null +++ b/Sources/epoch_code/compile/EPOCH_makeMarker.sqf @@ -0,0 +1,38 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Create a local marker, with options. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_makeMarker.sqf + + Example: + [player, position player, "ICON", "mil_dot", "ColorBlack", [0.7,0.7], "Border", 42, "Hi, I am a marker.. yay.", 0.6,"markerName"] call EPOCH_makeMarker + + Parameter(s): + _this select 0: Target Object - Used if name not supplied + _this select 1: ARRAY / OBJECT - Marker Position (Object should be acceptable) + _this select 2 - 9: STRING(S) - Marker parameters. + + Returns: + +*/ +_paramres = params [["_trgt", str(diag_tickTime)],["_mPos", position player],["_mShape","ICON"],["_mType","mil_dot"],["_mColor","ColorBlack"],["_mSize",[0.7,0.7]],["_mBrush",""],["_mDir",0],["_mText",""],["_mAlpha",1],["_mName",""]]; +diag_log format["Epoch: ADMIN: Creating marker at %1 called %2 (Params:%3).", _mPos, _trgt, _paramres]; + +if(_mName == "")then{_mName = str(_trgt) + str(diag_tickTime);}; +_mrkr = createMarkerLocal [_mName, _mPos]; +_mName setMarkerShapeLocal _mShape; +_mName setMarkerTypeLocal _mType; +if!(_mText == "")then{_mName setMarkerTextLocal _mText;}; +_mName setMarkerSizeLocal _mSize; +_mName setMarkerColorLocal _mColor; +if!(_mBrush == "")then{_mName setMarkerBrushLocal _mBrush;}; +_mName setMarkerDirLocal _mDir; +_mName setMarkerAlphaLocal _mAlpha; diff --git a/Sources/epoch_code/compile/EPOCH_mineRocks.sqf b/Sources/epoch_code/compile/EPOCH_mineRocks.sqf index 9157d14d..52afb478 100644 --- a/Sources/epoch_code/compile/EPOCH_mineRocks.sqf +++ b/Sources/epoch_code/compile/EPOCH_mineRocks.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_mineRocks.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_mineRocks.sqf */ private ["_currentPos","_found","_foundIndex","_start","_end","_p3dName","_finalConfig","_str","_findStart","_object","_objects","_config"]; diff --git a/Sources/epoch_code/compile/EPOCH_niteLight.sqf b/Sources/epoch_code/compile/EPOCH_niteLight.sqf index 0659d75a..ea43fb4f 100644 --- a/Sources/epoch_code/compile/EPOCH_niteLight.sqf +++ b/Sources/epoch_code/compile/EPOCH_niteLight.sqf @@ -1,7 +1,7 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: Andrew Gregory Description: setup nightlight to provide improved night vision @@ -17,16 +17,17 @@ private ["_pos"]; if (!isNull EP_light) then { deleteVehicle EP_light; }; - +_config = 'CfgEpochClient' call EPOCH_returnConfig; +_nlSettings = getArray ( _config >> "niteLight"); +_nlBright = _nlSettings select 0; +_nlZ = _nlSettings select 1; _pos = (getPosATL player); -_pos set [2,(_this select 1)]; +_pos set [2,_nlZ]; EP_light = "#lightpoint" createvehiclelocal _pos; EP_light setposATL _pos; -EP_light attachTo [player]; - -EP_light setLightDayLight true; -EP_light setLightBrightness (_this select 0); -EP_light setLightAmbient[0.05, 0.05, 0.05]; -EP_light setlightcolor[0.05, 0.05, 0.05]; - +EP_light attachTo [player,[0,8.11,_nlZ]]; //offset infront of player so that the darkness is 'following' them. +EP_light setLightDayLight true; //TODO: Test if this can be turned off (Dawn / Dusk) +EP_light setLightBrightness _nlBright; +EP_light setLightAmbient [0.435, 0.439, 0.439];//Using new Colours. +EP_light setlightcolor [0.435, 0.439, 0.439]; true diff --git a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf index 56628d10..6ecb5b23 100644 --- a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf +++ b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf */ if (EPOCH_velTransform) then { if (EPOCH_playerEnergy > 0) then { @@ -20,19 +20,16 @@ if (EPOCH_velTransform) then { _up1 = vectorUp EPOCH_target; _interval = 0.1; - if ((count EP_velocityTransformation) == 4) then { + if !(EP_velocityTransformation isEqualTo []) then { EPOCH_target setvelocitytransformation[_pos1, (EP_velocityTransformation select 0), _vel1, (EP_velocityTransformation select 1), _dir1, (EP_velocityTransformation select 2), _up1, (EP_velocityTransformation select 3), _interval]; - } - else { + } else { _pos2 = player modelToWorld[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; if ((_pos2 select 2) < 0) then { _pos2 set[2, 0] }; - if !(surfaceIsWater _pos2) then { _pos2 = ATLtoASL _pos2 }; if ((_pos1 distance _pos2) > 0) then { - EPOCH_target setvelocitytransformation[_pos1, _pos2, _vel1, _vel1, _dir1, _dir1, _up1, _up1, _interval]; + EPOCH_target setvelocitytransformation[_pos1, AGLtoASL _pos2, _vel1, _vel1, _dir1, _dir1, _up1, _up1, _interval]; }; }; - } - else { + } else { EPOCH_velTransform = false; }; }; @@ -43,55 +40,55 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { if (_distance < 9) then { _stability = 0; - _color = [1, 1, 1, 0.7]; + _color = [1, 1, 1, 1]; _text = format ["Hold (%1)",EPOCH_keysAction call BIS_fnc_keyCode]; _icon = "\x\addons\a3_epoch_code\Data\UI\ui_question_ca.paa"; - _interactOption = getNumber(configFile >> "cfgVehicles" >> typeOf _currentTarget >> "interactMode"); - switch _interactOption do { + switch EPOCH_currentTargetMode do { case 0: { _stability = 100 - round(damage _currentTarget * 100); _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; - _text = ""; - _color = [100,0,_stability,0.7] call EPOCH_colorRange; + _color = [100,0,_stability,1] call EPOCH_colorRange; }; case 1: { _text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode] }]; _stability = if (EPOCH_buildMode > 0) then[{_currentTarget getVariable["stability", 100]}, {100 - round(damage _currentTarget * 100)}]; _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; - _color = [100,0,_stability,0.7] call EPOCH_colorRange; + _color = [100,0,_stability,1] call EPOCH_colorRange; }; case 2: { if (alive _currentTarget) then{ - _text = format["%1 - Press (Ctrl+%2)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }],EPOCH_keysAcceptTrade call BIS_fnc_keyCode]; + // TODO move accept trade into dynamic menu + _text = format["%1 - %2", if (isStreamFriendlyUIEnabled && isPlayer _currentTarget) then[{"Player"}, { name _currentTarget }],_text]; _stability = 100 - round(damage _currentTarget * 100); _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; - _color = [100,0,_stability,0.7] call EPOCH_colorRange; + _color = [100,0,_stability,1] call EPOCH_colorRange; } else { //_text = "Press (Inventory)"; _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa"; }; }; case 3: { + // Animals, Drone, Sappers if (!alive _currentTarget && _distance < 2) then{ - _text = format ["Gut Animal - %1",_text]; + _text = format ["Gut - %1",_text]; _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa"; - _color = [1,0,0,0.7]; + _color = [1,1,1,1]; }; }; case 4: { - _text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1) or (Inventory)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode] }]; + // Base Objects With Storage + _text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1) or (%2)",EPOCH_keysBuildMode1 call BIS_fnc_keyCode, ((actionKeys "Gear" select 0) call BIS_fnc_keyCode),_text] }]; _stability = if (EPOCH_buildMode > 0) then[{_currentTarget getVariable["stability", 100]}, {100 - round(damage _currentTarget * 100)}]; _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; - _color = [100,0,_stability,0.7] call EPOCH_colorRange; + _color = [100,0,_stability,1] call EPOCH_colorRange; }; }; if (!isNull EPOCH_stabilityTarget) then { if (([10] call EPOCH_fnc_cursorTarget) != EPOCH_stabilityTarget) then { EPOCH_stabilityTarget = objNull; - } - else { + } else { _text = ""; if ((diag_tickTime - EPOCH_lastTargetTime) >= 0.05) then { _stability = (_stability - 1) max 0; @@ -104,25 +101,20 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { case 1: {EPOCH_stabilityTarget call EPOCH_upgradeBUILD}; case 2: {EPOCH_stabilityTarget call EPOCH_fnc_SelectTargetBuild}; }; - EPOCH_stabilityTarget = objNull; }; - }; }; _pos = visiblePositionASL _currentTarget; _pos set[2, (_currentTarget modelToWorld[0, 0, 0]) select 2]; - _size = 2.5; drawIcon3D[format[_icon, _stability], _color, _pos, _size, _size, 0, _text, 0, _size / 60, "PuristaMedium"]; }; -} -else { +} else { EPOCH_stabilityTarget = objNull; }; - if (EPOCH_drawIcon3d) then { { if (!isPlayer _x) then { @@ -130,7 +122,7 @@ if (EPOCH_drawIcon3d) then { _pos set[2, (_x modelToWorld[0, 0, 0]) select 2]; _endTime = _x getVariable["EPOCH_endTime", 0]; _num = (round(_endTime - diag_tickTime)) max 0; - _color = [10,0,_num,0.7] call EPOCH_colorRange; + _color = [10,0,_num,1] call EPOCH_colorRange; drawIcon3D[format["\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa", _num], _color, _pos, 4, 4, 0, "", 1, 0.05, "PuristaMedium"]; }; }forEach EPOCH_arr_countdown; @@ -151,8 +143,7 @@ if (EPOCH_drawIcon3d) then { _pos = visiblePositionASL _x; _pos set[2, (_x modelToWorld[0, 0, 0]) select 2]; _dmg = damage _x; - _color = [0,1,_dmg,0.7] call EPOCH_colorRange; - _text = ''; + _color = [0,1,_dmg,1] call EPOCH_colorRange; _text = format['%1 : %2m', [typeOf _x,name _x] select (isPlayer _x), round(player distance _x)]; drawIcon3D["\x\addons\a3_epoch_code\Data\Member.paa", _color, _pos, 1, 1, 0, _text, 1, 0.025, "PuristaMedium"]; }; diff --git a/Sources/epoch_code/compile/EPOCH_removeMarker.sqf b/Sources/epoch_code/compile/EPOCH_removeMarker.sqf new file mode 100644 index 00000000..b842e32e --- /dev/null +++ b/Sources/epoch_code/compile/EPOCH_removeMarker.sqf @@ -0,0 +1,28 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Create a local marker, with options. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_removeMarker.sqf + + Example: + ["markerName"] call EPOCH_removeMarker + + Parameter(s): + _this select 0: STRING - Marker Name + + Returns: + +*/ +_paramres = params [["_mName",""]]; +diag_log format["Epoch: ADMIN: Removing marker %1.", _mName]; + +if(_mName == "")exitWith{}; +deleteMarkerLocal _mName; diff --git a/Sources/epoch_code/compile/EPOCH_replaceWord.sqf b/Sources/epoch_code/compile/EPOCH_replaceWord.sqf index 1a8afe3d..40fed42e 100644 --- a/Sources/epoch_code/compile/EPOCH_replaceWord.sqf +++ b/Sources/epoch_code/compile/EPOCH_replaceWord.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_replaceWord.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_replaceWord.sqf */ params ["_STRING","_needle","_replace"]; _STRING splitString _needle joinString _replace diff --git a/Sources/epoch_code/compile/EPOCH_supportCopter.sqf b/Sources/epoch_code/compile/EPOCH_supportCopter.sqf index 6f6d9f21..2fd77d97 100644 --- a/Sources/epoch_code/compile/EPOCH_supportCopter.sqf +++ b/Sources/epoch_code/compile/EPOCH_supportCopter.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_supportCopter.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_supportCopter.sqf */ private ["_aiskill","_unit","_player","_grp","_arrUnits","_arrSkills","_units"]; params ["_pos","_copter"]; @@ -22,16 +22,29 @@ _grp = createGroup RESISTANCE; _grp setBehaviour "COMBAT"; _grp setCombatMode "RED"; -// TODO: make configized -_arrUnits = ["I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"]; +_minAISkill = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "minAISkill"); +_arrUnits = getArray (getMissionConfig "CfgEpochUAVSupport" >> "unitTypes"); +_unitCount = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxUnitNum"); _arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]; +_arrVals = [ +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingAccuracy"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingShake"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingSpeed"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxEndurance"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxSpotDistance"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxSpotTime"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxCourage"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxReloadSpeed"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxCommanding"), +getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxGeneral") +]; _units = []; -for "_i" from 0 to ((count _arrUnits)-1) do { +for "_i" from 0 to (_unitCount - 1) do { - _unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, "FORM"]; + _unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, "FORM"]; _units pushBack _unit; - _unit setSkill 0.6; + //_unit setSkill 0.6; _unit setRank "Private"; _unit enableAI "TARGET"; @@ -41,9 +54,9 @@ for "_i" from 0 to ((count _arrUnits)-1) do { _unit disableAI "FSM"; for "_i" from 0 to ((count _arrSkills)-1) do { - _aiskill = ((floor(random 10))+1)/10; - if (_aiskill<0.6) then {_aiskill=0.6}; - _unit setSkill [_arrSkills select _i,_aiskill]; + _aiskill = floor random (_arrVals select _i); + if (_aiskill<_minAISkill) then {_aiskill=_minAISkill}; + _unit setSkill [_arrSkills select _i,_arrVals select _i]; }; if (_i == 0) then { diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf index eddf17e5..587fae68 100644 --- a/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf +++ b/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf @@ -1,7 +1,7 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: Andrew Gregory Description: Antagonist spawn function @@ -10,94 +10,105 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf */ -private ["_unit","_sapperNum","_config","_bomb","_targetPos","_grp","_driver","_index","_nonJammer","_nonTrader","_jammers","_jammerRange","_restricted","_disableAI"]; -params ["_unitClass"]; +private ["_loop","_unit","_sapperNum","_config","_targetPos","_grp","_driver","_index","_nonJammer","_nonTrader","_jammers","_jammerRange","_restricted","_disableAI"]; +params ["_unitClass",["_trgt",player],["_doVariable",false]]; +private _bomb = objNull; + +diag_log format["DEBUG: Antagonist %1 Spawning on %2. Do variable: %3.", _unitClass, _trgt, _doVariable]; if(random 100 < 6)then{ [] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"; }; +if(_doVariable)then{_unitClass call EPOCH_unitSpawnIncrease;};//Assumes Antagonist is required. _index = EPOCH_spawnIndex find _unitClass; -if (count(player nearEntities[_unitClass, 800]) >= (EPOCH_playerSpawnArray select _index)) exitWith{}; +_spawnLimit = EPOCH_playerSpawnArray select _index; +_currentLimit = count(_trgt nearEntities[_unitClass, 800]); +if (!_doVariable && (_currentLimit >= _spawnLimit)) exitWith { + diag_log format["DEBUG: too many %1 exiting unitspawn",_unitClass]; +}; -_nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F"]] call EPOCH_fnc_returnConfigEntryV2; -_nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F","GreatWhite_F"]] call EPOCH_fnc_returnConfigEntryV2; +_nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"]] call EPOCH_fnc_returnConfigEntryV2; +_nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"]] call EPOCH_fnc_returnConfigEntryV2; _nonTraderAIRange = ["CfgEpochClient", "nonTraderAIRange", 150] call EPOCH_fnc_returnConfigEntryV2; - +_loop = false; _unit = objNull; -_targetPos = getPosATL player; +_targetPos = getPosATL _trgt; _targetPos set [2,0]; -_jammers = []; _config = 'CfgEpochClient' call EPOCH_returnConfig; _jammerRange = getNumber(_config >> "buildingJammerRange"); _jammers = nearestObjects[_targetPos, ["PlotPole_EPOCH"], _jammerRange]; -if(count _jammers > 0 && (_unitClass in _nonJammer))exitWith{}; +if(!(_jammers isEqualTo []) && (_unitClass in _nonJammer))exitWith{}; -_restricted = []; _restricted = nearestObjects [_targetPos, ["ProtectionZone_Invisible_F"], _nonTraderAIRange]; -if(count _restricted > 0 && (_unitClass in _nonTrader))exitWith{}; +if(!(_restricted isEqualTo []) && (_unitClass in _nonTrader))exitWith{}; _disableAI = { {_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"]; }; - +_units = []; switch _unitClass do { case "Epoch_Cloak_F": { _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; _unit call _disableAI; - [_unit] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm"; + [_unit,_trgt] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm"; }; case "GreatWhite_F": { if (surfaceIsWater _targetPos) then{ - if (((_targetPos vectorDiff getPosASL player) select 2) > 25) then{ + if (((_targetPos vectorDiff getPosASL _trgt) select 2) > 25) then{ _unit = createAgent[_unitClass, _targetPos, [], 120, "FORM"]; + _units pushBack _unit; _unit call _disableAI; [_unit] execFSM "\x\addons\a3_epoch_code\System\Shark_Brain.fsm"; }; }; }; case "Epoch_Sapper_F": { - if(random 100 < 6)then{ + if(random 100 < 6 && isNull _trgt)then{ _config = 'CfgEpochSapper' call EPOCH_returnConfig; _sapperNum = 8; if(getNumber(_config >> "sapperMigrationCount") > 0)then{ _sapperNum = getNumber(_config >> "sapperMigrationCount"); }; - [player,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf"; + [_trgt,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf"; }else{ _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; _bomb = createVehicle ["Sapper_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"]; _bomb attachTo [_unit, [0,0,0],"Pelvis"]; _unit call _disableAI; - sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm"; + sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm"; _unit addEventHandler ["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"]; _unit addEventHandler ["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"]; }; }; case "Epoch_SapperB_F": { _unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"]; + _units pushBack _unit; _bomb = createVehicle["SapperB_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"]; _bomb attachTo[_unit, [0, 0, 0], "Pelvis"]; _unit call _disableAI; - sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm"; + sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm"; _unit addEventHandler["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"]; _unit addEventHandler["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"]; }; case "I_UAV_01_F": { - _targetPos = getPosATL player; + _targetPos = getPosATL _trgt; _targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos; _targetPos set[2, 600]; _unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"]; + _units pushBack _unit; addToRemainsCollector[_unit]; _unit flyInHeight 600; _grp = createGroup RESISTANCE; _driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"]; _driver moveInAny _unit; - [_unit, player] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm"; + [_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm"; }; case "PHANTOM": { [] execFSM "\x\addons\a3_epoch_code\System\Phantom_Brain.fsm"; @@ -105,9 +116,22 @@ switch _unitClass do { case "B_Heli_Transport_01_F": { [] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"; }; + case "EPOCH_RyanZombie_1": { + for "_i" from 1 to (_spawnLimit - _currentLimit) do + { + _unit = [] call EPOCH_zombieSpawn; + _units pushBack _unit; + }; + }; }; -if !(isNull _unit) then { - // send to server - [_unit] remoteExec ["EPOCH_localCleanup",2]; +if(_doVariable && (!isNull _unit) && (!isNull _trgt))then{ + _trgt setVariable ["EPOCH_antagObj", _unit, true]; + if!(isNull _bomb)then{ + _trgt setVariable ["EPOCH_antagBomb", _bomb, true]; + }; +}; + +if !(_units isEqualTo []) then { + _units remoteExec ["EPOCH_localCleanup",2]; }; diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf index 82edd566..c4a7ce5a 100644 --- a/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf +++ b/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf @@ -10,10 +10,11 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawnDecrease.sqf */ private ["_index"]; -_index = EPOCH_spawnIndex find _this; +params ["_spawnName", ["_decrease",1]]; +_index = EPOCH_spawnIndex find _spawnName; if (_index != -1) then{ - EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) - 1) max 0]; + EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) - _decrease) max 0]; }; diff --git a/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf b/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf index 52fd304b..3d40b736 100644 --- a/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf +++ b/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf @@ -10,10 +10,11 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawnIncrease.sqf */ private ["_index"]; -_index = EPOCH_spawnIndex find _this; +params ["_spawnName", ["_increase",1]]; +_index = EPOCH_spawnIndex find _spawnName; if (_index != -1) then{ - EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) + 1) min (EPOCH_spawnLimits select _index)]; + EPOCH_playerSpawnArray set[_index, ((EPOCH_playerSpawnArray select _index) + _increase) min (EPOCH_spawnLimits select _index)]; }; diff --git a/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf b/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf index 7c2ae432..6206f2e7 100644 --- a/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf +++ b/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_updateLoadingScreen.sqf */ disableSerialization; private ["_display"]; diff --git a/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf b/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf new file mode 100644 index 00000000..4479bb0f --- /dev/null +++ b/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf @@ -0,0 +1,49 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Call a zombie. (Ryans required) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_zombieSpawn.sqf + + Example: + [] call EPOCH_zombieSpawn; + + Parameter(s): + + Returns: + OBJECT - Zombie Agent +*/ +params [["_justSpawn",false]]; +private ["_zRange","_disableAI","_unitClass","_unit","_clutterPos","_zedHandle","_zMax"]; +_disableAI = {{_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];}; + +_zRange = getNumber (getMissionConfig "CfgEpochRyanZombie" >> "range"); +_zeds = getArray (getMissionConfig "CfgEpochRyanZombie" >> "zeds"); +// _zMax = getNumber (getMissionConfig "CfgEpochRyanZombie" >> "maxNumber"); + +_unitClass = selectRandom _zeds; +_unit = createAgent[_unitClass, position player, [], _zRange, "FORM"]; +// todo cleanup this object after some time +//_clutterPos = getPosATL _unit; +//if!(isOnRoad _unit)then{ + // _grave = createVehicle ["Land_Grave_dirt_F", _clutterPos, [], 0, "CAN_COLLIDE"]; +//}; +_unit call _disableAI; +_unit switchMove "AmovPercMstpSnonWnonDnon_SaluteOut"; +[player, "AmovPercMstpSnonWnonDnon_SaluteOut", Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; + +_unit setmimic "dead"; +_unit setface (selectRandom ["RyanZombieFace1", "RyanZombieFace2", "RyanZombieFace3", "RyanZombieFace4", "RyanZombieFace5"]); +removegoggles _unit; +_zedHandle = [_unit,true] execFSM "epoch_code\system\EPOCH_zombie_brain.fsm"; +_unit addEventHandler ["FiredNear", "(_this select 0) setVariable [""zFiredNear"",[_this select 1, _this select 2]];"]; +_unit addEventHandler ["Hit", "(_this select 0) setVariable [""zHit"",[_this select 1, _this select 2]];"]; + +_unit diff --git a/Sources/epoch_code/compile/both/EPOCH_compiler.sqf b/Sources/epoch_code/compile/both/EPOCH_compiler.sqf index c7a6ac07..f51b7ec4 100644 --- a/Sources/epoch_code/compile/both/EPOCH_compiler.sqf +++ b/Sources/epoch_code/compile/both/EPOCH_compiler.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/both/EPOCH_compiler.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_compiler.sqf Example: "CfgServerFunctions" call EPOCH_fnc_compiler; diff --git a/Sources/epoch_code/compile/both/EPOCH_isAny.sqf b/Sources/epoch_code/compile/both/EPOCH_isAny.sqf index b1ab463e..2aa1c8a6 100644 --- a/Sources/epoch_code/compile/both/EPOCH_isAny.sqf +++ b/Sources/epoch_code/compile/both/EPOCH_isAny.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/both/EPOCH_isAny.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/both/EPOCH_isAny.sqf Example: _return = [_item, "CfgVehicles"] call EPOCH_fnc_isAny; diff --git a/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf index 678e4100..61fc9d8f 100644 --- a/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf @@ -1,149 +1,123 @@ /* - Author: Aaron Clark - EpochMod.com +Author: Aaron Clark - EpochMod.com - Contributors: +Contributors: - Description: - Epoch Change wall state +Description: +Epoch Change wall state - Licence: - Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike +Licence: +Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike - Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf +Github: +https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_changeWallState.sqf - Example: - [_this,"NWall",1] call EPOCH_changeWallState; +Example: +[_this,"NWall",1] call EPOCH_changeWallState; - Parameter(s): - _this select 0: OBJECT - Base building object - _this select 1: STRING - Name of animation - _this select 1: SCALAR - state - 0: true = add wall - 1: false = remove wall +Parameter(s): +_this select 0: OBJECT - Base building object +_this select 1: STRING - Name of animation +_this select 1: SCALAR - state +0: true = add wall +1: false = remove wall - Returns: - NOTHING +Returns: +NOTHING */ -private ["_recipeItem","_recipeQty","_hasRecipeItems","_msg","_recipeCount","_currentCount","_numRemoved","_items","_mags","_recipe","_craftItem","_craftQty","_config","_objClass"]; -params [ - ["_object",objNull], - ["_anim",""], - ["_state",0] +private["_recipeItem", "_recipeQty", "_hasRecipeItems", "_msg", "_recipeCount", "_currentCount", "_numRemoved", "_items", "_mags", "_recipe", "_craftItem", "_craftQty", "_config", "_objClass"]; +params[ + ["_object", objNull], + ["_anim", ""], + ["_state", 0] ]; - -if !(isNull _object) then { - - _msg = "Missing Items"; - // Get config - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - - // upgradeBuildingPart - _objClass = typeOf _object; - - // Add part - if (_state == 1) then { - _recipe = getArray(_config >> _objClass >> "upgradeBuildingPart"); - - _mags = magazines player; - - _recipeCount = 0; - _numRemoved = 0; - _hasRecipeItems = true; - - // Dry Run - { - _recipeItem = _x; - _recipeQty = 1; - if (_x isEqualType []) then { - _recipeItem = _x select 0; - _recipeQty = _x select 1; - }; - _recipeCount = _recipeCount + _recipeQty; - _currentCount = { _x == _recipeItem } count _mags; - if (_currentCount < _recipeQty) exitWith { - _hasRecipeItems = false; - _msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName,_recipeCount ,_currentCount]; - }; - }forEach _recipe; - - // remove item - if (_hasRecipeItems) then { - { - _recipeItem = _x; - _recipeQty = 1; - if (_x isEqualType []) then { - _recipeItem = _x select 0; - _recipeQty = _x select 1; - }; - if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then { - _items = items player; - _currentCount = { _x == _recipeItem } count _items; - if (_currentCount >= _recipeQty) then { - for "_i" from 1 to _recipeQty do { - if (_recipeItem in _items) then { - player removeItem _recipeItem; - _numRemoved = _numRemoved + 1; - }; - }; - }; - - } else { - - _mags = magazines player; - _currentCount = { _x == _recipeItem } count _mags; - if (_currentCount >= _recipeQty) then { - for "_i" from 1 to _recipeQty do { - if (_recipeItem in _mags) then { - player removeMagazine _recipeItem; - _numRemoved = _numRemoved + 1; - }; - }; - }; - }; - - }forEach _recipe; - }; - - if (_numRemoved == _recipeCount) then { - _object animate [_anim, _state, true]; - - // push interacted object to queue to save later - EPOCH_arr_interactedObjs pushBackUnique _object; - - [format["%1 part on %2","Added",_objClass call EPOCH_itemDisplayName],5] call Epoch_dynamicText; - - [format["%1 part on %2","Added",_objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText; - - } else { - [format["%1", _msg], 5] call Epoch_dynamicText; - }; - - - - } else { - - // Remove part - _recipe = getArray(_config >> _objClass >> "removeBuildingPart"); - - _object animate [_anim, _state, true]; - - // push interacted object to save queue to save later - EPOCH_arr_interactedObjs pushBackUnique _object; - - { - _craftItem = _x; - _craftQty = 1; - if (_x isEqualType []) then { - _craftItem = _x select 0; - _craftQty = _x select 1; - }; - for "_i" from 1 to _craftQty do { - _craftItem call EPOCH_fnc_addItemOverflow; - }; - }forEach _recipe; - - [format["%1 part on %2","Removed",_objClass call EPOCH_itemDisplayName], 5] call Epoch_dynamicText; - }; - +if !(isNull _object) then{ + _msg = "Missing Items"; + // Get config + _config = 'CfgBaseBuilding' call EPOCH_returnConfig; + // upgradeBuildingPart + _objClass = typeOf _object; + // Add part + if (_state == 1) then{ + _recipe = getArray(_config >> _objClass >> "upgradeBuildingPart"); + _mags = magazines player; + _recipeCount = 0; + _numRemoved = 0; + _hasRecipeItems = true; + // Dry Run + { + _recipeItem = _x; + _recipeQty = 1; + if (_x isEqualType[]) then{ + _recipeItem = _x select 0; + _recipeQty = _x select 1; + }; + _recipeCount = _recipeCount + _recipeQty; + _currentCount = { _x == _recipeItem } count _mags; + if (_currentCount < _recipeQty) exitWith{ + _hasRecipeItems = false; + _msg = format["Need %2 %1 Have %3", _recipeItem call EPOCH_itemDisplayName, _recipeCount, _currentCount]; + }; + }forEach _recipe; + // remove item + if (_hasRecipeItems) then{ + { + _recipeItem = _x; + _recipeQty = 1; + if (_x isEqualType[]) then{ + _recipeItem = _x select 0; + _recipeQty = _x select 1; + }; + if ([_recipeItem, "CfgWeapons"] call EPOCH_fnc_isAny) then{ + _items = items player; + _currentCount = { _x == _recipeItem } count _items; + if (_currentCount >= _recipeQty) then{ + for "_i" from 1 to _recipeQty do { + if (_recipeItem in _items) then{ + player removeItem _recipeItem; + _numRemoved = _numRemoved + 1; + }; + }; + }; + } else { + _mags = magazines player; + _currentCount = { _x == _recipeItem } count _mags; + if (_currentCount >= _recipeQty) then{ + for "_i" from 1 to _recipeQty do { + if (_recipeItem in _mags) then{ + player removeMagazine _recipeItem; + _numRemoved = _numRemoved + 1; + }; + }; + }; + }; + }forEach _recipe; + }; + if (_numRemoved == _recipeCount) then{ + _object animate[_anim, _state, true]; + // push interacted object to queue to save later + EPOCH_arr_interactedObjs pushBackUnique _object; + [format["%1 part on %2", "Added", _objClass call EPOCH_itemDisplayName], 5] call Epoch_message; + } else { + [_msg, 5] call Epoch_message; + }; + } else { + // Remove part + _recipe = getArray(_config >> _objClass >> "removeBuildingPart"); + _object animate[_anim, _state, true]; + // push interacted object to save queue to save later + EPOCH_arr_interactedObjs pushBackUnique _object; + { + _craftItem = _x; + _craftQty = 1; + if (_x isEqualType[]) then{ + _craftItem = _x select 0; + _craftQty = _x select 1; + }; + for "_i" from 1 to _craftQty do { + _craftItem call EPOCH_fnc_addItemOverflow; + }; + }forEach _recipe; + [format["%1 part on %2", "Removed", _objClass call EPOCH_itemDisplayName], 5] call Epoch_message; + }; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf b/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf index 7c2dd2f4..78f6cacd 100644 --- a/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf Example: cursorTarget call EPOCH_checkBuild; @@ -33,7 +33,7 @@ if (isNull _object) exitWith{ _out }; if ((player distance _object) > 9) exitWith { _out }; if !(EPOCH_buildMode > 0) exitWith {_out}; -if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_dynamicText; _out }; +if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_message; _out }; _objType = typeOf _object; _config = 'CfgBaseBuilding' call EPOCH_returnConfig; diff --git a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf index 69860114..963c0500 100644 --- a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_countdown.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_countdown.sqf Example: _currentTarget spawn EPOCH_countdown; @@ -21,7 +21,7 @@ Returns: NOTHING */ -private ["_posObj","_savedBuildPos","_previousBuildPos","_saveCheck","_endTime","_worldspace","_class","_newObj","_startTime","_objClass"]; +private ["_cfgBaseBuilding","_posObj","_savedBuildPos","_previousBuildPos","_saveCheck","_endTime","_worldspace","_class","_newObj","_startTime","_objClass"]; if (!isNull _this) then { @@ -63,15 +63,17 @@ if (!isNull _this) then { _objClass = typeOf _this; // Spawn temporary static item insead of saving. - if (getNumber(configfile >> "CfgVehicles" >> _objClass >> "isTemporary") == 1) then { + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + if (getNumber(_cfgBaseBuilding >> _objClass >> "isTemporary") == 1) then { _worldspace = [getposATL _this, vectordir _this, vectorup _this]; deleteVehicle _this; - _class = getText(configfile >> "CfgVehicles" >> _objClass >> "staticClass"); - _newObj = createVehicle["Fireplace_EPOCH", (_worldspace select 0), [], 0, "CAN_COLLIDE"]; + _class = getText(_cfgBaseBuilding >> _objClass >> "staticClass"); + if (_class != "") then { + _newObj = createVehicle[_class, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; + _newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; + _newObj setposATL(_worldspace select 0); - _newObj setposATL(_worldspace select 0); - _newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; - // proceed to send save to server + }; } else { if (_saveCheck) then { [_this, player, Epoch_personalToken] remoteExec["EPOCH_server_saveBuilding", 2]; diff --git a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf index d604d84c..4d293d8e 100644 --- a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTargetBuild.sqf Example: cursorTarget call EPOCH_fnc_SelectTargetBuild; @@ -25,7 +25,7 @@ private ["_targeter","_stability"]; if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false }; if !(isNull EPOCH_Target) exitWith{ false }; -if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_dynamicText; false }; +if (EPOCH_playerEnergy <= 0) exitWith{ ["Need energy", 5] call Epoch_message; false }; params [["_object",objNull]]; diff --git a/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf b/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf index 1ea89712..e9c2ae11 100644 --- a/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_isBuildAllowed.sqf Example: _isAllowed = "" call EPOCH_isBuildAllowed; @@ -22,17 +22,18 @@ Returns: BOOL */ -private ["_buildingJammerRange","_buildingCountLimit","_buildingAllowed","_nearestJammer","_ownedJammerExists","_objectCount","_limitNearby","_restricted","_range","_config","_staticClass","_objType","_simulClass","_bypassJammer","_jammer","_restrictedLocations","_myPosATL"]; +private ["_cfgBaseBuilding","_buildingJammerRange","_buildingCountLimit","_buildingAllowed","_nearestJammer","_ownedJammerExists","_objectCount","_limitNearby","_restricted","_range","_config","_staticClass","_objType","_simulClass","_bypassJammer","_jammer","_restrictedLocations","_myPosATL"]; _buildingAllowed = true; _ownedJammerExists = false; _nearestJammer = objNull; // reject building if in vehicle -if (vehicle player != player)exitWith{["Building Disallowed: Inside Vehicle", 5] call Epoch_dynamicText; false }; +if (vehicle player != player)exitWith{["Building Disallowed: Inside Vehicle", 5] call Epoch_message; false }; // defaults _config = 'CfgEpochClient' call EPOCH_returnConfig; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; _buildingJammerRange = getNumber(_config >> "buildingJammerRange"); _buildingCountLimit = getNumber(_config >> "buildingCountLimit"); if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; @@ -46,9 +47,9 @@ if (_objType isEqualType objNull) then { _objType = typeOf _objType; }; -_staticClass = getText(configfile >> "CfgVehicles" >> _objType >> "staticClass"); -_simulClass = getText(configfile >> "CfgVehicles" >> _objType >> "simulClass"); -_bypassJammer = getNumber(configfile >> "CfgVehicles" >> _staticClass >> "bypassJammer"); +_staticClass = getText(_cfgBaseBuilding >> _objType >> "staticClass"); +_simulClass = getText(_cfgBaseBuilding >> _objType >> "simulClass"); +_bypassJammer = getNumber(_cfgBaseBuilding >> _staticClass >> "bypassJammer"); // Jammer _jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange*3]; @@ -57,7 +58,7 @@ if !(_jammer isEqualTo []) then { { if (alive _x) exitWith{ _buildingAllowed = false; - ["Building Disallowed: Existing Jammer Signal", 5] call Epoch_dynamicText; + ["Building Disallowed: Existing Jammer Signal", 5] call Epoch_message; }; } foreach _jammer; } else { @@ -73,12 +74,12 @@ if !(_jammer isEqualTo []) then { _ownedJammerExists = true; } else { _buildingAllowed = false; - ["Building Disallowed: Frequency Blocked", 5] call Epoch_dynamicText; + ["Building Disallowed: Frequency Blocked", 5] call Epoch_message; }; _objectCount = count nearestObjects[_nearestJammer, ["Constructions_static_F"], _buildingJammerRange]; if (_objectCount >= _buildingCountLimit) then { _buildingAllowed = false; - ["Building Disallowed: Frequency Overloaded", 5] call Epoch_dynamicText; + ["Building Disallowed: Frequency Overloaded", 5] call Epoch_message; }; }; }; @@ -87,7 +88,7 @@ if !(_buildingAllowed)exitWith{ false }; // Max object if (!_ownedJammerExists) then{ - _limitNearby = getNumber(configfile >> "CfgVehicles" >> _staticClass >> "limitNearby"); + _limitNearby = getNumber(_cfgBaseBuilding >> _staticClass >> "limitNearby"); if (_limitNearby > 0) then{ // remove current target from objects @@ -95,7 +96,7 @@ if (!_ownedJammerExists) then{ // TODO: not properly limiting simulated objects if (_objectCount >= _limitNearby) then{ _buildingAllowed = false; - [format["Building Disallowed: Limit %1", _limitNearby], 5] call Epoch_dynamicText; + [format["Building Disallowed: Limit %1", _limitNearby], 5] call Epoch_message; }; }; }; @@ -106,7 +107,7 @@ if (getNumber(_config >> "buildingRequireJammer") == 0 && _bypassJammer == 0) th if !(_objType in ["PlotPole_EPOCH", "PlotPole_SIM_EPOCH"]) then { _buildingAllowed = _ownedJammerExists; if !(_buildingAllowed) then { - ["Building Disallowed: Frequency Jammer Needed", 5] call Epoch_dynamicText; + ["Building Disallowed: Frequency Jammer Needed", 5] call Epoch_message; }; }; }; @@ -125,20 +126,20 @@ if (getNumber(_config >> "buildingNearbyMilitary") == 0) then{ }; if !(_restricted isEqualTo []) then { _buildingAllowed = false; - ["Building Disallowed: Protected Frequency", 5] call Epoch_dynamicText; + ["Building Disallowed: Protected Frequency", 5] call Epoch_message; }; _restrictedLocations = nearestLocations [player, ["NameCityCapital"], 300]; if !(_restrictedLocations isEqualTo []) then { _buildingAllowed = false; - ["Building Disallowed: Protected Frequency", 5] call Epoch_dynamicText; + ["Building Disallowed: Protected Frequency", 5] call Epoch_message; }; _myPosATL = getPosATL player; { if ((_x select 0) distance _myPosATL < (_x select 1)) exitWith { _buildingAllowed = false; - ["Building Disallowed: Protected Frequency", 5] call Epoch_dynamicText; + ["Building Disallowed: Protected Frequency", 5] call Epoch_message; }; } forEach(getArray(_config >> worldname >> "blockedArea")); diff --git a/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf b/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf index ffbb7779..7fb04098 100644 --- a/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_lockCheck.sqf Example: call EPOCH_lockCheck diff --git a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf index d714b67b..3440a405 100644 --- a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf Example: cursorTarget call EPOCH_maintainIT; @@ -22,7 +22,7 @@ NOTHING */ private ["_buildingJammerRange","_maintainCount","_rnd","_config"]; -if !(isNil "EPOCH_maintainLockout") exitWith {["Already Maintaining a base.", 5] call Epoch_dynamicText;}; +if !(isNil "EPOCH_maintainLockout") exitWith {["Already Maintaining a base.", 5] call Epoch_message;}; if (EPOCH_playerCrypto > 0) then { _config = "CfgEpochClient" call EPOCH_returnConfig; _buildingJammerRange = getNumber(_config >> "buildingJammerRange"); @@ -51,10 +51,10 @@ if (EPOCH_playerCrypto > 0) then { EPOCH_maintainLockout = nil; }; - [format["Cost %1 Krypto to maintain base.", _maintainCount], 5] call Epoch_dynamicText; + [format["Cost %1 Krypto to maintain base.", _maintainCount], 5] call Epoch_message; } else { - ["Nothing needs Maintaining", 5] call Epoch_dynamicText; + ["Nothing needs Maintaining", 5] call Epoch_message; }; } else { - ["You need Krypto to maintain a base.", 5] call Epoch_dynamicText; + ["You need Krypto to maintain a base.", 5] call Epoch_message; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf b/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf index 1979d885..86d4c03c 100644 --- a/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_removeBUILD.sqf Example: cursorTarget call EPOCH_removeBUILD; @@ -58,7 +58,7 @@ if (_stability > 0) exitWith{ if (_objType == "PlotPole_EPOCH") then { if ((_object getVariable["BUILD_OWNER", "-1"]) != getPlayerUID player) then{ _buildingAllowed = false; - ["Remove Disallowed: Frequency Blocked", 5] call Epoch_dynamicText; + ["Remove Disallowed: Frequency Blocked", 5] call Epoch_message; }; } else { @@ -75,7 +75,7 @@ else { _ownedJammerExists = true; } else { _buildingAllowed = false; - ["Remove Disallowed: Frequency Blocked", 5] call Epoch_dynamicText; + ["Remove Disallowed: Frequency Blocked", 5] call Epoch_message; }; }; }; @@ -87,6 +87,6 @@ _removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType if !(_removeParts isEqualTo[]) then{ [_this, player, Epoch_personalToken] remoteExec ["EPOCH_server_removeBUILD",2]; _return = true; - ["Removed", 5] call Epoch_dynamicText; + ["Removed", 5] call Epoch_message; }; _return diff --git a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf index ad7c2177..30385685 100644 --- a/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf Example: [_object] spawn EPOCH_simulSwap; @@ -21,7 +21,7 @@ Returns: NOTHING */ -private ["_energyCost","_allowedSnapObjects","_worldspace","_objSlot","_textureSlot","_newObj","_lastCheckTime","_rejectMove","_nearestObject","_nearestObjectRaw","_distanceNear","_previousDistanceNear","_pOffset","_snapPos","_isSnap","_snapPosition","_snapType","_snapDistance","_prevSnapDistance","_snapPointsPara","_snapPointsPerp","_snapArrayPara","_snapArrayPerp","_pos2","_direction","_vel2","_dir2","_up2","_distance","_playerdistance","_class","_create","_allowedSnapPoints","_snapObjects","_currentTarget","_onContactEH","_offset","_disallowed","_object","_objType","_return","_velocityTransformation","_distanceMod","_oemType","_config"]; +private ["_simulClassConfig","_energyCost","_allowedSnapObjects","_worldspace","_objSlot","_textureSlot","_newObj","_lastCheckTime","_rejectMove","_nearestObject","_nearestObjectRaw","_distanceNear","_previousDistanceNear","_pOffset","_snapPos","_isSnap","_snapPosition","_snapType","_snapDistance","_prevSnapDistance","_snapPointsPara","_snapPointsPerp","_snapArrayPara","_snapArrayPerp","_pos2","_direction","_vel2","_dir2","_up2","_distance","_playerdistance","_class","_create","_allowedSnapPoints","_snapObjects","_currentTarget","_onContactEH","_offset","_disallowed","_object","_objType","_return","_velocityTransformation","_distanceMod","_oemType","_cfgBaseBuilding"]; if !(isNil "EPOCH_simulSwap_Lock") exitWith{}; _object = param [0,objNull]; @@ -32,7 +32,7 @@ _objType = typeOf _object; _isSnap = false; if (EPOCH_playerEnergy <= 0) exitWith { - ["Need Energy", 5] call Epoch_dynamicText; + ["Need Energy", 5] call Epoch_message; }; if !(_objType call EPOCH_isBuildAllowed) exitWith{}; @@ -42,14 +42,17 @@ _velocityTransformation = []; _prevSnapDistance = 0; _distanceMod = 0; _oemType = (typeOf _object); -_config = (configFile >> "CfgVehicles" >> _oemType >> "simulClass"); -if (isText(_config)) then { - _class = getText(_config); + +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + +_simulClassConfig = (_cfgBaseBuilding >> _oemType >> "simulClass"); +if (isText(_simulClassConfig)) then { + _class = getText(_simulClassConfig); _create = true; - _allowedSnapPoints = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapPoints"); + _allowedSnapPoints = getArray(_cfgBaseBuilding >> _class >> "allowedSnapPoints"); _allowedSnapObjects = ["Constructions_static_F"]; - _snapObjects = configfile >> "cfgVehicles" >> _class >> "allowedSnapObjects"; - _energyCost = getNumber(configfile >> "cfgVehicles" >> _class >> "energyCost"); + _snapObjects = _cfgBaseBuilding >> _class >> "allowedSnapObjects"; + _energyCost = getNumber(_cfgBaseBuilding >> _class >> "energyCost"); if (_energyCost == 0) then { _energyCost = 0.1; }; @@ -67,9 +70,9 @@ if (isText(_config)) then { if (_objSlot != -1) then { _newObj setVariable ["BUILD_SLOT",_objSlot,true]; }; - - _newObj setposATL (_worldspace select 0); _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2]; + _newObj setposATL (_worldspace select 0); + if (_textureSlot != 0) then { [_newObj, _textureSlot, player, Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2]; }; @@ -129,8 +132,8 @@ if (isText(_config)) then { } forEach _allowedSnapObjects; }; if (!isNull _nearestObject) then { - _snapPointsPara = getArray(configfile >> "cfgVehicles" >> (typeOf _nearestObject) >> "snapPointsPara"); - _snapPointsPerp = getArray(configfile >> "cfgVehicles" >> (typeOf _nearestObject) >> "snapPointsPerp"); + _snapPointsPara = getArray(_cfgBaseBuilding >> (typeOf _nearestObject) >> "snapPointsPara"); + _snapPointsPerp = getArray(_cfgBaseBuilding >> (typeOf _nearestObject) >> "snapPointsPerp"); _snapArrayPara = []; { if (_x in _allowedSnapPoints) then { @@ -172,9 +175,6 @@ if (isText(_config)) then { }; if (_isSnap && _distance < 5) then { _pos2 = _snapPosition; - if (!surfaceIsWater _pos2) then { - _pos2 = ATLtoASL _pos2; - }; _vel2 = (velocity _nearestObject); _direction = getDir _nearestObject; if (_snapType == "perp") then { @@ -201,19 +201,16 @@ if (isText(_config)) then { }; _dir2 = [vectorDir _nearestObject, _direction] call BIS_fnc_returnVector; _up2 = (vectorUp _nearestObject); - EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2]; + EP_velocityTransformation = [AGLToASL _pos2,_vel2,_dir2,_up2]; }; }; if (!_isSnap) then { - if !(surfaceIsWater _pos2) then { - _pos2 = ATLtoASL _pos2; - }; if (EPOCH_doRotate) then { _vel2 = (velocity player); _dir2 = [vectorDir player, EPOCH_buildDirection] call BIS_fnc_returnVector; _up2 = (vectorUp player); EPOCH_doRotate = false; - EP_velocityTransformation = [_pos2,_vel2,_dir2,_up2]; + EP_velocityTransformation = [AGLToASL _pos2,_vel2,_dir2,_up2]; } else { EP_velocityTransformation = []; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf index 10ff602f..7bb2fdfa 100644 --- a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_simulSwap.sqf Example: [_object,_item] spawn EPOCH_staticMove; @@ -23,7 +23,7 @@ NOTHING */ if !(isNil "EPOCH_simulSwap_Lock") exitWith{}; -private ["_energyCost","_maxHeight","_stabilityCheck","_pos2ATL","_lastCheckTime","_rejectMove","_currentOffSet","_dir2","_up2","_nearestObject","_isSnap","_snapPosition","_snapType","_pOffset","_snapPos","_snapDistance","_snapPos1","_pos_snapObj","_direction","_pos1_snap","_pos2_snap","_ins","_EPOCH_2","_arr_snapPoints","_pos1","_offSet","_snapConfig","_snapPointsPara","_snapPointsPerp","_baselineSnapPos","_distance","_nearestObjects","_EPOCH_1","_pos2","_numberOfContacts","_worldspace","_currentTarget","_offsetZPos","_currentPos","_objSlot","_allowedSnapPoints","_allowedSnapObjects","_objType","_class","_simulClass","_snapChecks","_maxSnapDistance"]; +private ["_cfgBaseBuilding","_energyCost","_maxHeight","_stabilityCheck","_pos2ATL","_lastCheckTime","_rejectMove","_currentOffSet","_dir2","_up2","_nearestObject","_isSnap","_snapPosition","_snapType","_pOffset","_snapPos","_snapDistance","_snapPos1","_pos_snapObj","_direction","_pos1_snap","_pos2_snap","_ins","_EPOCH_2","_arr_snapPoints","_pos1","_offSet","_snapConfig","_snapPointsPara","_snapPointsPerp","_baselineSnapPos","_distance","_nearestObjects","_EPOCH_1","_pos2","_numberOfContacts","_worldspace","_currentTarget","_offsetZPos","_currentPos","_objSlot","_allowedSnapPoints","_allowedSnapObjects","_objType","_class","_simulClass","_snapChecks","_maxSnapDistance"]; params [ ["_object",objNull], ["_item",""] @@ -35,7 +35,7 @@ if (isNull _object) exitWith{ EPOCH_target = objNull; }; if (_item == "") exitWith{ EPOCH_target = objNull; }; if (EPOCH_playerEnergy <= 0) exitWith{ - ["Need Energy", 5] call Epoch_dynamicText; + ["Need Energy", 5] call Epoch_message; }; // Remove object if not allowed @@ -44,14 +44,16 @@ EPOCH_simulSwap_Lock = true; _objType = typeOf _object; -_energyCost = getNumber(configfile >> "cfgVehicles" >> _objType >> "energyCost"); +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + +_energyCost = getNumber(_cfgBaseBuilding >> _objType >> "energyCost"); if (_energyCost == 0) then { _energyCost = 0.1; }; -_class = getText(configfile >> "cfgVehicles" >> _objType >> "GhostPreview"); -_maxHeight = getNumber(configfile >> "cfgVehicles" >> _objType >> "maxHeight"); -_simulClass = getText(configFile >> "CfgVehicles" >> _objType >> "simulClass"); +_class = getText(_cfgBaseBuilding >> _objType >> "GhostPreview"); +_maxHeight = getNumber(_cfgBaseBuilding >> _objType >> "maxHeight"); +_simulClass = getText(_cfgBaseBuilding >> _objType >> "simulClass"); _snapChecks = getArray(("CfgSnapChecks" call EPOCH_returnConfig) >> _objType >> "nails"); _maxSnapDistance = 1; @@ -95,8 +97,8 @@ if (_class != "") then { _currentTarget setVariable["BUILD_SLOT", _objSlot, true]; }; - _allowedSnapPoints = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapPoints"); - _allowedSnapObjects = getArray(configfile >> "cfgVehicles" >> _class >> "allowedSnapObjects"); + _allowedSnapPoints = getArray(_cfgBaseBuilding >> _class >> "allowedSnapPoints"); + _allowedSnapObjects = getArray(_cfgBaseBuilding >> _class >> "allowedSnapObjects"); _currentOffSet = []; EP_snap = objNull; @@ -162,7 +164,7 @@ if (_class != "") then { _isSnap = false; _snapPosition = [0, 0, 0]; - _snapConfig = configfile >> "cfgVehicles" >> (typeOf _nearestObject); + _snapConfig = _cfgBaseBuilding >> (typeOf _nearestObject); _snapPointsPara = getArray(_snapConfig >> "snapPointsPara"); _snapPointsPerp = getArray(_snapConfig >> "snapPointsPerp"); @@ -255,9 +257,9 @@ if (_class != "") then { _snapPosition = ASLtoATL _snapPosition; }; - - _currentTarget setposATL _snapPosition; _currentTarget setVectorDirAndUp[_dir2, (vectorUp _nearestObject)]; + _currentTarget setposATL _snapPosition; + if ((diag_tickTime - _EPOCH_2) > 2) then { _EPOCH_2 = diag_tickTime; @@ -352,8 +354,9 @@ if (_class != "") then { deleteVehicle _currentTarget; _currentTarget = createVehicle[_simulClass, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; - _currentTarget setposATL(_worldspace select 0); _currentTarget setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; + _currentTarget setposATL(_worldspace select 0); + }; }; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf index f7a8888c..2fdab86e 100644 --- a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/building/EPOCH_upgradeBUILD.sqf Example: [cursorTarget,_index] call EPOCH_upgradeBUILD; @@ -71,7 +71,7 @@ if !(_jammer isEqualTo[]) then { } else { _buildingAllowed = false; - ["Upgrade Disallowed: Frequency Blocked", 5] call Epoch_dynamicText; + ["Upgrade Disallowed: Frequency Blocked", 5] call Epoch_message; }; }; }; @@ -123,10 +123,10 @@ if (_object isKindOf "Constructions_static_F") then { [_object,player,Epoch_upgradeIndex,Epoch_personalToken] remoteExec ["EPOCH_server_upgradeBUILD",2]; Epoch_upgradeIndex = nil; _return = true; - ["Upgraded", 5] call Epoch_dynamicText; + ["Upgraded", 5] call Epoch_message; }; } else { - [format["%1", _missingParts], 5] call Epoch_dynamicText; + [_missingParts, 5] call Epoch_message; }; }; }; diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf index a072d600..d98bf3c5 100644 --- a/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf +++ b/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf @@ -10,140 +10,122 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_bitePlayer.sqf Example: - [cursorTarget,_index] call EPOCH_upgradeBUILD; + _dog call EPOCH_client_bitePlayer; Parameter(s): - _this: OBJECT - Player + _unit: OBJECT - attacker Returns: NOTHING */ -private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal"]; -if !(isNull _this && alive _this) then { +private ["_distance","_toxicChance","_bloodpChance","_fatigueChance","_bleedAmount","_bloodpAmount","_soundEffect","_canSee","_ppEffect","_bleedChance","_soundEffectIndex","_soundEffectGlobal","_animationEffect","_animationEffectGlobal","_cfgObjectInteraction"]; +params [["_unit",objNull],["_target",player]]; +if (isNull _unit && isNull _target) exitWith {}; +if !(_target isEqualTo player) then { + // re to other player + [_unit,_target] remoteExec ["EPOCH_client_bitePlayer", _target]; +} else { - _distance = 5; - _toxicChance = 0.1; - _bleedChance = 1; - _bloodpChance = 0; - _fatigueChance = 0.1; + if !(isNull _unit && alive _unit) then { - _bleedAmount = 30; - _bloodpAmount = 2; + _cfgObjectInteraction = (('CfgObjectInteractions' call EPOCH_returnConfig) >> (typeOf _unit)); + if (isClass _cfgObjectInteraction) then { - _soundEffect = -1; - _soundEffectGlobal = false; - _canSee = false; - _ppEffect = 0; + _distance = getNumber (_cfgObjectInteraction >> "distance"); + _toxicChance = getNumber (_cfgObjectInteraction >> "toxicChance"); + _bleedChance = getNumber (_cfgObjectInteraction >> "bleedChance"); + _bloodpChance = getNumber (_cfgObjectInteraction >> "bloodpChance"); + _fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance"); + _bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount"); + _bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount"); - switch (typeOf _this) do { - case "Snake_random_EPOCH": { - _distance = 3; - _toxicChance = 0.2; - _bloodpChance = 1; - _fatigueChance = 0.5; - _bleedAmount = 30; - _bloodpAmount = 3; - _soundEffect = "snake_bite0"; - _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]); - _ppEffect = 0; - }; - case "Snake2_random_EPOCH": { - _distance = 3; - _toxicChance = 0.1; - _bloodpChance = 1; - _fatigueChance = 0.5; - _bleedAmount = 30; - _bloodpAmount = 3; - _soundEffect = "snake_bite0"; - _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]); - _ppEffect = 0; - }; - case "GreatWhite_F": { - _distance = 6; - _toxicChance = 0; - _bleedChance = 1; - _bloodpChance = 1; - _fatigueChance = 1; - _bleedAmount = 100; - _bloodpAmount = 3; - _canSee = true; - _ppEffect = 0; - }; - case "SmokeShellCustom": { - _distance = 6; - _toxicChance = 1; - _bleedChance = 0; - _bloodpChance = 1; - _fatigueChance = 1; - _bleedAmount = 0; - _bloodpAmount = 3; - _canSee = true; - _ppEffect = 0; - }; - case "Epoch_Cloak_F": { - _distance = 30; - _toxicChance = 0; - _bloodpChance = 0.9; - _fatigueChance = 0.5; - _bleedAmount = 66; - _bloodpAmount = 3; - _soundEffect = "cultist_nearby"; - _canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]); - _ppEffect = 1; - }; - }; - - if ((_this distance player) < _distance && _canSee) then { - _soundEffectIndex = EPOCH_sounds find _soundEffect; - if (_soundEffectIndex != -1) then { - _this say3D _soundEffect; - if (_soundEffectGlobal) then { - [player, _this, _soundEffectIndex, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + _soundConfigArray = getArray (_cfgObjectInteraction >> "soundEffect"); + _soundEffect = ""; + if !(_soundConfigArray isEqualTo []) then { + _soundEffect = selectRandom _soundConfigArray; }; - }; - if (random 1 < _toxicChance) then { - EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100; - }; - if (random 1 < _bleedChance) then { - player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount); - }; - if (random 1 < _bloodpChance) then { - EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190; - if (_ppEffect == 1) then { - [] spawn{ - _ppGrain = ppEffectCreate["filmGrain", 2005]; - _ppChrom = ppEffectCreate["chromAberration", 2006]; - _ppColor = ppEffectCreate["colorCorrections", 2007]; - _ppBlur = ppEffectCreate["radialBlur", 2008]; - _ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]]; - _ppColor ppEffectCommit 5; - _ppChrom ppEffectAdjust[0.01, 0.01, true]; - _ppChrom ppEffectCommit 5; - _ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15]; - _ppBlur ppEffectCommit 5; - _ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false]; - _ppGrain ppEffectCommit 1; - _ppGrain ppEffectEnable true; - _ppChrom ppEffectEnable true; - _ppColor ppEffectEnable true; - _ppBlur ppEffectEnable true; - uiSleep 2; - _ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]]; - _ppColor ppEffectCommit 5; - _ppChrom ppEffectAdjust[0, 0, true]; - _ppChrom ppEffectCommit 5; - _ppBlur ppEffectAdjust[0, 0, 0, 0]; - _ppBlur ppEffectCommit 5; - uiSleep 5; - ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur]; + _soundEffectGlobal = getNumber (_cfgObjectInteraction >> "soundEffectGlobal"); + _animConfigArray = getArray (_cfgObjectInteraction >> "animationEffect"); + _animationEffect = ""; + if !(_animConfigArray isEqualTo []) then { + _animationEffect = selectRandom _animConfigArray; + }; + _animationEffectGlobal = getNumber (_cfgObjectInteraction >> "animationEffectGlobal"); + _canSee = call compile (getText (_cfgObjectInteraction >> "canSee")); + _ppEffect = getNumber (_cfgObjectInteraction >> "ppEffect"); + + if ((_unit distance player) < _distance && _canSee) then { + + _say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; + _switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; + + if (_soundEffect isEqualType []) then { + _soundEffect params ["_soundEffectFinal",["_soundEffectRange",0]]; + playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange]; + } else { + _selectedSound = (_say3dsoundsConfig >> _soundEffect); + if (isClass _selectedSound) then { + _unit say3D _soundEffect; + if (_soundEffectGlobal isEqualTo 1) then { + [player, _unit, _soundEffect, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + }; + }; + }; + + _selectedMove = (_switchMovehandlerConfig >> _animationEffect); + if (isClass _selectedMove) then { + _unit switchMove _animationEffect; + if (_animationEffectGlobal isEqualTo 1) then { + [player, _animationEffect, Epoch_personalToken, _unit] remoteExec ["EPOCH_server_handle_switchMove",2]; + }; + }; + + if (random 1 < _toxicChance) then { + EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100; + }; + if (random 1 < _bleedChance) then { + player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount); + }; + if (random 1 < _bloodpChance) then { + EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190; + // todo configize + if (_ppEffect == 1) then { + [] spawn{ + _ppGrain = ppEffectCreate["filmGrain", 2005]; + _ppChrom = ppEffectCreate["chromAberration", 2006]; + _ppColor = ppEffectCreate["colorCorrections", 2007]; + _ppBlur = ppEffectCreate["radialBlur", 2008]; + _ppColor ppEffectAdjust[1, 1, 0, [1.5, -1, -1.5, 0.5], [5, 3.5, -5, -0.5], [-3, 5, -5, -0.5]]; + _ppColor ppEffectCommit 5; + _ppChrom ppEffectAdjust[0.01, 0.01, true]; + _ppChrom ppEffectCommit 5; + _ppBlur ppEffectAdjust[0.02, 0.02, 0.15, 0.15]; + _ppBlur ppEffectCommit 5; + _ppGrain ppEffectAdjust[0.1, -1, 0.05, 0.05, 2, false]; + _ppGrain ppEffectCommit 1; + _ppGrain ppEffectEnable true; + _ppChrom ppEffectEnable true; + _ppColor ppEffectEnable true; + _ppBlur ppEffectEnable true; + uiSleep 2; + _ppColor ppEffectAdjust[1, 1, -0.01, [0.0, 0.0, 0.0, 0.0], [1.5, 1, 1.2, 0.6], [0.199, 0.587, 0.114, 0.20]]; + _ppColor ppEffectCommit 5; + _ppChrom ppEffectAdjust[0, 0, true]; + _ppChrom ppEffectCommit 5; + _ppBlur ppEffectAdjust[0, 0, 0, 0]; + _ppBlur ppEffectCommit 5; + uiSleep 5; + ppEffectDestroy[_ppGrain, _ppChrom, _ppColor, _ppBlur]; + }; + }; + }; + if (random 1 < _fatigueChance) then { + player setFatigue 1; }; }; }; - if (random 1 < _fatigueChance) then { - player setFatigue 1; - }; }; }; diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf index a4ae36f6..c26569ba 100644 --- a/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf +++ b/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_earthQuake.sqf Example: [_location] call EPOCH_client_earthQuake diff --git a/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf b/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf index e60b4f66..2e5ae59e 100644 --- a/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf +++ b/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/environment/EPOCH_client_loadAnimalBrain.sqf Example: call EPOCH_client_loadAnimalBrain; diff --git a/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf b/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf index 132ab553..a55e624e 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_colorRange.sqf Example: _color = [_min,_max,_value] call EPOCH_colorRange; diff --git a/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf b/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf index e1e6ffe9..587ac4cb 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_convertTemp.sqf Example: _celsius = [75,true] call EPOCH_convertTemp; // 24 diff --git a/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf b/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf index db6d10d4..26b15570 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf Example: _sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf index 855a2f3e..491ca50e 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf Example: call EPOCH_fnc_Weather; @@ -37,7 +37,7 @@ _wetsuit = (getText(configfile >> "cfgweapons" >> uniform player >> "itemInfo" > if (vehicle player == player) then { _playerPosATL = getPosATL player; - if (surfaceIsWater _playerPosATL) then { + if (EPOCH_playerIsSwimming) then { // do nothing if player is wearing a wetsuit if (!_wetsuit) then { if (_waterTemp <= 50) then { diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf index b7cd1940..89b4eaf6 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf Example: _fish call EPOCH_fnc_addItemOverflow; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf index fbef1a51..2de557ae 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_addItemOverflow.sqf Example: _target = [10] call EPOCH_fnc_cursorTarget; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf index ab19c739..af87f922 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf @@ -4,13 +4,13 @@ Contributors: Description: - Epoch cursorTarget anywhere + Direction from one object to another plus a degree value to chose a random direction within. Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_dirToFuzzy.sqf Example: _dirToF = [_pos,_destination,44] call EPOCH_fnc_dirToFuzzy; @@ -18,7 +18,7 @@ Parameter(s): _this select 0: (ARRAY or OBJECT) - position1 _this select 1: (ARRAY or OBJECT) - position2 - _this select 2: NUMBER - random spread [optional: default 32] + _this select 2: NUMBER - random spread [optional: default 32] max 360 Returns: SCALAR - (direction 0-360) diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf new file mode 100644 index 00000000..09118012 --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Dynamically call an FSM and return handle. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_dynamicFSM.sqf + + Example: + _handle = [] call EPOCH_fnc_dynamicFSM.; + + Parameter(s): + _this select 0: STRING - FSM Name (without the .fsm) + _this select 1: STRING - FSM Path e.g. epoch_code\system + _this select 2: ARRAY - Vars to pass to FSM + + Returns: + HANDLE +*/ +params ["_file","_path",["_vars",[]],["_ret",-1]]; +call compile format[" +_ret = _vars execFSM ""%1\%2.fsm""; +",_path,_file]; +_ret diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf index 4a1c0a90..0792473b 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_findRandomPosBehind.sqf Example: _moveTo = [24,4,142,_trgt] call EPOCH_fnc_findRandomPosBehind; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf index 789aec25..fbb4b769 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf @@ -11,7 +11,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_findSafePos.sqf Example: _moveTo = [_centre, _min_distance, _max_distance, _height, _onRoad] call EPOCH_fnc_findSafePos; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf index 0cea3d49..bd784401 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf @@ -4,13 +4,13 @@ Contributors: Description: - Picks a random spot relative to the target with some randomness. (Unused) + Picks a random spot relative to the target with some randomness. Used in Sapper Brain Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_findSapperStalkLocation.sqf Example: _moveTo = [_centre, _min_distance, _max_distance, _height, _onRoad] call EPOCH_fnc_findSafePos; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf index f2f2c842..616e2d85 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_isInsideBuilding.sqf Example: _inBuilding = call EPOCH_fnc_isInsideBuilding; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf new file mode 100644 index 00000000..ad50739e --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf @@ -0,0 +1,65 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Switch player camera to antagonist. Currently only for use after player death. Return to player body when finished or revived. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf + + Example: + [_antagonistObj,_plyrObj] call EPOCH_fnc_playerAttachToAntagonist; + + Parameter(s): + _this select 0: OBJECT - Antagonist Object + _this select 1: OBJECT - Player Object + + Returns: + +*/ +params ["_player", "_antagonist", "_bomb","_killer"]; +private _tapDiag = "TapOut"; +if (visibleMap) then {openMap [false, true];}; +_antagonist switchCamera "Internal"; +if(isNil "_bomb")then{_bomb = objNull;}; +if(typeOf _antagonist == "Epoch_Sapper_F" || typeOf _antagonist == "Epoch_SapperB_F")then{_tapDiag = "TapOut3";}; +createDialog _tapDiag; + +diag_log format["Epoch: DEBUG: Attaching player %1 to %2, bomb found: %3",_player,_antagonist,_bomb]; +[_antagonist,_tapDiag,_player,_killer] spawn{ +_antagonist2 = _this select 0; +_tapDiag2 = _this select 1; +_player2 = _this select 2; +_killer2 = _this select 3; +private _doingGroan = false; +private _doingBoom = false; +private _groanTime = diag_tickTime; + while {!alive _player2} do { + if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; }; + if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;}; + if (isObjectHidden _player2) exitWith {[_player2,Epoch_personalToken,_killer2, "EPOCH_antagObj", objNull, true] remoteExec ["EPOCH_server_playerSetVariable",2];closeDialog 2;};//revivial + if((!alive _antagonist2)) exitWith { + [_player2,Epoch_personalToken,_killer2, "EPOCH_antagObj", objNull, true] remoteExec ["EPOCH_server_playerSetVariable",2]; + uiSleep 3;(findDisplay 46) closeDisplay 0;}; + if(_player2 getVariable["EPOCH_callGroan",false])then{ + _player2 setVariable["EPOCH_callGroan",false]; + _doingGroan = true; + _groanTime = diag_tickTime; + [_player2,Epoch_personalToken,_killer2, "EPOCH_callGroan", true, false] remoteExec ["EPOCH_server_playerSetVariable",2]; + }; + if(_player2 getVariable["EPOCH_callBoom",false])then{ + _player2 setVariable["EPOCH_callBoom",false]; + _doingBoom = true; + [_player2,Epoch_personalToken,_killer2, "EPOCH_callBoom", true, false] remoteExec ["EPOCH_server_playerSetVariable",2]; + }; + if(_doingGroan && ctrlEnabled 1602)then{ctrlEnable[1602,false];}; + if(_doingGroan && !(ctrlEnabled 1602) && diag_tickTime - _groanTime > 16)then{ctrlEnable[1602,true];_doingGroan=false;}; + if(_doingBoom && ctrlEnabled 1601)then{ctrlEnable[1601,false];}; + uiSleep 0.1; + }; +}; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf index 61644cbc..f0a63744 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf @@ -1,7 +1,7 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: Andrew Gregory Description: Player death handler @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf Example: player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}]; @@ -22,6 +22,8 @@ Returns: BOOL */ +private _tapDiag = "TapOut"; +private _doRevenge = false; params ["_unit", "_killer"]; // test ejecting unit from vehicle if dead client side @@ -36,21 +38,26 @@ EPOCH_buildMode = 0; EPOCH_snapDirection = 0; EPOCH_Target = objNull; +if(player != _killer && (isPlayer _killer || isPlayer (effectiveCommander _killer)))then{_tapDiag = "TapOut2";};//TODO: vehicle check may not always be reliable + if (Epoch_canBeRevived) then { setPlayerRespawnTime 600; - createDialog "TapOut"; + createDialog _tapDiag; } else { setPlayerRespawnTime 15; - ["You can be just revived once per life!", 5] call Epoch_dynamicText; + ["You can be just revived once per life!", 5] call Epoch_message; }; -[] spawn{ +[_killer, _tapDiag] spawn{ + _killer2 = _this select 0; + _tapDiag2 = _this select 1; while {!alive player} do { if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; }; - if (playerRespawnTime > 15 && !dialog) then { - createDialog "TapOut"; - }; + if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;}; + if (isObjectHidden player) then {closeDialog 2;}; + if(player getVariable["EPOCH_doBoom",false])exitWith{player setVariable ["EPOCH_doBoom",nil];[player] call EPOCH_fnc_playerDeathDetonate;}; + if(player getVariable["EPOCH_doMorph",false])exitWith{player setVariable ["EPOCH_doMorph",nil];[selectRandom (getArray (getMissionConfig "CfgEpochClient" >> "deathMorphClass")),player,_killer2] call EPOCH_fnc_playerDeathMorph;}; uiSleep 0.1; }; }; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf new file mode 100644 index 00000000..6ce0e21a --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf @@ -0,0 +1,36 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Detonate player body. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf + + Example: + [] call EPOCH_fnc_playerDeathDetonate; + + Parameter(s): + + Returns: + BOOM +*/ +params ["_player"]; +openmap [false,false]; +closeDialog 2; +[_player, Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayerDetonate",2]; +deleteVehicle player; +player setVariable ["doneBoom", true]; + +[] spawn{ + while {!alive player} do { + //Handle clean up + if(player getVariable["doneBoom",false])exitWith{player setVariable ["doneBoom",nil]; uiSleep 5; (findDisplay 46) closeDisplay 0;}; + uiSleep 0.1; + }; +}; \ No newline at end of file diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf new file mode 100644 index 00000000..1a93e246 --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf @@ -0,0 +1,38 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Morph dead player body into an antagonist, called from player death GUI. Dead player camera will attach to antagonist. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf + + Example: + [] call EPOCH_fnc_playerDeathMorph; + + Parameter(s): + _this select 0: STRING - Antagonist class + _this select 1: OBJECT - Player (Victim) + _this select 2: OBJECT - Target Player (Killer) + + Returns: +*/ +params ["_antagonistClass", "_player", "_killer"]; + +openmap [false,false]; +[_killer,_antagonistClass,true,_player, Epoch_personalToken] remoteExec ["EPOCH_server_triggerAntagonist",2]; + +[_killer,_player] spawn{ +_killer2 = _this select 0; +_player2 = _this select 1; + while {!alive player} do { + if (isObjectHidden _player2) then {closeDialog 2;}; + if!(isNull (_killer2 getVariable["EPOCH_antagObj",objNull])) exitWith {closeDialog 2;[_player2,(_killer2 getVariable["EPOCH_antagObj",objNull]),(_killer2 getVariable["EPOCH_antagBomb",objNull]),_killer2] call EPOCH_fnc_playerAttachToAntagonist;}; + uiSleep 0.1; + }; +}; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf index d5b0902c..30d1fc56 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerFired.sqf Example: player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}]; @@ -27,23 +27,21 @@ Returns: NOTHING */ -private ["_heal","_highestDMG","_currentHIT","_currentDMG","_newDMG","_attachments","_cursorTarget","_repaired","_gesture","_droneChance"]; +private ["_heal","_highestDMG","_currentHIT","_currentDMG","_newDMG","_attachments","_cursorTarget","_repaired","_gesture","_nuisanceLevel"]; params ["_unit","_weapon","_muzzle","_mode","_ammo","_magazine","_projectile"]; +EPOCH_lastFiredLocation = getPosATL player; switch true do { case (_ammo isKindOf "B_EnergyPack"): { if (!isNull cursorTarget) then { _cursorTarget = cursorTarget; _repaired = false; if ((player distance _cursorTarget) <= 6) then { - _attachments = handgunItems player; _heal = false; - if (_cursorTarget isKindOf "Man") then { if ("Heal_EPOCH" in _attachments) then { _heal = true; }; - if ("Defib_EPOCH" in _attachments) then { if (!alive _cursorTarget) then { [_cursorTarget,player,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2]; @@ -65,11 +63,8 @@ switch true do { _currentHIT = _forEachIndex; }; }forEach((getAllHitPointsDamage _cursorTarget) param[2,[]]); - if (_highestDMG > 0) then { - _newDMG = ((_highestDMG - 0.5) max 0); - if (local _cursorTarget) then { [_cursorTarget,[_currentHIT,_newDMG]] call EPOCH_client_repairVehicle; } else { @@ -84,13 +79,11 @@ switch true do { }; }; }; - case (_ammo isKindOf "B_Hatchet"): { _gesture = selectRandom ["GestureSwing0", "GestureSwing1", "GestureSwing2"]; player playActionNow _gesture; call EPOCH_chopWood; }; - case (_ammo isKindOf "B_Swing" || _ammo isKindOf "B_Stick") : { player playActionNow "SledgeSwing"; call EPOCH_mineRocks; @@ -101,23 +94,22 @@ switch true do { call EPOCH_fish; }; }; - case (_ammo isKindOf "ChainSaw_Bullet"): { call EPOCH_chopWood; }; - default { - _droneChance = 2; - if !(EPOCH_nearestLocations isEqualTo[]) then{ - _droneChance = _droneChance * 2; + _ammoConfig = (configFile >> "CfgAmmo" >> _ammo); + _nuisanceLevel = ceil(getNumber (_ammoConfig >> "audibleFire") * getNumber (_ammoConfig >> "caliber")); + // reduce when not in a city or town + if (EPOCH_nearestLocations isEqualTo[]) then{ + _nuisanceLevel = _nuisanceLevel / 2; }; - // reduce chance to spawn by 50% if weapon has silencer + // reduce if using a silencer if (((player weaponAccessories _muzzle) select 0) != "") then{ - _droneChance = _droneChance / 2; - }; - // 2% chance (+ 4% chance if in city) to spawn drone if shot fired (1% - 2% Half if using silencer) - if (random EPOCH_droneRndChance < _droneChance) then{ - "I_UAV_01_F" call EPOCH_unitSpawnIncrease; + _nuisanceLevel = _nuisanceLevel / 2; }; + // Nuisance System 0.1 + (EPOCH_customVarLimits select (EPOCH_customVars find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]]; + EPOCH_playerNuisance = ((EPOCH_playerNuisance + _nuisanceLevel) min _playerLimitMax) max _playerLimitMin; }; }; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf new file mode 100644 index 00000000..940bd820 --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + call setVariable from client. Allows the server to call and set a local variable on an object via a player without broadcasting. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf + + Example: + [_obj,_var,_value,_local] call EPOCH_fnc_playerSetVariable; + + Parameter(s): + _this select 0: OBJECT - Object to attach variable to + _this select 1: STRING - Variable Name + _this select 2: ANYTHING - Variable Value + _this select 3: BOOLEAN - Broadcast ? + Returns: + +*/ + +params ["_obj", "_var", "_value", "_local"]; +if(isNil "_local")then{_local = false;}; +diag_log format["Epoch: ADMIN: Attempting Set variable [%2,%3,%4] on %1.", _obj, _var, _value,_local]; +_obj setVariable [_var,_value,_local]; \ No newline at end of file diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf index db003a57..111df35c 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_stringLeft.sqf Example: _trimmedStr = ["String In",3] call EPOCH_fnc_stringLeft; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf new file mode 100644 index 00000000..50c0c9e6 --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf @@ -0,0 +1,27 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Send server message to trigger antagonist on another client. Server returns antagonist object where required. Designed to support additional tap out options (Morphing). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf + + Example: + [_killer, "Epoch_Sapper_F", player, true] call EPOCH_fnc_triggerAntagonist; + + Parameter(s): + _this select 0: Target client to trigger antagonist on. (Killer) + _this select 1: Antagonist class to spawn, e.g. "Epoch_Sapper_F", see EPOCH_unitSpawn.sqf for full list + _this select 2: On target, set variable containing antagonist object. Allows other players / requesting player to attach to antagonist object. + + Returns: + +*/ +params ["_target","_antagonist","_doVariable"]; +[_target,_antagonist,_doVariable,player,Epoch_personalToken] remoteExec ["EPOCH_server_triggerAntagonist",2]; \ No newline at end of file diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf new file mode 100644 index 00000000..36d45a9e --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Divide a Vector (Average Position / Vector). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_fnc_vectorDivide.sqf + + Example: + _averageVector = [[15,15,3],3] call EPOCH_fnc_vectorDivide; + + Parameter(s): + _this select 0: ARRAY - Vector / Position + _this select 1: INT - Divide by + + Returns: + ARRAY - Averag Vector +*/ +params ["_vec","_div",["_doZ",true],["_out",[0,0,0]]]; +_out set [0,_vec select 0 / _div]; +_out set [1,_vec select 1 / _div]; +_out set [2,0]; +if(_doZ)then{_out set [2,_vec select 2 / _div];}; +_out diff --git a/Sources/epoch_code/compile/functions/EPOCH_giveAttributes.sqf b/Sources/epoch_code/compile/functions/EPOCH_giveAttributes.sqf new file mode 100644 index 00000000..1e900c14 --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_giveAttributes.sqf @@ -0,0 +1,35 @@ +// EPOCH_giveAttributes + +private ["_return","_addPlus","_editableVars","_selectedVar","_varName","_celcuis","_celcuisNew","_customVarIndex","_limits","_currentVal","_newValue"]; +params ["_selectedVarName",["_data",0],["_randomizeData",0]]; +_addPlus = if (_data > 0) then {"+"} else {""}; +_return = ""; +_customVarIndex = EPOCH_customVars find _selectedVarName; +if (_customVarIndex != -1) then { + _varName = format["EPOCH_player%1",_selectedVarName]; + _limits = EPOCH_customVarLimits select _customVarIndex; + _limits params [["_max",100],["_min",0]]; + if (_max isEqualType "") then { + _max = missionNamespace getVariable [_max, 0]; + }; + if (_min isEqualType "") then { + _min = missionNamespace getVariable [_min, 0]; + }; + _currentVal = missionNamespace getVariable [_varName, EPOCH_defaultVars select _customVarIndex]; + if (_randomizeData isEqualTo 1) then { + _data = round(random _data); + }; + if (_data != 0) then { + _newValue = ((_currentVal + _data) min _max) max _min; + missionNamespace setVariable [_varName, _newValue]; + if (_selectedVarName == "Temp") then { + _celcuis = _data call EPOCH_convertTemp; + _celcuisNew = _newValue call EPOCH_convertTemp; + _return = format["%1: %2%3 (%4 °F) %2%5 (%6 °C)",(localize format["str_epoch_pvar_%1",_selectedVarName]),_addPlus,_data,_newValue,_celcuis,_celcuisNew]; + } else { + _return = format["%1: %2%3 (%4/%5)", (localize format["str_epoch_pvar_%1",_selectedVarName]), _addPlus, _data, _newValue, _max]; + }; + }; +}; + +_return diff --git a/Sources/epoch_code/compile/functions/EPOCH_itemData.sqf b/Sources/epoch_code/compile/functions/EPOCH_itemData.sqf index fbbfdc5a..b3d4b6da 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_itemData.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_itemData.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf Example(s): _displayName = _item call epoch_itemData; // string diff --git a/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf b/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf index e989d325..af8d503b 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_itemDisplayName.sqf Example: _displayName = _part call EPOCH_itemDisplayName; diff --git a/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf b/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf index 4e24f1ca..d4e1de62 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_itemPicture.sqf Example: _picture = _part call EPOCH_itemPicture; diff --git a/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf b/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf index f3ab7eff..84ad1c16 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf Example: true call EPOCH_pushCustomVar; diff --git a/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf b/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf index bbf5c23a..a4467f8a 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_returnConfig.sqf Example: _config = 'CfgCrafting' call EPOCH_returnConfig; diff --git a/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf b/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf index e9e6f8a6..1c125229 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_worldObjectType.sqf Example: _isTree = [_objectSting, "tree"] call EPOCH_worldObjectType; diff --git a/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf b/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf index 20fb0598..9cafaf15 100644 --- a/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf +++ b/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/Epoch_SortArrayByDistance.sqf Example: _sorted = [_unsorted, _inPosition] call Epoch_SortArrayByDistance; diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf index 5289026e..a963444f 100644 --- a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf +++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf Example: _this call EPOCH_KeyDown; @@ -42,13 +42,13 @@ if (_dikCode in [0x02,0x03,0x04,0x58,0x57,0x44,0x43,0x42,0x41,0x40,0x3F,0x3E,0x3 if (_ctrl && _dikCode == EPOCH_keysVolumeUp) then { EPOCH_soundLevel = (EPOCH_soundLevel + 0.1) min 1; 5 fadeSound EPOCH_soundLevel; - [format["Internal sound level: %1%2 ", EPOCH_soundLevel * 100, "%"], 5] call Epoch_dynamicText; + [format["Internal sound level: %1%2", EPOCH_soundLevel * 100, "%"], 5] call Epoch_message; }; // lower vol if (_ctrl && _dikCode == EPOCH_keysVolumeDown) then { EPOCH_soundLevel = (EPOCH_soundLevel - 0.1) max 0.1; 5 fadeSound EPOCH_soundLevel; - [format["Internal sound level: %1%2 ", EPOCH_soundLevel * 100,"%"], 5] call Epoch_dynamicText; + [format["Internal sound level: %1%2", EPOCH_soundLevel * 100,"%"], 5] call Epoch_message; }; // ESC default to cancel @@ -59,7 +59,7 @@ if (_dikCode == 0x01) then { } else { EPOCH_Target = objNull; }; - ["Build Canceled", 5] call Epoch_dynamicText; + ["Build Canceled", 5] call Epoch_message; }; if !(EPOCH_arr_interactedObjs isEqualTo[]) then { [EPOCH_arr_interactedObjs] remoteExec["EPOCH_server_save_vehicles", 2]; @@ -71,9 +71,9 @@ if (_dikCode == 0x01) then { if (_dikCode == EPOCH_keysDebugMon) then { EPOCH_debugMode = !EPOCH_debugMode; if (EPOCH_debugMode) then { - ["Debug Mode Enabled", 5] call Epoch_dynamicText; + ["Debug Mode Enabled", 5] call Epoch_message; } else { - ["Debug Mode Disabled", 5] call Epoch_dynamicText; + ["Debug Mode Disabled", 5] call Epoch_message; hintSilent ""; }; _handled = true; @@ -100,7 +100,7 @@ if (vehicle player == player) then { _disableBuildMode = { EPOCH_buildMode = 0; EPOCH_snapDirection = 0; - ["Build Mode Disabled", 5] call Epoch_dynamicText; + ["Build Mode Disabled", 5] call Epoch_message; EPOCH_Target = objNull; EPOCH_Z_OFFSET = 0; EPOCH_X_OFFSET = 0; @@ -113,10 +113,10 @@ if (vehicle player == player) then { if (EPOCH_playerEnergy > 0) then { EPOCH_stabilityTarget = objNull; EPOCH_buildMode = 1; - ["Build Mode Enabled: Snap alignment", 5] call Epoch_dynamicText; + ["Build Mode Enabled: Snap alignment", 5] call Epoch_message; EPOCH_buildDirection = 0; } else { - ["Need Energy", 5] call Epoch_dynamicText; + ["Need Energy", 5] call Epoch_message; }; }; _handled = true; @@ -128,11 +128,11 @@ if (vehicle player == player) then { if (EPOCH_playerEnergy > 0) then { EPOCH_stabilityTarget = objNull; EPOCH_buildMode = 2; - ["Build Mode Enabled: Free", 5] call Epoch_dynamicText; + ["Build Mode Enabled: Free", 5] call Epoch_message; EPOCH_buildDirection = 0; } else { - ["Need Energy", 5] call Epoch_dynamicText; + ["Need Energy", 5] call Epoch_message; }; }; _handled = true; @@ -140,7 +140,7 @@ if (vehicle player == player) then { // H - holster unholster if (_dikCode == EPOCH_keysHolster) then { - if (player nearObjects["Const_All_Walls_F", 3] isEqualTo[]) then { + if (player nearObjects["Const_All_Walls_F", 3] isEqualTo[] && speed player == 0) then { if (currentweapon player != "") then { EPOCH_Holstered = currentweapon player; player action["switchWeapon", player, player, 100]; @@ -158,10 +158,10 @@ if (vehicle player == player) then { EPOCH_snapDirection = EPOCH_snapDirection + 1; if (EPOCH_snapDirection > 3) then { EPOCH_snapDirection = 0; - ["SNAP DIRECTION MODE: 0", 5] call Epoch_dynamicText; + ["SNAP DIRECTION MODE: 0", 5] call Epoch_message; } else { - [format["SNAP DIRECTION MODE: %1", EPOCH_snapDirection], 5] call Epoch_dynamicText; + [format["SNAP DIRECTION MODE: %1", EPOCH_snapDirection], 5] call Epoch_message; }; _handled = true; }; @@ -181,26 +181,6 @@ if (vehicle player == player) then { }; }; - if (_dikCode == EPOCH_keysAcceptTrade) then { - if (_ctrl) then { - if (!isNull cursorTarget) then { - if ((player distance cursorTarget) < 6) then { - if (cursorTarget != player && isPlayer cursorTarget && vehicle cursorTarget == cursorTarget) then { - [cursorTarget, player, Epoch_personalToken] call EPOCH_startTRADEREQ; - }; - }; - }; - } else { - if !(isNull EPOCH_pendingP2ptradeTarget && isPlayer EPOCH_pendingP2ptradeTarget) then { - if ((player distance EPOCH_pendingP2ptradeTarget) < 6) then { - EPOCH_p2ptradeTarget = EPOCH_pendingP2ptradeTarget; - call EPOCH_startTrade; - }; - }; - }; - _handled = true; - }; - if (_dikCode in(actionKeys "moveFastForward") || _dikCode in(actionKeys "moveForward")) then { if ((diag_tickTime - EPOCH_lastAGTime) > 1) then { EPOCH_lastAGTime = diag_tickTime; @@ -235,12 +215,12 @@ if (vehicle player == player) then { if (isTouchingGround player && speed player > 10) then { if ((primaryWeapon player != "") && (currentWeapon player == primaryWeapon player)) then { player switchMove "AovrPercMrunSrasWrflDf"; - [player, 1, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; + [player, "AovrPercMrunSrasWrflDf", Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; _handled = true; } else { if (currentWeapon player == "") then { player switchMove "epoch_unarmed_jump"; - [player, 2, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; + [player, "epoch_unarmed_jump", Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2]; _handled = true; }; }; @@ -261,7 +241,7 @@ if (vehicle player == player) then { } else { EPOCH_Target = objNull; }; - ["Build Canceled", 5] call Epoch_dynamicText; + ["Build Canceled", 5] call Epoch_message; }; if (isTouchingGround player) then { // _handled = call EPOCH_lootTrash; @@ -281,6 +261,7 @@ if (_dikCode in (actionKeys "TacticalView")) then { }; if (_dikCode in (actionKeys "NightVision")) then { if (EPOCH_playerEnergy == 0) then { + ["Night Vision Goggles: Need Energy", 5] call Epoch_message; _handled = true; }; }; diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf index b88d88ce..350da4e0 100644 --- a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf +++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf Example: _this call EPOCH_KeyUp; diff --git a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf index d3473fd5..16c9317d 100644 --- a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf +++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/interface_event_handlers/EPOCH_onChar.sqf Example: [_control,_maxLimit] call EPOCH_onChar; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf b/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf index a37d5442..8fdc776e 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_factorArmor.sqf Example: _gearArmor = ([_passThrough,_armor] call EPOCH_factorArmor); diff --git a/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf b/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf index 51b496c4..700d51ac 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_gearArmorCalc.sqf Example: _vestArmor = (vest player) call EPOCH_gearArmorCalc; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf b/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf index 5327189c..4ea07b3c 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf Example: player addEventHandler ["InventoryOpened", { diff --git a/Sources/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf b/Sources/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf index c24e7b90..d9f2f112 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_itemInteractClick.sqf */ private ["_data","_confData","_type","_interactOption","_buttonTXT","_magCount","_text","_pic","_display","_useBtn","_config","_craftingConfig"]; _this call EPOCH_selectInventoryItem; @@ -19,17 +19,17 @@ _data = EPOCH_InteractedItem select 1; _interactOption = 0; _buttonTXT = ""; _magCount = 1; - _config = (configfile >> "CfgWeapons" >> _data); +_cfgItemInteractions = (('CfgItemInteractions' call EPOCH_returnConfig) >> _data); if (isClass (_config)) then { _type = getNumber (_config >> "type"); - _interactOption = getNumber (_config >> "interactAction"); - _buttonTXT = getText(_config >> "interactText"); + _interactOption = getNumber (_cfgItemInteractions >> "interactAction"); + _buttonTXT = getText(_cfgItemInteractions >> "interactText"); } else { _config = (configfile >> "CfgMagazines" >> _data); _type = getNumber (_config >> "type"); - _interactOption = getNumber (_config >> "interactAction"); - _buttonTXT = getText(_config >> "interactText"); + _interactOption = getNumber (_cfgItemInteractions >> "interactAction"); + _buttonTXT = getText(_cfgItemInteractions >> "interactText"); _magCount = getNumber (_config >> "count"); }; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf b/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf index a70ee409..db550f8f 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_itemInteractDblClick.sqf */ private ["_data","_confData","_text","_pic","_config","_craftingConfig"]; _this call EPOCH_selectInventoryItem; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf b/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf index 48f48112..ffbcfd83 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_maxArmorInit.sqf Example: call EPOCH_maxArmorInit; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf b/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf index 8057111f..be35ca04 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf Example: 0 call EPOCH_refeshUI; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf b/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf index 1fcc8f52..2b9f98e6 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_selectInventoryItem.sqf Example: [_control,_index] call EPOCH_selectInventoryItem; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf b/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf index 37fb02fd..834814fe 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_uniformArmorCalc.sqf Example: _newArmor = _selectedClass call EPOCH_uniformArmorCalc; diff --git a/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf b/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf index 51377526..0f8c54af 100644 --- a/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf +++ b/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf Example: [_building] call EPOCH_spawnLoot; @@ -23,10 +23,12 @@ Returns: BOOL */ +private ["_class","_randomColor","_positions","_posName","_color","_colors","_randomIndex","_selectedLoot","_position","_pos","_m2WPos","_dir","_relDir","_item","_return","_possibleCount","_possibleLoots","_masterConfig","_config","_cfgBaseBuilding","_lootBias","_lootType","_loots","_lootLimit"]; params [["_building",objNull,[objNull]], ["_lootCheckBufferLimit",333], ["_lootObjectLimit",33]]; _masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig; _config = _masterConfig >> (typeOf _building); +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; // exit with false if building is not lootable _return = false; @@ -88,7 +90,7 @@ if ((random 100) < _lootBias) then { }; if (_randomColor isEqualTo "true") then { - _colors = getArray(configFile >> "CfgVehicles" >> _class >> "availableTextures"); + _colors = getArray(_cfgBaseBuilding >> _class >> "availableTextures"); if !(_colors isEqualTo[]) then { _color = selectRandom _colors; _item setObjectTextureGlobal[0, _color]; diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf index 98e6c20e..1a6dbb82 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf @@ -4,19 +4,19 @@ Contributors: Aaron Clark - EpochMod.com Description: - Mission accept + Handle mission select from trader menu Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf */ -_index = lbValue[1500, lbCurSel 1500]; - -_config = "MissionList" call EPOCH_returnConfig; -_disabledMissions = getArray(_config >> "traderMissionDisabled"); -if (_index in _disabledMissions) exitWith{ titleText["Invalid Mission", "PLAIN", 3]; }; +private ["_missionTasks","_selectedMission","_simpleTask","_simpleTaskFSM","_simpleTaskSQF","_simpleTaskFNC","_taskNS","_itemCompile","_fnc_path","_path","_taskControl","_missionAllowed","_missionIndex","_plyrVar"]; +_missionIndex = lbCurSel 1500; +_missionAllowed = true; +//systemChat format ["Mission Acepted: %1",_missionIndex]; +_missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); _nrEnts = player nearEntities ["Man", 20]; _trader = objNull; @@ -27,79 +27,90 @@ _trader = objNull; }forEach _nrEnts; if !(isNull _trader) then { - switch _index do { - case 0: { - [player,_trader] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_Delivery.fsm"; - }; - case 1: { - [player,_trader] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_Animal_Control.fsm"; - }; - case 2: { - [player,_trader] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_UAV.fsm"; - }; - case 3: { - [] execFSM "\x\addons\a3_epoch_code\System\Trader_Missions_VIP.fsm"; - }; - case 4: { - _formatMsg = format["The time is %1:%2.",date select 3, date select 4]; - [_formatMsg, 5] call Epoch_dynamicText; - }; - case 5: { - _players = []; - _playersOut = []; - _grpWith = false; - _msg = "Apart from you"; - _grp = group player; - _players = nearestObjects [player, ["Epoch_Man_base_F","Epoch_Female_base_F"], 750]; - _players = _players - [player]; - { - if!(group _x == _grp)then{ - _playersOut pushBack _x; - }else{ - _grpWith = true; - }; - } forEach _players; - if(_grpWith)then{ - _msg = "Apart from your team and you"; - }; - _trdrMsg = format["%2 %1, I haven't seen anybody for a while.",name player,_msg]; - - if (count _playersOut > 0) then { - _player = selectRandom _playersOut; - _trdrMsg = format["The last person picked up by the UAV was %1.",name _player]; - }; - [format["%1",_trdrMsg], 5] call Epoch_dynamicText; - }; - case 6: - { - _newsArr = ["My dog was shot. That made me sad.","Business has been quiet since word got out that sappers are in the area.","Looters are expecting too much crypto for all the junk they bring in.","What do I look like ? A newspaper vendor. Go Away.","The sun came up again this morning.. That's good news I suppose.","Keep your dog fed with raw or cooked carcasses.","Sappers are known to be good for their pelts. Just don't get too close to one","Some very strange rumours that a Construct was seen in the mountains. Those things are just bedtime stories to scare kids with.","UAVs are a good source of components.","Some say this town is haunted by malevolent spirits.","I hear the military are helping survivors with air drops. Your loot is always welcome here if you find one.","Jammers seem to scare away some of the bad.. things.","Help Military Support Crew spot you with smoke or chemlights.","Hmm, have heard bar stories of a new monster on the loose. You watch yourself out there."]; - _config = 'CfgEpochClient' call EPOCH_returnConfig; - _customNews = getArray(_config >> "EPOCH_news"); - if(count _customNews > 0)then{ - { - _newsArr pushBack _x; - } forEach _customNews; - }; - _formatMsg = format["%1",selectRandom _newsArr]; - [_formatMsg, 5] call Epoch_dynamicText; - }; - case 7: { - _responseArr = ["My name..? What does it matter.","Hey buddy you rock up here unannounced and suddenly we're friends ? On your bike if you aren't buying or selling.",format["My name.. I am known as %1",name _trader], format["When names mattered I was called %1",name _trader],"I forget.. At least, I try to forget."]; - _formatMsg = format["%1",selectRandom _responseArr]; - [_formatMsg, 5] call Epoch_dynamicText; - }; - case 8: { - "Epoch_Sapper_F" call EPOCH_unitSpawn; - }; - case 9: { - call EPOCH_spawn_looters; - }; - default { - ["Quit your jabbering and get the hell out of here.", 5] call Epoch_dynamicText; - }; +_menuCondition = getText(getMissionConfig "epochMissions" >> (_missionClasses select _missionIndex) >> "missionDeny"); + if!(_menuCondition=="")then{ + if(call compile _menuCondition)then{_missionAllowed = false;}; }; + + if(_missionAllowed)then{ + _selectedMission = _missionClasses select _missionIndex; + _missionTasks = getArray(getMissionConfig "epochMissions" >> _selectedMission >> "tasksList"); + + _simpleTask = getNumber (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "simpleTask"); + + //systemChat format ["Simple Task: %1 | Mission: %2 from %3",_simpleTask,_selectedMission,_missionTasks]; + + if(_simpleTask > 0)then{//Simple Task + + _simpleTaskFSM = getText (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "initfsm"); + _simpleTaskSQF = getText (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "initsqf"); + _simpleTaskFNC = getText (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "initcall"); + + if!(_simpleTaskSQF == "")then{//Compile and store SQF Function + _tag = getText (getMissionConfig "CfgClientFunctions" >> "A3E" >> "tag"); + _path = getText (getMissionConfig "inGameTasks" >> "file"); + _taskNS = _tag + "_" + ((_simpleTaskSQF splitString ".") select 0); + _fnc_path = _path + "\" +_simpleTaskSQF; + + if!((typeName _taskNS)=="CODE")then{ + _itemCompile = compileFinal preprocessFileLineNumbers _fnc_path; + missionNamespace setvariable [_taskNS,_itemCompile]; + }else{ + _itemCompile = missionNamespace getVariable ["_taskNS",""]; + }; + + //Emulating CfgClientFunctions - Is this required ? + [] call _itemCompile; + + }; + + if!(_simpleTaskFSM == "")then{ + _simpleTaskFSM = _path + "\" + _simpleTaskFSM; + epochSimpleTaskHandle = [] execFSM _simpleTaskFSM; + }; + + if!(_simpleTaskFNC == "")then{ + call compile _simpleTaskFNC; + }; + + }else{//Run Task / Mission Monitor + + _doTask = (_missionTasks select 0); + _allowTask = true; + + _plyrVar = missionNamespace getVariable ["EPOCH_playerMissionArray",[]] select {_x find "axeTask" > -1;}; + _uiNSTask = ""; + if(count _plyrVar > 0)then{ + _uiNSTask = _plyrVar select 0 select 1; + }; + _miNSTask = missionNameSpace getVariable ["axeTask",""]; + + //Allow continuation of mission from Cached Task + if!(_uiNSTask == "")then{ + if(_miNSTask == "")then{ + _doTask = _uiNSTask; + }else{ + _allowTask = false; + [format ["Already on a mission - %1",selectRandom ['Chop Chop !','Get on With It !','What are you waiting for ?','No bonuses for tardiness !']], 5] call Epoch_message; + }; + }; + + if(_allowTask)then{ + epochTaskHandle = [_doTask] execFSM "epoch_code\System\task_control.fsm" + }; + + }; + + }else{ + + [format["Mission Not Allowed !",_menuCondition], 5] call Epoch_message; //Not formatting, is this intended? + + }; + + } else { - titletext["Trader Lost. Goodbye.", "PLAIN DOWN", 3]; +//systemChat format ["Trader Not Found",""]; +["Trader Lost. Goodbye.", 5] call Epoch_message; }; diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf index 614d413a..8ec9e4ff 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_mission_cage_sapper.sqf */ private ["_sounds","_sound","_cagePos","_cage","_cage2","_startCage"]; params ["_sapper","_trader"]; @@ -51,7 +51,7 @@ while {player distance _sapper < 100 && alive player} do { _sounds = ["sapper_groan0","sapper_groan1","sapper_groan2"]; _sound = selectRandom _sounds; _sapper say3D _sound; - [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; + [player, _sapper,_sound, Epoch_personalToken] remoteExec ["EPOCH_server_handle_say3D",2]; }; uiSleep 0.5; }; diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf index 9b6449eb..22c8aeb3 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf @@ -10,6 +10,6 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_mission_returnObj.sqf */ axeMissionObj = _this; diff --git a/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf b/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf index ddc59ad0..cb0ff273 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_spawn_construct.sqf */ private["_unit"]; _unit = createAgent ["Construct_F", getPos player, [], 520, "FORM"]; diff --git a/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf b/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf index c79845a6..218863ad 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/missions/EPOCH_spawn_looters.sqf */ private["_unit"]; for "_i" from 0 to 4 step 1 do { diff --git a/Sources/epoch_code/compile/missions/tasks/mission_spawnUAV.sqf b/Sources/epoch_code/compile/missions/tasks/mission_spawnUAV.sqf new file mode 100644 index 00000000..3e6674b6 --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/mission_spawnUAV.sqf @@ -0,0 +1,11 @@ +params [["_trgt",player],"_targetPos","_unit","_grp","_driver"]; +_targetPos = getPosATL _trgt; +_targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos; +_targetPos set[2, 600]; +_unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"]; +addToRemainsCollector[_unit]; +_unit flyInHeight 600; +_grp = createGroup RESISTANCE; +_driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"]; +_driver moveInAny _unit; +[_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm"; \ No newline at end of file diff --git a/Sources/epoch_code/compile/missions/tasks/traderDebug_resetMissions.sqf b/Sources/epoch_code/compile/missions/tasks/traderDebug_resetMissions.sqf new file mode 100644 index 00000000..2b07e40f --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDebug_resetMissions.sqf @@ -0,0 +1,2 @@ +missionNamespace setVariable ["EPOCH_playerMissionArray",[]]; +["Missions Reset - Re-open Trader Menu.", 5] call Epoch_message; diff --git a/Sources/epoch_code/compile/missions/tasks/traderDiag_name.sqf b/Sources/epoch_code/compile/missions/tasks/traderDiag_name.sqf new file mode 100644 index 00000000..c9020341 --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDiag_name.sqf @@ -0,0 +1,15 @@ +_trader = objNull; +_nrMn = nearestObjects [player, ["C_Man_1"], 16]; +_trader = _nrMn select 0; +if(_trader getVariable ["traderName",""]== "")then{ +_nameArr = ["Aaron Clark","Kenneth Bente","Damian Clark","Raimonds Virtoss","Richie","Paden Sturtevant","Darren Harrison","Paul Tomany","Dan","Darren Harrison","Niklas Wagner","Andrew Gregory","Isaac Gregory","Florian Kinder","Denis Erygin","Alan Denham"]; +_trdrCurrName = name _trader; +if((random 100) < 6 && !(_trdrCurrName in _nameArr))then{ +_newName = selectRandom _nameArr; +_trader setName _newName; +_trader setVariable ["traderName",_newName, true]; +}; + +}; +_responseArr = ["I don't know. You can only be regenerated so many times before the memory starts to go..","You again..! Go bother someone else.",format["There was a time when names mattered, call me %1.",name _trader],"My name..? What does it matter.","Hey buddy you rock up here unannounced and suddenly we're friends ? On your bike if you aren't buying or selling.",format["My name.. I am known as %1",name _trader], format["When names mattered I was called %1",name _trader],"I forget.. At least, I try to forget."]; +[selectRandom _responseArr, 5] call Epoch_message; \ No newline at end of file diff --git a/Sources/epoch_code/compile/missions/tasks/traderDiag_nearPlayers.sqf b/Sources/epoch_code/compile/missions/tasks/traderDiag_nearPlayers.sqf new file mode 100644 index 00000000..173193eb --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDiag_nearPlayers.sqf @@ -0,0 +1,12 @@ +private["_plyr","_trdrMsg"]; +_trdrMsg = "Do I look like the local Neighbourhood Watch..? No, I do not !"; +_plyrs = []; +_plyrs = player nearEntities [["Epoch_Man_base_F","Epoch_Female_base_F"], 250]; +if (count _plyrs < 2) then { + _trdrMsg = format["Apart from you %1. %2",name player, selectRandom ["I haven't seen any round these parts for a long while.","It has been very quiet around here,","There is not much to report !"]]; +} else { + _plyrs deleteAt 0; + _plyr = selectRandom _plyrs; + _trdrMsg = format["%2 %1.",name _plyr, selectRandom ["The last person picked up by the UAV was","I did spot someone earlier, their name was","I heard there was somebody new in the area, "]]; +}; +[_trdrMsg, 5] call Epoch_message; \ No newline at end of file diff --git a/Sources/epoch_code/compile/missions/tasks/traderDiag_nearVehicles.sqf b/Sources/epoch_code/compile/missions/tasks/traderDiag_nearVehicles.sqf new file mode 100644 index 00000000..80ccf515 --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDiag_nearVehicles.sqf @@ -0,0 +1,13 @@ +private["_plyr","_trdrMsg"]; +_trdrMsg = "Hey, there is a garage down the road.. Well, there used to be."; +_vehs = []; +_plyr = player; +_vehs = nearestObjects [_plyr, ["CAR","AIR"], 1000]; +if (count _vehs < 1) then { + _trdrMsg = format["%2 %1.",name _plyr,selectRandom["I haven't seen anything lately, why not buy one","There is nothing around here","The last time the UAV went out it found nothing"]]; +} else { + _veh = _vehs select (floor (random count _vehs)); + _dist = _veh distance _plyr; + _trdrMsg = format["I know of at least one vehicle within %1m of my current location. It looks like a %2.",_dist, typeof _veh]; +}; +[_trdrMsg, 5] call Epoch_message; \ No newline at end of file diff --git a/Sources/epoch_code/compile/missions/tasks/traderDiag_news.sqf b/Sources/epoch_code/compile/missions/tasks/traderDiag_news.sqf new file mode 100644 index 00000000..d08b9884 --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDiag_news.sqf @@ -0,0 +1,3 @@ +_newsArr = ["My dog was shot. That made me sad.","Business has been quiet since word got out that sappers are in the area.","Looters are expecting too much crypto for all the junk they bring in.","What do I look like ? A newspaper vendor. Go Away.","The sun came up again this morning.. That's good news I suppose.","Keep your dog fed with raw or cooked carcasses.","Sappers are known to be good for their pelts. Just don't get too close to one","Some very strange rumours that a Construct was seen in the mountains. Those things are just bedtime stories to scare kids with.","UAVs are a good source of components.","Some say the nearby town is haunted by malevolent spirits.","I hear the military are helping survivors with air drops. Your loot is always welcome here if you find one.","Dogs can help you find pelts and animal carcasses","I heard that a new vehicle has been seen, some kind of board that you stand on. I personally don't believe the rumours."]; + +[selectRandom _newsArr, 5] call Epoch_message; \ No newline at end of file diff --git a/Sources/epoch_code/compile/missions/tasks/traderDiag_timePlease.sqf b/Sources/epoch_code/compile/missions/tasks/traderDiag_timePlease.sqf new file mode 100644 index 00000000..88f5485c --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDiag_timePlease.sqf @@ -0,0 +1,13 @@ + +_hour = str(date select 3); +_min = str(date select 4); + +if(count _hour < 2)then{ +_hour = "0" + _hour; +}; + +if(count _min < 2)then{ +_min = "0" + _min; +}; + +[format ["The time is %1:%2.",_hour, _min], 5] call Epoch_message; \ No newline at end of file diff --git a/Sources/epoch_code/compile/missions/tasks/traderDiag_triggerAirDrop.sqf b/Sources/epoch_code/compile/missions/tasks/traderDiag_triggerAirDrop.sqf new file mode 100644 index 00000000..a2e3989c --- /dev/null +++ b/Sources/epoch_code/compile/missions/tasks/traderDiag_triggerAirDrop.sqf @@ -0,0 +1,6 @@ +if((random 100) < 6)then{ +[] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm"; +["Air Drop Incoming !", 5] call Epoch_message; +}else{ +["Sorry, None Available!", 5] call Epoch_message; +}; \ No newline at end of file diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf index 1e1a7e6e..ed41fd73 100644 --- a/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf +++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_TradeLoop.sqf */ private ["_item","_index","_removeCount","_sizeOut","_array","_cryptoOffer","_offerArray","_tradeOffer","_tradeCryptoOffer","_isAcceptedOther","_isAccepted"]; diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf index dc4ec680..482d1064 100644 --- a/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf +++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_startTRADEREQ.sqf */ private["_distance"]; params ["_otherPlyr"]; diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf index 3d43adc5..3204b2e1 100644 --- a/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf +++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_startTrade.sqf */ private["_index"]; diff --git a/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf b/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf index d02f70ff..37cf244f 100644 --- a/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf +++ b/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf @@ -10,12 +10,12 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/p2p_trading/EPOCH_tradeRequest.sqf */ if !(isNull _this) then { // ignore request if either player is in a vehicle if (vehicle player == player && vehicle _this == _this) then { - ["Trade request received, press 'T' to accept", 5] call Epoch_dynamicText; + ["Trade request received, press 'T' to accept", 5] call Epoch_message; EPOCH_pendingP2ptradeTarget = _this; }; }; diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf index 39c7e946..1f822284 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf Example: call EPOCH_clientInit; diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf index d8d6fbba..5ad091e7 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf Example: _arr = 2 call EPOCH_clientKeyMap; @@ -31,7 +31,6 @@ _keyMap = ["Action","EPOCH_keysAction",0x39], ["Holster Weapon", "EPOCH_keysHolster", 35], ["Debug Monitor", "EPOCH_keysDebugMon", 41], - ["Trade", "EPOCH_keysAcceptTrade", 0x14], ["Volume + (ctrl)","EPOCH_keysVolumeUp",0x0D], ["Volume - (ctrl)","EPOCH_keysVolumeDown",0x0C], diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf index cc94a739..76535da8 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf Example: _data call EPOCH_clientRevive; diff --git a/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf b/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf index 4b39377f..8cc641d1 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_client_publicEH.sqf Example: ["aset","agte","eage",...] call EPOCH_client_publicEH; diff --git a/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf b/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf index 4c2ede88..7e005660 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_client_rejectPlayer.sqf Example: call EPOCH_clientInit; diff --git a/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf b/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf index b01d5415..88fb13c6 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf Example: [] spawn EPOCH_masterLoop; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf index ff319027..1c0cb16e 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf @@ -1,17 +1,33 @@ _currentTarget = objNull; +_currentTargetMode = 0; _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 { + _interactType = typeOf _cursorTarget; + _interaction = (_cfgObjectInteractions >> _interactType); + if (isClass(_interaction)) then { + _currentTargetMode = getNumber (_interaction >> "interactMode"); + _allowTarget = switch (getNumber (_interaction >> "aliveState")) do { + case 1: {!(alive _cursorTarget)}; + case 2: {(alive _cursorTarget)}; + default {true}; + }; + if (_allowTarget) then { + _currentTarget = _cursorTarget; + }; + } else { + // AllVehicles = vehicles=0, bases=1 + if (_cursorTarget isKindOf "AllVehicles") then { + _currentTarget = _cursorTarget; + } else { + if (_cursorTarget isKindOf "Constructions_modular_F" || _cursorTarget isKindOf "Constructions_static_F") then { + _currentTargetMode = 1; _currentTarget = _cursorTarget; }; - } else { - _currentTarget = _cursorTarget; }; }; }; EPOCH_currentTarget = _currentTarget; +EPOCH_currentTargetMode = _currentTargetMode; _increaseStamina = false; _vehicle = vehicle player; @@ -28,10 +44,11 @@ if (_vehicle == player) then { if (EPOCH_buildMode > 0) then { EPOCH_buildMode = 0; EPOCH_snapDirection = 0; - [format["BUILD MODE:%1","DISABLED"], 5] call Epoch_dynamicText; + ["BUILD MODE: DISABLED", 5] call Epoch_message; EPOCH_Target = objNull; }; _increaseStamina = true; + // TODO: move back to vehicle configs switch (typeOf _vehicle) do { case "jetski_epoch": { diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf index cfd491bd..b0b5cfda 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf @@ -20,13 +20,14 @@ if (damage player != _damagePlayer) then { _energyValue = EPOCH_chargeRate min _energyRegenMax; _vehicle = vehicle player; if (_vehicle != player && isEngineOn _vehicle) then { - _energyValue = _energyValue + 5; + _energyValue = _energyValue + 5; }; if (currentVisionMode player == 1) then { //NV enabled _energyValue = _energyValue - _energyCostNV; if (EPOCH_playerEnergy == 0) then { player action["nvGogglesOff", player]; + ["Night Vision Goggles: Need Energy", 5] call Epoch_message; }; }; @@ -45,7 +46,6 @@ if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then { _display3 = uiNamespace getVariable "EPOCH_EpochGameUI3"; _energyDiff = round(EPOCH_playerEnergy - _prevEnergy); _diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]}; - // hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy]; (_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText]; _prevEnergy = EPOCH_playerEnergy; }; @@ -54,7 +54,7 @@ if (EPOCH_playerEnergy == 0) then { if (EPOCH_buildMode > 0) then { EPOCH_buildMode = 0; EPOCH_snapDirection = 0; - ["Build Mode Disabled: Need Energy< / t>", 5] call Epoch_dynamicText; + ["Build Mode Disabled: Need Energy", 5] call Epoch_message; EPOCH_Target = objNull; EPOCH_Z_OFFSET = 0; EPOCH_X_OFFSET = 0; @@ -67,7 +67,6 @@ if !(_attackers isEqualTo[]) then { (_attackers select 0) call EPOCH_client_bitePlayer; _panic = true; } else { - // custom poision _toxicObjs = player nearobjects["SmokeShellCustom", 6]; if!(_toxicObjs IsEqualTo[]) then { (_toxicObjs select 0) call EPOCH_client_bitePlayer; @@ -95,3 +94,7 @@ EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0; call _lootBubble; EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500; + +// downtick Nuisance +(EPOCH_customVarLimits select (EPOCH_customVars find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]]; +EPOCH_playerNuisance = ((EPOCH_playerNuisance - 1) min _playerLimitMax) max _playerLimitMin; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf index b6cca8d8..3a47f886 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf @@ -1,15 +1,8 @@ -_nearByBobbersLocal = []; -_nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12]; -{ - if (local _x) then { - _nearByBobbersLocal pushBack _x - } -} forEach _nearByBobbers; - +_nearByBobbersLocal = (player nearEntities[["Bobber_EPOCH"], 12]) select {local _x}; if !(_nearByBobbersLocal isEqualTo []) then { if ((random 100) < 50) then { _bobber = selectRandom _nearByBobbersLocal; - _bobber setVelocity [0,-1,-1]; + _bobber setVelocity [0,-1,-10]; _bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime]; }; }; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf index 50c2ac6a..5229837b 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf @@ -31,8 +31,8 @@ if !(_powerSources isEqualTo[]) then { _totalCapacity = 0; { _powerClass = typeOf _x; - _powerCap = getNumber(configFile >> "CfgVehicles" >> _powerClass >> "powerCapacity"); - _powerType = getNumber(configFile >> "CfgVehicles" >> _powerClass >> "powerType"); + _powerCap = getNumber(_cfgBaseBuilding >> _powerClass >> "powerCapacity"); + _powerType = getNumber(_cfgBaseBuilding >> _powerClass >> "powerType"); if (_powerCap == 0) then { _powerCap = 100; }; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf index 7a83dbc4..9dd7458a 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf @@ -1,13 +1,16 @@ -if ((EPOCH_playerSpawnArray select(EPOCH_spawnIndex find "Epoch_Sapper_F")) <= 0) then{ - _sapperChance = 1 + (EPOCH_playerSoiled / 2); - if !(EPOCH_nearestLocations isEqualTo[]) then{ - _sapperChance = _sapperChance + 2; - }; - // 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper every 10 minutes - if (random _sapperRndChance < _sapperChance) then{ - "Epoch_Sapper_F" call EPOCH_unitSpawnIncrease; +_spawnChance = ((EPOCH_playerNuisance + EPOCH_playerSoiled)/2) max 1; +if (random EPOCH_droneRndChance < _spawnChance) then { + "I_UAV_01_F" call EPOCH_unitSpawnIncrease; +}; +if (EPOCH_mod_Ryanzombies_Enabled) then { + if (random EPOCH_zombieRndChance < _spawnChance) then { + ["EPOCH_RyanZombie_1",12] call EPOCH_unitSpawnIncrease; }; }; +if (random EPOCH_sapperRndChance < _spawnChance) then { + "Epoch_Sapper_F" call EPOCH_unitSpawnIncrease; +}; +diag_log format["DEBUG: _spawnChance %1",_spawnChance]; _spawnUnits = []; { diff --git a/Sources/epoch_code/compile/setup/masterLoop/init.sqf b/Sources/epoch_code/compile/setup/masterLoop/init.sqf index 2aa77345..0510677b 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/init.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/init.sqf @@ -5,7 +5,8 @@ _panic = false; _prevEnergy = EPOCH_playerEnergy; // init config data -_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; +EPOCH_zombieRndChance = ["CfgEpochClient", "zombieRndChance", 50] call EPOCH_fnc_returnConfigEntryV2; EPOCH_droneRndChance = ["CfgEpochClient", "droneRngChance", 100] call EPOCH_fnc_returnConfigEntryV2; _baseHTLoss = ["CfgEpochClient", "baseHTLoss", 8] call EPOCH_fnc_returnConfigEntryV2; _energyCostNV = ["CfgEpochClient", "energyCostNV", 3] call EPOCH_fnc_returnConfigEntryV2; @@ -17,6 +18,7 @@ EPOCH_playerIsSwimming = false; // default data if mismatch if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{ + EPOCH_playerSpawnArray = []; { EPOCH_playerSpawnArray pushBack 0 } forEach EPOCH_spawnIndex; }; @@ -97,3 +99,7 @@ _fadeUI = { }; _cursorTarget = objNull; + +// init cfgBaseBuilding config var +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig; diff --git a/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf b/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf index 7af83439..87acc5ea 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_NPCTraderMenuFilter.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/traders/EPOCH_NPCTraderMenuFilter.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/traders/EPOCH_NPCTraderMenuFilter.sqf Example: onLBSelChanged = "_this call EPOCH_NPCTraderMenuFilter"; diff --git a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf index 3eafa1b0..f9816cb9 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf @@ -90,9 +90,9 @@ if !(isNull EPOCH_lastNPCtradeTarget) then { ctrlSetText[41005, (format["%1 Krypto", _cryptoCount])]; } else { if (_stockLimit) then{ - ["Trader has the maximum amount of this item", 5] call Epoch_dynamicText; + ["Trader has the maximum amount of this item", 5] call Epoch_message; } else { - ["Limit one per trade", 5] call Epoch_dynamicText; + ["Limit one per trade", 5] call Epoch_message; }; }; }; diff --git a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf index 7b5a5143..3fcd0373 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd2.sqf @@ -81,6 +81,6 @@ if (isClass (_config >> _uiItem)) then{ }; ctrlSetText [41005, (format ["%1 Krypto", _cryptoCount])]; } else { - ["Limit one per trade", 5] call Epoch_dynamicText; + ["Limit one per trade", 5] call Epoch_message; }; }; diff --git a/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf b/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf index 00d263c2..c5b22cda 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf @@ -1,3 +1,4 @@ +// TODO remove unused file private ["_target","_forceGear","_targets","_handled","_dialog","_vehicle"]; closeDialog 0; _dialog = ""; diff --git a/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf b/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf index f6e2f10b..51b3b9a7 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/traders/EPOCH_startNpcTrade.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/traders/EPOCH_startNpcTrade.sqf Example: cursorTarget call EPOCH_startNpcTrade; @@ -125,13 +125,10 @@ if (alive _this) then { // SOLD ITEMS ARRAY if !((EPOCH_TRADE_COMPLETE select 0) isEqualTo[]) then { if ((EPOCH_TRADE_COMPLETE select 0) isEqualTo(_this select 0)) then { - _errorMsg = 'Items Sold'; - [format["%1", _errorMsg], 5] call Epoch_dynamicText; - + ['Items Sold', 5] call Epoch_message; } else { - _errorMsg = 'Failed To Sell Items'; - [format["%1", _errorMsg], 5] call Epoch_dynamicText; + ['Failed To Sell Items', 5] call Epoch_message; }; }; @@ -179,11 +176,10 @@ if (alive _this) then { }; } forEach(_this select 1); - [format["%1", _errorMsg], 5] call Epoch_dynamicText; + [_errorMsg, 5] call Epoch_message; } else { - _errorMsg = 'Failed To Purchase Items'; - [format["%1", _errorMsg], 5] call Epoch_dynamicText; + ['Failed To Purchase Items', 5] call Epoch_message; }; }; diff --git a/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf b/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf index f302d382..72ad2526 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_takeCrypto.sqf @@ -5,7 +5,7 @@ if (!isNull _this) then { if ((typeof _this) == "Land_MPS_EPOCH") then { _getCrypto = _this getVariable["Crypto", 0]; [player, Epoch_personalToken, _this] remoteExec ["EPOCH_server_takeCrypto",2]; - [format["You found %1 Krypto.", _getCrypto], 5] call Epoch_dynamicText; + [format["You found %1 Krypto.", _getCrypto], 5] call Epoch_message; }; }; [] spawn{ diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf index 8c40b8cb..81a461b2 100644 --- a/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf +++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_fillVehicle.sqf */ params ["_vehicle","_value"]; if (local _vehicle) then { diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf index f0cf950e..c7a8c7c8 100644 --- a/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf +++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_gearVehicle.sqf */ closeDialog 0; if (!isNull cursorTarget) then { diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf index 6818fecb..19b65d9e 100644 --- a/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf +++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_lockVehicle.sqf */ params ["_vehicle","_value"]; if (local _vehicle) then { diff --git a/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf b/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf index eb1cdb09..136240c4 100644 --- a/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf +++ b/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/vehicles/EPOCH_client_repairVehicle.sqf */ params ["_vehicle","_value"]; if (local _vehicle) then { diff --git a/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf b/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf index 92e7ef14..d40bd625 100644 --- a/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf +++ b/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfig.sqf */ #include "\A3\ui_f\hpp\defineCommonGrids.inc" disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf b/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf index cb29c821..f2207f51 100644 --- a/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf +++ b/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/EPOCH_InterruptConfigActions.sqf */ disableSerialization; private ["_pos","_mainGrp","_display","_data","_value","_mainGrpPos","_group","_width"]; diff --git a/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf b/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf index 7574147e..c525993d 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf @@ -12,7 +12,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlPitchYaw.sqf Usage: _ctrl ctrlSetEventHandler ["MouseMoving", "[_this,control3D] call Epoch_3DctrlPitchYaw"]; diff --git a/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf b/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf index e9a01b0a..7cf9a87e 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlSpin.sqf Usage: [control] call epoch_3DctrlSpin; diff --git a/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf b/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf index 4ea8eb29..c4cb9eaf 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf @@ -12,7 +12,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_3DctrlYaw.sqf Usage: _ctrl ctrlSetEventHandler ["MouseMoving", "[_this,control3D] call Epoch_3DctrlPitchYaw"]; diff --git a/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf b/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf index 671dea6a..eba3da82 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf */ private ["_min","_max","_r","_r2","_r3"]; _min = safezoneX + 0.4 * safezoneW; diff --git a/Sources/epoch_code/gui/scripts/Epoch_getColorScheme.sqf b/Sources/epoch_code/gui/scripts/Epoch_getColorScheme.sqf new file mode 100644 index 00000000..c66f68e6 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/Epoch_getColorScheme.sqf @@ -0,0 +1,6 @@ +[ + profileNamespace getVariable "gui_bcg_rgb_r", + profileNamespace getVariable "gui_bcg_rgb_g", + profileNamespace getVariable "gui_bcg_rgb_b", + profileNamespace getVariable "gui_bcg_rgb_a" +] \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf b/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf index d9ee20e6..83dd0bcc 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf @@ -11,7 +11,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf */ private ["_in","_list","_out","_find"]; _in = [_this, 0, controlNull, [controlNull]] call BIS_fnc_param; diff --git a/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf b/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf index 8d005134..08457b6a 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf */ private ["_dmg","_hitPoints"]; params [["_obj",objNull, [objNull]],["_mode",0, [0]]]; diff --git a/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf b/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf index f18afa5a..da202ea2 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_onPause.sqf */ disableSerialization; private ["_fieldManual","_btnSave","_btnAbort","_respawnButton"]; diff --git a/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf b/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf index 6feeaaaa..aea85ac4 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf */ private ["_out"]; params [["_in",false]]; diff --git a/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf b/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf index a2f7cb83..9dffe407 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_showStats.sqf */ disableSerialization; private "_display"; diff --git a/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf b/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf index e778671e..37f28425 100644 --- a/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf +++ b/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/config/Epoch_config_keymap.sqf Example: _this call Epoch_config_keymap; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf index 3782867b..558df1e1 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_click.sqf */ if (rmx_var_crafting_SearchConfigData isEqualTo []) exitWith {false}; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf index c6985ead..620653c5 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_defaults.sqf */ private ["_y","_idx","_recipeCTRL","_STdesc","_lbColor","_playerGear"]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf index 59caa8d5..9e0c0dae 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_LB_doubleClick.sqf */ private ["_idx","_txt"]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf index 91a5d163..e3cb232c 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_animate.sqf */ params ["_ctrl","_first","_second",["_speed",0.5]]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf index cfa355d3..3b0c9f3d 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkGear.sqf */ private ["_recipes","_nearObjects","_near","_out","_player","_recipe","_cP","_cN"]; params ["_recipes"]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf index ded38ee9..ffc39eb0 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkNearby.sqf */ private ["_nearObjects","_result","_tmpResult","_config","_configWorldInteractions","_countOnFire","_countAlive"]; params ["","","",["_arr",[2,""]],["_dist",0],["_cnt",1],["_inflamed",0],["_alive",0]]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf index 285b46fd..b71921a3 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_checkResources.sqf */ private ["_display","_ncGroup","_ncCFrame","_ncRFrame","_ncRText","_ncCLB","_out","_cfg","_selection","_nearbyArr"]; params [["_in",false,[true]]]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf index a3971a8d..c44f99fc 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_colorScheme.sqf */ params ["_cfg"]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf index 86880e85..e2ef50f3 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_craft.sqf */ //dialog closed diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf index 06fec2c3..50b606e0 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_ctrl_collector.sqf */ disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf index 2ae79bb1..f4507bba 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_dev_toggle.sqf */ private ["_mainDevBtn","_3DCTRL"]; _mainDevBtn = rmx_var_crafting_ctrl_DEVMisc select 1; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf index 314dc868..fb07fba6 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf @@ -11,7 +11,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_getConfig.sqf */ private ["_cName","_arr","_cDisplayName","_cPicture","_cDescShort","_cModel","_cPriority","_cCTime","_cRecipeArr","_cNearbyArr","_cUsedInArr","_cPreviewArr","_cPreviewScale","_cPreviewVector","_cDescFull","_cType","_arrIn","_type0","_type1","_type2","_type3","_out"]; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf index 28dbc2f4..29a2cc07 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf */ if (rmx_var_craftingENABLED) exitWith {false}; disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf index 6f557fd8..f39ed593 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_progress.sqf */ if !(isNil "rmx_var_craftProgressInProgress") exitWith {false}; rmx_var_craftProgressInProgress = true; diff --git a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf index c565cbc5..e3ff05d6 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_unload.sqf */ rmx_var_craftingLOOPS = false; rmx_var_3dCtrlSpin = false; diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf index b74bd8c9..73d76d80 100644 --- a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf */ disableSerialization; private ["_in","_selfOrTarget","_display","_cfg","_arr","_buttonSettings","_hasTarget","_checkConfigs","_entries"]; @@ -108,11 +108,21 @@ _checkConfigs = { format ["%2 %1 call Epoch_dynamicMenu;",_arr + [(configName _x)],getText(_x >> "action")] }; + _tooltip = ""; + _tooltipcode = getText(_x >> "tooltipcode"),; + if (_tooltipcode != "") then { + _tooltip = [] call compile _tooltipcode; + } + else { + _tooltip = getText(_x >> "tooltip"); + }; + _buttonSettings pushBack [ getText(_x >> "icon"), - getText(_x >> "tooltip"), + _tooltip, _action ]; + }; }; } forEach _configs; diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf index 935be36d..8a3fa401 100644 --- a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf */ private ["_close","_cleanupVars"]; _close = param [0,false,[false]]; diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf index 823b6ce8..0e4cb5cf 100644 --- a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf */ #include "\A3\ui_f\hpp\defineCommonGrids.inc" private ["_x","_y","_arr","_inProgress","_display","_center","_scale","_defaultScaleX","_defaultScaleY","_distance","_scaleLargeX","_scaleLargeY","_scaleSmallX","_scaleSmallY","_points","_positions","_positions2"]; diff --git a/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_adjust.sqf b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_adjust.sqf new file mode 100644 index 00000000..636848c9 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_adjust.sqf @@ -0,0 +1,50 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Creates special dialog that allows players to reposition (move) all HUD groups on the screen and save to profile + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_dynamicHUD_adjust.sqf +*/ +_this spawn { + disableSerialization; + (findDisplay 49) closeDisplay 0; + + waitUntil {isNull (findDisplay 49)}; + + if (_this) then { + findDisplay 46 createDisplay "rmx_moveDynamicHUD"; + _dsp = findDisplay 66666; + rmx_var_dynamicHUD_groupsAdjust = []; + rmx_var_drag_MouseDown = false; + { + _c = _dsp ctrlCreate ["rmx_drag_RscActivePicture", call epoch_getIDC]; + _c ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)"; + _c ctrlSetPosition (ctrlPosition _x); + _c ctrlCommit 0; + rmx_var_dynamicHUD_groupsAdjust set [_forEachIndex, _c]; + } forEach rmx_var_dynamicHUD_groups; + + waitUntil {!isNull (findDisplay 66666)}; + while {!isNull (findDisplay 66666)} do { + if !(rmx_var_drag_MouseDown) then { + { + _c = (rmx_var_dynamicHUD_groups select _forEachIndex); + _c ctrlSetPosition (ctrlPosition _x); + _c ctrlCommit 0; + } forEach rmx_var_dynamicHUD_groupsAdjust; + }; + uiSleep 0.1; + }; + } else { + //reset hud positions + }; +}; + +true diff --git a/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_loadSave.sqf b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_loadSave.sqf new file mode 100644 index 00000000..a6028f9d --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_loadSave.sqf @@ -0,0 +1,13 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_loadSave.sqf +*/ \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_start.sqf b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_start.sqf new file mode 100644 index 00000000..8244f6f2 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_dynamicHUD_start.sqf @@ -0,0 +1,126 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Creates special HUD Groups defined in CfgDynamicHUD.hpp at the start of the game. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_dynamicHUD_start.sqf +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" + +_cfg = "rmx_dynamicHUD" call EPOCH_returnConfig; +_configs = "true" configClasses _cfg; + +setMousePosition [0.5,0.5]; + +disableSerialization; +_dsp = findDisplay 46; + +rmx_var_dynamicHUD_groups = []; +rmx_var_dynamicHUD_groupCTRL = []; + +{ + _group = _dsp ctrlCreate ["rscControlsGroup", call Epoch_getIDC]; + rmx_var_dynamicHUD_groups set [_forEachIndex, _group]; + + _defaultPopulate = getNumber (_x >> "defaultPopulate"); + _defaultPos = getNumber (_x >> "defaultPos"); + _arraySize = getNumber (_x >> "arraySize"); + _classname = getText (_x >> "classname"); + _offsetX = getNumber (_x >> "offSetX"); + _offsetY = getNumber (_x >> "offSetY"); + _height = getNumber (_x >> "height"); + _width = getNumber (_x >> "width"); + + _wCtrl = _width * GUI_GRID_W; + _hCtrl = _height * GUI_GRID_H; + _oX = _offsetX * _wCtrl; + _oY = _offsetY * _hCtrl; + + _w = 0; _h = 0; + if (_defaultPopulate in [0,1,4]) then { + _w = _arraySize * _width * GUI_GRID_W; + _h = _height * GUI_GRID_H; + } else { + _w = _width * GUI_GRID_W; + _h = _arraySize * _height * GUI_GRID_H; + }; + + _groupPos = switch _defaultPos do { + case 0: {[SafezoneX, safezoneY, _w, _h]}; + case 1: {[0.5 - _w/2, safezoneY, _w, _h]}; + case 2: {[(safezoneW + safezoneX) - _w, safezoneY, _w, _h]}; + case 3: {[SafezoneX, 0.5 - _h/2, _w, _h]}; + case 4: {[0.5 - _w/2, 0.5 - _h/2, _w, _h]}; + case 5: {[(safezoneW + safezoneX) - _w, 0.5 - _h/2, _w, _h]}; + case 6: {[SafezoneX, (safezoneH + safezoneY) - _h, _w, _h]}; + case 7: {[0.5 - _w/2, (safezoneH + safezoneY) - _h, _w, _h]}; + case 8: {[(safezoneW + safezoneX) - _w, (safezoneH + safezoneY) - _h, _w, _h]}; + default {[0,0,0,0]}; + }; + + _groupPos set [0, (_groupPos select 0)+_oX]; + _groupPos set [1, (_groupPos select 1)+_oY]; + _group ctrlSetPosition _groupPos; + _group ctrlCommit 0; + + _evenOdd = true; + rmx_var_dynamicHUD_groupCTRL set [_forEachIndex, [(configName _x)]]; + + for "_i" from 0 to (_arraySize - 1) do { + _c = _dsp ctrlCreate [_classname, call Epoch_getIDC, _group]; + (rmx_var_dynamicHUD_groupCTRL select _forEachIndex) pushBack _c; + + _cPos = switch _defaultPopulate do { + case 0: {[_i * _wCtrl,0,_wCtrl, _hCtrl]}; + case 1: {[(_arraySize - 1 - _i) * _wCtrl,0,_wCtrl, _hCtrl]}; + case 2: {[0,_i * _hCtrl,_wCtrl, _hCtrl]}; + case 3: {[0,(_arraySize - 1 - _i) * _hCtrl,_wCtrl, _hCtrl]}; + case 4: + { + _center = _w/2 - _wCtrl/2; + + _result = if (_i == 0) then { + [_center, 0, _wCtrl, _hCtrl] + } else { + if _evenOdd then { + [_wCtrl * _i/2 + _center, 0, _wCtrl, _hCtrl] + } else { + [(_center - _wCtrl/2) - (_wCtrl * _i/2), 0, _wCtrl, _hCtrl] + }; + }; + _evenOdd = !_evenOdd; + _result + }; + case 5: + { + _center = _h/2 - _hCtrl/2; + + _result = if (_i == 0) then { + [0, _center, _wCtrl, _hCtrl] + } else { + if _evenOdd then { + [0, _hCtrl * _i/2 + _center, _wCtrl, _hCtrl] + } else { + [0, (_center - _hCtrl/2) - (_hCtrl * _i/2), _wCtrl, _hCtrl] + }; + }; + _evenOdd = !_evenOdd; + _result + }; + default {[0,0,0,0]}; + }; + _c ctrlSetPosition _cPos; + _c ctrlCommit 0; + }; +} forEach _configs; + + //dump default positions into an array + +true diff --git a/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_getHUDCtrl.sqf b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_getHUDCtrl.sqf new file mode 100644 index 00000000..780d857c --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamicHUD/epoch_getHUDCtrl.sqf @@ -0,0 +1,32 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Returns Control from Dynamic HUD to be manipulated externally. See CfgDynamicHUD.hpp on how to create your own HUD groups. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/dynamicHUD/Epoch_getHUDCtrl.sqf + + Usage: + [_configName, _index] call epoch_getHUDCtrl; + ["myHudName", 2] call epoch_getHUDCtrl; +*/ + +if !(_this isEqualTypeArray ["",0]) exitWith {controlNull}; + +params ["_gName","_cIdx"]; + +_gIdx = -1; + +{ + if ((_x select 0) isEqualTo _gName) exitWith {_gIdx = _forEachIndex}; +} forEach rmx_var_dynamicHUD_groupCTRL; + +if (_gIdx == -1) exitWith {controlNull}; + +(rmx_var_dynamicHUD_groupCTRL select _gIdx) select _cIdx diff --git a/Sources/epoch_code/gui/scripts/epoch_dragControl.sqf b/Sources/epoch_code/gui/scripts/epoch_dragControl.sqf new file mode 100644 index 00000000..7e774750 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/epoch_dragControl.sqf @@ -0,0 +1,26 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Contributors: + + Description: + Gives ability to move active controls like RscActivePicture (see Epoch_GUI_rmx.hpp for an example). + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_dragControl.sqf + + Usage: + No direct usage, simply create your control in configs following example in HPP mentioned in description +*/ +private ["_ctrl","_curr","_mpos"]; +_ctrl = param [0]; +_curr = ctrlPosition _Ctrl; +_mpos = getmousePosition; + +if (rmx_var_drag_MouseDown) then { + _ctrl ctrlSetPosition [(_mpos select 0) - (_curr select 2) / 2, (_mpos select 1) - (_curr select 3) / 2 ]; + _ctrl ctrlCommit 0; +}; \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf index 052f06a3..4baa9404 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnInvite.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_BtnInvite.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnInvite.sqf */ private ["_txt","_InvitePlayerCombo","_playerUID","_playerName","_upgradeSlots","_upgradePrice","_found","_currentMember","_currentMaxMember","_BtnInvite"]; disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf index 4ba9a73a..feb63775 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnKick.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_BtnKick.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnKick.sqf */ private ["_txt","_playerUID","_playerName","_group","_selected","_BtnKick"]; disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf index 94707a5f..0227d595 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnLeave.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_BtnLeave.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnLeave.sqf */ private ["_txt","_BtnLeave"]; disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf index 574b535f..40b2f457 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_BtnMod.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_BtnMod.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_BtnMod.sqf */ disableSerialization; private ["_isMember","_txt","_playerUID","_group","_selected"]; @@ -35,7 +35,7 @@ if (getPlayerUID player == Epoch_my_GroupUID) then { }; }; } else { - ["You need to select a player!", 5] call Epoch_dynamicText; + ["You need to select a player!", 5] call Epoch_message; }; true } else { diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf index 577b8146..97000c4d 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_Combo.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_Combo.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_Combo.sqf */ disableSerialization; private ["_BtnInvite","_currentMember","_currentMaxMember","_ctrl","_selected","_playerUID"]; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf index a5128721..67ffe56b 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_List.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_List.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_List.sqf */ disableSerialization; private ["_img","_BtnSetMod","_BtnKick"]; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf index eefc6162..4f1350b4 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_invitePlayer.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_invitePlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_invitePlayer.sqf */ if !(_this in Epoch_invited_GroupUIDs) then { Epoch_invited_GroupUIDs pushBack _this; - ["Group request received", 5] call Epoch_dynamicText; + ["Group request received", 5] call Epoch_message; }; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf index c6c2a4dd..5dfe8111 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_onLoad.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_onLoad.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_onLoad.sqf */ private ["_index","_players","_found","_playerUID","_picture","_display","_BtnInvite","_GroupMemberList","_InvitePlayerCombo","_currentMaxMember","_currentMember","_myPlayerUID","_playerIsLeader","_playerIsMod","_onlinePUID"]; disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf index a06c072f..f6389a4c 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_Group_update.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_Group_update.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_Group_update.sqf */ if (!isNull (findDisplay -1300)) then { (findDisplay -1300) closeDisplay 0; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf index 9f18d1ff..72d3738a 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_BtnCreate.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_cGroup_BtnCreate.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_cGroup_BtnCreate.sqf */ private ["_groupName","_upgradePrice","_txtCtrl","_array"]; disableSerialization; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf index fcbda50f..bb12ced3 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_groupText.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_cGroup_groupText.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_cGroup_groupText.sqf */ disableSerialization; private ["_array","_ctrl"]; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf index d2be9494..6df9bcff 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_cGroup_onLoad.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_cGroup_onLoad.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_cGroup_onLoad.sqf */ private ["_textCtrl"]; if (Epoch_my_GroupUID != "") exitWith {(findDisplay -1200) closeDisplay 0}; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf index 461b7ed8..72f213a7 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_acceptInvite.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_iGroup_acceptInvite.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_iGroup_acceptInvite.sqf */ if (Epoch_invited_GroupUID != "") then { [Epoch_invited_GroupUID,getPlayerUID player,true,false,player,Epoch_personalToken] remoteExec ["EPOCH_server_updatePlayerGroup",2]; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf index 393098c6..78731733 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_onLoad.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_iGroup_onLoad.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_iGroup_onLoad.sqf */ disableSerialization; private ["_display","_text"]; diff --git a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf index 413555ef..ab6c9e3a 100644 --- a/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf +++ b/Sources/epoch_code/gui/scripts/group/EPOCH_iGroup_refresh.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/group/EPOCH_iGroup_refresh.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/group/EPOCH_iGroup_refresh.sqf */ private ["_index"]; if !(Epoch_invited_GroupUIDs isEqualTo Epoch_invited_GroupUIDsPrev) then { diff --git a/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf index 205c7142..f2316fe6 100644 --- a/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf +++ b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_Group.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/inventory/EPOCH_Inventory_Group.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/inventory/EPOCH_Inventory_Group.sqf */ disableSerialization; (findDisplay 602) closeDisplay 0; diff --git a/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf index 3c67a036..1b618799 100644 --- a/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf +++ b/Sources/epoch_code/gui/scripts/inventory/EPOCH_Inventory_iGroup.sqf @@ -10,11 +10,11 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/inventory/EPOCH_Inventory_iGroup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/inventory/EPOCH_Inventory_iGroup.sqf */ disableSerialization; (findDisplay 602) closeDisplay 0; if !(Epoch_invited_GroupUIDs isEqualTo[]) exitWith { createDialog "GroupRequests"; }; -["No pending requests< / t>", 5] call Epoch_dynamicText; +["No pending requests", 5] call Epoch_message; diff --git a/Sources/epoch_code/gui/scripts/messaging/Epoch_message.sqf b/Sources/epoch_code/gui/scripts/messaging/Epoch_message.sqf new file mode 100644 index 00000000..b2feeb44 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/messaging/Epoch_message.sqf @@ -0,0 +1,147 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Description: + Displays custom text message to player + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf + + Usage: + "TEST" call Epoch_message + + TODO: Add colors +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +_msg = param [0, "No input"]; +_time = param [1, 2]; + +_msg = str (parseText str _msg); //Parses and converts text back to small string + +if !(isNil "rmx_var_msgQueue") exitWith { rmx_var_msgQueue pushBack [_msg, _time];}; + +rmx_var_msgQueue = [[_msg, _time]]; + +[] spawn { + private ["_c1pos","_c2pos","_c3pos","_clr","_dsp"]; + + disableSerialization; + + _dsp = findDisplay 46; + + _yPos = 15; + _ySize = 2; + _c1StartPos = [safeZoneX,((_yPos - _ySize) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c1pos = [safeZoneX,(_yPos * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c2pos = [safeZoneX,((_yPos + _ySize) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + _c3pos = [safeZoneX,((_yPos + _ySize * 2) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H]; + + _getClr = call Epoch_getColorScheme; + _clr = [_getClr select 0, _getClr select 1, _getClr select 2, 0.2]; + + //Start anim + _msg = ""; + _time = (rmx_var_msgQueue select 0 select 1); + + _fnc_animFirst = { + private "_ctrl"; + + _ctrl = param [0]; + _msg = param [1]; + _ctrl ctrlSetBackgroundColor [_clr select 0, _clr select 1, _clr select 2, 0.2]; + _ctrl ctrlSetText _msg; + + _ctrl ctrlSetPosition _c1StartPos; + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + + _ctrl ctrlSetPosition _c1pos; + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0.3; + }; + + _fnc_animShiftCtrl = { + private ["_ctrl", "_fade", "_fontSize", "_pos"]; + _ctrl = param [0]; + _fade = param [1]; + _fontSize = param [2]; + _pos = param [3]; + + _ctrl ctrlSetPosition _pos; + _ctrl ctrlSetFontHeight _fontSize; + _ctrl ctrlSetFade _fade; + _ctrl ctrlCommit 0.3; + }; + + _tick = diag_tickTime; _ctrlArr = []; + while {(diag_tickTime - _tick) < _time} do { + + if !(rmx_var_msgQueue isEqualTo []) then { + + _msg = (rmx_var_msgQueue select 0 select 0); + _time = (rmx_var_msgQueue select 0 select 1); + _tick = diag_tickTime; + rmx_var_msgQueue deleteAt 0; + _uniqueID = + switch (count _ctrlArr) do { + case 0: + { + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr = [[_c, _msg]]; + [_c, _msg] call _fnc_animFirst; + }; + case 1: + { + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr set [count _ctrlArr, [_c, _msg]]; + [_c, _msg] call _fnc_animFirst; + + [_ctrlArr select 0 select 0, 0.5, 0.035, _c2pos] call _fnc_animShiftCtrl; + }; + case 2: + { + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr set [count _ctrlArr, [_c, _msg]]; + [_c, _msg] call _fnc_animFirst; + + [_ctrlArr select 1 select 0, 0.5, 0.035, _c2pos] call _fnc_animShiftCtrl; + [_ctrlArr select 0 select 0, 0.75, 0.03, _c3pos] call _fnc_animShiftCtrl; + }; + case 3: + { + _oldCtrl = (_ctrlArr select 0 select 0); + [_oldCtrl] call epoch_getIDC; + ctrlDelete _oldCtrl; + _ctrlArr deleteAt 0; + + _c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC]; + _ctrlArr pushBack [_c, _msg]; + [_c, _msg] call _fnc_animFirst; + + [_ctrlArr select 1 select 0, 0.5, 0.035, _c2pos] call _fnc_animShiftCtrl; + [_ctrlArr select 0 select 0, 0.75, 0.03, _c3pos] call _fnc_animShiftCtrl; + }; + }; + }; + }; + + //End anim + { + (_x select 0) ctrlSetFade 1; + (_x select 0) ctrlSetPosition [safeZoneX, ((_yPos + _ySize * (_forEachIndex + 1)) * GUI_GRID_H + GUI_GRID_Y)]; + (_x select 0) ctrlCommit (0.4 - ((_foreachIndex + 1) / 10)); + } forEach _ctrlArr; + + uisleep 0.50; + + { + ctrlDelete (_x select 0); + } forEach _ctrlArr; + + rmx_var_msgQueue = nil; +}; + +true diff --git a/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf b/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf similarity index 95% rename from Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf rename to Sources/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf index 732cde6f..6e6cdfe2 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf +++ b/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old1.sqf @@ -10,10 +10,10 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf Usage: - "TEST" call Epoch_dynamicText + "TEST" call Epoch_message_old1 */ #include "\A3\ui_f\hpp\defineCommonGrids.inc" private ["_y","_cnt","_ctrl","_alreadyEnabled","_input","_scale","_width","_height","_centerX","_centerY","_display","_ctrlGroup","_controls","_ctrlText","_add"]; diff --git a/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf b/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf new file mode 100644 index 00000000..042782f9 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/messaging/Epoch_message_old2.sqf @@ -0,0 +1,110 @@ +/* + Author: Raimonds Virtoss - EpochMod.com + + Description: + Displays custom text message to player, supports any variable and structured text + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf + + Usage: + "TEST" call Epoch_message_old2 +*/ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" + +_in = param [0, "No input given"]; +_timer = param [1, 2]; + +if !(_in isEqualType "STRING") then {_in = str _in}; + +if (isnil "rmx_var_dtMessageArr") then { + rmx_var_dtMessageArr = []; +}; + +if (!isnil "rmx_var_dtEnabled") exitWith { + if !([_in, _timer] in rmx_var_dtMessageArr) then //spam protection + { + rmx_var_dtMessageArr pushBack [_in, _timer]; + }; +}; +rmx_var_dtEnabled = true; +rmx_var_dtMessageArr pushBack [_in, _timer]; + +[GUI_GRID_W, GUI_GRID_H] spawn { + params ["_gridW","_gridH"]; + disableSerialization; + + _dsp = findDisplay 46; + + _c = _dsp ctrlCreate ["rmx_ST2", -8777]; + _c2 = _dsp ctrlCreate ["RscText", -8776]; + _c3 = _dsp ctrlCreate ["RscText", -8775]; + + _clr = call Epoch_getColorScheme; + + _c ctrlSetBackgroundColor [_clr select 0, _clr select 1, _clr select 2, 0.5]; + _c2 ctrlSetBackgroundColor _clr; + _c3 ctrlSetBackgroundColor _clr; + + //first animation + _width = 0.2 * _gridW; + _height = 2 * _gridH; + + _c ctrlSetPosition [0.5 - _gridW / 2,1,_gridW,_height]; + _c2 ctrlSetPosition[0.5 - _gridW / 2,1,_width,_height]; + _c3 ctrlSetPosition[0.5 + _gridW / 2,1,_width,_height]; + _c ctrlCommit 0; + _c2 ctrlCommit 0; + _c3 ctrlCommit 0; + + _cmt = 0.25; + + //Main queue + while {!(rmx_var_dtMessageArr isEqualTo [])} do + { + + _in = parseText (rmx_var_dtMessageArr select 0 select 0); + _timer = rmx_var_dtMessageArr select 0 select 1; + rmx_var_dtMessageArr deleteAt 0; + + _c ctrlSetStructuredText _in; + + _cnt = 0; + + { + _ct = if (_x in [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]) then {1} else {0.5}; + _cnt = _cnt +_ct; + } count (toArray str _in); + + _w2 = ((_cnt max 5) min 80) * _gridW; + + _c ctrlSetPosition [0.5 - _w2 / 2,1,_w2,_height]; + _c2 ctrlSetPosition[0.5 - _w2 / 2,1,_width,_height]; + _c3 ctrlSetPosition[0.5 + _w2 / 2,1,_width,_height]; + + _c ctrlCommit _cmt; + _c2 ctrlCommit _cmt; + _c3 ctrlCommit _cmt; + + uiSleep _timer; + }; + + //exit with animation + _c ctrlSetPosition [0.5 - _gridW / 2,1,_gridW,_height]; + _c2 ctrlSetPosition[0.5 - _gridW / 2,1,_width,_height]; + _c3 ctrlSetPosition[0.5 + _gridW / 2,1,_width,_height]; + _c ctrlCommit _cmt; + _c2 ctrlCommit _cmt; + _c3 ctrlCommit _cmt; + + uiSleep _cmt; + + ctrlDelete _c; + ctrlDelete _c2; + ctrlDelete _c3; + + rmx_var_dtEnabled = nil; +}; \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf index 4e44e1c4..4d8045b4 100644 --- a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf +++ b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_description.sqf @@ -4,15 +4,27 @@ Contributors: Aaron Clark Description: - TODO: Description + Reload trader menu description, from config, when mission is clicked on. Filter out disabled missions. Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf */ -private["_index","_missionDesc"]; +private["_index","_missionClasses","_missionDesc"]; +_missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); + _index = lbCurSel 1500; -_missionDesc = getArray(getMissionConfig "MissionList" >> "traderMissionLongDesc"); -ctrlSetText [1001, _missionDesc select _index]; + +_menuCondition = getText(getMissionConfig "epochMissions" >> (_missionClasses select _index) >> "missionDeny"); +_missionDesc = getText(getMissionConfig "epochMissions" >> (_missionClasses select _index) >> "missionDesc"); + +if!(_menuCondition=="")then{ + if(call compile _menuCondition)then{ + _missionDesc = "NOT AVAILABLE - " + _missionDesc; + lbSetColor [1001, 0, [0.73,0.24,0.11,1] ] ; + }; +}; + +ctrlSetText [1001, _missionDesc]; diff --git a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf index a23257a3..34abe7f5 100644 --- a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf +++ b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf @@ -4,20 +4,50 @@ Contributors: Aaron Clark Description: - TODO: Description + Loads trader menu with available missions from config. Applies conditions and tooltips. Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf */ -private ["_index","_missionList","_disabledMissions"]; -_missionList = getArray(getMissionConfig "MissionList" >> "traderMissionNames"); -_disabledMissions = getArray(getMissionConfig "MissionList" >> "traderMissionDisabled"); +private ["_lbl","_missionClasses","_missionName","_menuCondition","_toolTip","_plyrVar","_uiNSTask"]; +params [["_currentTask",""]]; +_missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); +_plyrVar = missionNamespace getVariable ["EPOCH_playerMissionArray",[]] select {_x find "axeTask" > -1;}; +_uiNSTask = ""; +if(count _plyrVar > 0)then{ +_uiNSTask = _plyrVar select 0 select 1; +}; + { - if !(_forEachIndex in _disabledMissions) then { - _index = lbAdd[1500, _x]; - lbSetValue[1500, _index, _forEachIndex]; + + _missionName = getText(getMissionConfig "epochMissions" >> _x >> "missionName"); + if!(_missionName == "")then{ + + _lbl = lbAdd[1500, _missionName]; + lbSetValue[1500, _lbl, _forEachIndex]; + _toolTip = getText(getMissionConfig "epochMissions" >> _x >> "missionToolTip"); + + _menuCondition = getText(getMissionConfig "epochMissions" >> _x >> "missionDeny"); + if!(_menuCondition=="")then{ + if(call compile _menuCondition)then{ + lbSetColor [1500, _lbl, [0.73,0.24,0.11,1] ] ; + _toolTip = getText(getMissionConfig "epochMissions" >> _x >> "missionDenyToolTip"); + }; + }; + + + + if(_uiNSTask in getArray(getMissionConfig "epochMissions" >> _x >> "tasksList"))then{ + lbSetColor [1500, _lbl, [0.98,0.98,0.33,1]] ; + _toolTip = "CONTINUE - " + _toolTip; + }; + + lbSetTooltip [1500, _lbl, _toolTip]; + }; -}forEach _missionList; + + +}forEach _missionClasses; diff --git a/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf b/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf index 619ad52b..869140c8 100644 --- a/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf +++ b/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessAdjust.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf Params: [Handle, speed integer, Effect array] diff --git a/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf b/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf index 7d41eb7b..c1c0bd8b 100644 --- a/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf +++ b/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessCreate.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/post_process/Epoch_dynamicMenuPopulate.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/post_process/Epoch_dynamicMenuPopulate.sqf Params: [Name of PP, Priority] diff --git a/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf b/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf index aaf3cdb3..69723035 100644 --- a/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf +++ b/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf diff --git a/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf b/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf index 16bf53a1..18f81ab5 100644 --- a/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf +++ b/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/post_process/EPOCH_postprocessDestroy.sqf Usage: 0.5 call epoch_setDrunk; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf index c642c9f0..2f8ff1d9 100644 --- a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf Usage: [_pos, _time, _distance, "myVariable"] call Epoch_gui3DCooldown; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf index 7fa7016e..5f23c36b 100644 --- a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf */ private ["_pos2","_scale"]; params ["_ctrlGrp","_loc","_pos","_dst"]; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf index 266b62e8..ffb83369 100644 --- a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf Example: [_object, _time, _image, _text, _objectSpace, _distance, _externalBool] call epoch_gui3dModelPos; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf index 7b65baac..17844bde 100644 --- a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf */ private ["_pos2","_m2w","_scale"]; params ["_ctrl", "_obj", "_loc","_pos","_dst"]; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf index 2a728b58..690719c9 100644 --- a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf Example: [_location, _time, _image, _text, _distance, _externalBool] call epoch_gui3dWorldPos; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf index ddcc118e..c45fd9c2 100644 --- a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf */ private ["_pos2","_scale"]; params ["_ctrl","_loc","_pos","_dst"]; diff --git a/Sources/epoch_code/init/both_init.sqf b/Sources/epoch_code/init/both_init.sqf index b0e979b3..4206a406 100644 --- a/Sources/epoch_code/init/both_init.sqf +++ b/Sources/epoch_code/init/both_init.sqf @@ -10,9 +10,20 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/init/both_init.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/both_init.sqf */ private ["_customVarsInit","_antagonistSpawnDefaults","_spawnLimits","_say3dsounds"]; + +// detect if Ryan's Zombies and Deamons mod is present +if (["CfgEpochClient", "ryanZombiesEnabled", false] call EPOCH_fnc_returnConfigEntryV2) then { + EPOCH_mod_Ryanzombies_Enabled = (parseNumber (getText (configFile >> "CfgPatches" >> "Ryanzombies" >> "version")) >= 4.2); + if (EPOCH_mod_Ryanzombies_Enabled) then { + diag_log "Epoch: Ryanzombies detected"; + }; +} else { + EPOCH_mod_Ryanzombies_Enabled = false; +}; + // Init Custom vars EPOCH_customVars = []; EPOCH_defaultVars = []; @@ -34,7 +45,9 @@ EPOCH_customVarsDefaults = [ ["SpawnArray",[],[]], ["Karma",0,[50000,-50000]], ["Alcohol",0,[100,0]], - ["Radiation",0,[100,0]] + ["Radiation",0,[100,0]], + ["Nuisance",0,[100,0]], + ["MissionArray",[],[]] ]; _customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2; { @@ -54,12 +67,21 @@ _antagonistSpawnDefaults = [ ["Epoch_SapperB_F",1], ["I_UAV_01_F",2], ["PHANTOM",1], - ["B_Heli_Transport_01_F",1] + ["B_Heli_Transport_01_F",1], + ["EPOCH_RyanZombie_1",12] ]; _spawnLimits = ["CfgEpochClient", "antagonistSpawnIndex", _antagonistSpawnDefaults] call EPOCH_fnc_returnConfigEntryV2; { - EPOCH_spawnIndex pushBack (_x select 0); - EPOCH_spawnLimits pushBack (_x select 1); + _x params ["_spawnName","_spawnLimit"]; + if (_spawnName isEqualTo "EPOCH_RyanZombie_1") then { + if (EPOCH_mod_Ryanzombies_Enabled) then { + EPOCH_spawnIndex pushBack _spawnName; + EPOCH_spawnLimits pushBack _spawnLimit; + }; + } else { + EPOCH_spawnIndex pushBack _spawnName; + EPOCH_spawnLimits pushBack _spawnLimit; + }; } forEach _spawnLimits; //GroupSize (number) // Price (String) @@ -67,11 +89,10 @@ EPOCH_group_upgrade_lvl = ["CfgEpochClient", "group_upgrade_lvl", [4,"100",6,"30 // Init 3d sound handler EPOCH_sounds = []; -EPOCH_soundsDistance = []; -_say3dsounds = "isClass _x" configClasses (configFile >> "CfgSay3Dhandler"); +_say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; +_say3dsounds = "isClass _x" configClasses (_say3dsoundsConfig); { EPOCH_sounds pushBack (configName _x); - EPOCH_soundsDistance pushBack getNumber(_x >> "distance"); } forEach _say3dsounds; // disable remote sensors on server and client as all Epoch AI is local to the side controlling it. diff --git a/Sources/epoch_code/init/client_init.sqf b/Sources/epoch_code/init/client_init.sqf index 4ced50b4..15ae4856 100644 --- a/Sources/epoch_code/init/client_init.sqf +++ b/Sources/epoch_code/init/client_init.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/init/client_init.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/client_init.sqf */ EPOCH_CraftingItem = ""; EPOCH_ESP_TARGETS = []; @@ -47,12 +47,15 @@ EPOCH_drawIcon3d = false; EPOCH_velTransform = false; EPOCH_stabilityTarget = objNull; EPOCH_currentTarget = objNull; +EPOCH_currentTargetMode = 0; EPOCH_LootedBlds = []; EPOCH_lootObjects = []; EPOCH_soundLevel = 1; EPOCH_arr_interactedObjs = []; EPOCH_buildOption = 0; EPOCH_nearestLocations = []; +EPOCH_lastFiredLocation = []; +rmx_var_drag_MouseDown = false; ["EPOCH_onEachFrame", "onEachFrame", EPOCH_onEachFrame] call BIS_fnc_addStackedEventHandler; @@ -63,6 +66,8 @@ EPOCH_AirDropChance = getNumber(getMissionConfig "CfgEpochAirDrop" >> "AirDropCh if(EPOCH_AirDropChance < 0)then{EPOCH_AirDropChance = 101;EPOCH_AirDropCheck = 99999;}; EPOCH_droneRndChance = 100; +EPOCH_sapperRndChance = 100; +EPOCH_zombieRndChance = 50; // Custom Keys EPOCH_keysActionPressed = false; //prevents EH spam diff --git a/Sources/epoch_code/init/fn_init.sqf b/Sources/epoch_code/init/fn_init.sqf index d65b410d..aca96c92 100644 --- a/Sources/epoch_code/init/fn_init.sqf +++ b/Sources/epoch_code/init/fn_init.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/init/fn_init.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/fn_init.sqf */ if !(isNil "Epoch_CStart") exitWith { false }; Epoch_CStart = true; diff --git a/Sources/epoch_code/init/fn_postinit.sqf b/Sources/epoch_code/init/fn_postinit.sqf index d66b189a..e4f53125 100644 --- a/Sources/epoch_code/init/fn_postinit.sqf +++ b/Sources/epoch_code/init/fn_postinit.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/init/fn_postinit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/fn_postinit.sqf */ if (!isDedicated && isMultiplayer && hasInterface) then { call compile preprocessFileLineNumbers "epoch_code\init\client_init.sqf"; diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp index af19c83c..057d46ed 100644 --- a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp */ class CfgActionMenu @@ -27,6 +27,8 @@ class CfgActionMenu dyna_buildMode = "([10] call EPOCH_fnc_cursorTarget) call EPOCH_checkBuild;"; dyna_isVehicle = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'LandVehicle') || (dyna_cursorTarget isKindOf 'Air') || (dyna_cursorTarget isKindOf 'Ship') || (dyna_cursorTarget isKindOf 'Tank'))} else {false}"; dyna_isTrader = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}"; + dyna_isPlayer = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (isPlayer dyna_cursorTarget))} else {false}"; + dyna_canAcceptTrade = "if (!(isNull EPOCH_pendingP2ptradeTarget) && alive EPOCH_pendingP2ptradeTarget) then {((EPOCH_pendingP2ptradeTarget isKindOf 'Man') && (dyna_cursorTarget isEqualTo EPOCH_pendingP2ptradeTarget))} else {false}"; dyna_locked = "locked dyna_cursorTarget in [2,3]"; dyna_lockedInVehicle = "locked vehicle player in [2,3]"; }; diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp index 96115e4e..2dab56eb 100644 --- a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp */ class veh_lock diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp index cca6f3aa..35a8df1e 100644 --- a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp */ //Build mode enabled @@ -77,6 +77,21 @@ class tra_shop tooltip = "Shop"; }; +class player_trade +{ + condition = "dyna_isPlayer"; + action = "[dyna_cursorTarget, player, Epoch_personalToken] call EPOCH_startTRADEREQ;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Make Trade Request"; +}; +class player_trade_accept +{ + condition = "dyna_isPlayer && dyna_canAcceptTrade"; + action = "EPOCH_p2ptradeTarget = EPOCH_pendingP2ptradeTarget;call EPOCH_startTrade;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Accept Trade Request"; +}; + //User action replacement class maintain_jammer { diff --git a/Sources/epoch_config/Configs/CfgBaseBuilding.hpp b/Sources/epoch_config/Configs/CfgBaseBuilding.hpp index 8c472f20..ae9fe36d 100644 --- a/Sources/epoch_config/Configs/CfgBaseBuilding.hpp +++ b/Sources/epoch_config/Configs/CfgBaseBuilding.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgBaseBuilding.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgBaseBuilding.hpp */ class CfgBaseBuilding { @@ -22,77 +22,299 @@ class CfgBaseBuilding { { upgradeBuilding[] = { { "FirePlaceOn_EPOCH", { { "WoodLog_EPOCH", 1 } } } }; removeParts[] = { { "ItemRock", 2 } }; + staticClass = "FirePlace_EPOCH"; + simulClass = "Fireplace_SIM_EPOCH"; + GhostPreview = "FirePlace_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + isTemporary = 1; }; - class FirePlaceOn_EPOCH : Default + class Fireplace_SIM_EPOCH : FirePlace_EPOCH { - removeParts[] = { { "ItemRock", 2 } }; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class FirePlaceOn_EPOCH : FirePlace_EPOCH { + upgradeBuilding[] = {}; }; class Foundation_EPOCH : Default { removeParts[] = { { "ItemRock", 4 } }; + GhostPreview = "Foundation_Ghost_EPOCH"; + staticClass = "Foundation_EPOCH"; + snapPointsPara[] = {"N","S","E","W","C"}; + snapPointsPerp[] = {}; + //allowedSnapPoints[] = {"N","S","E","W"}; + //allowedSnapObjects[] = { "Constructions_foundation_F" }; + maxHeight = 2.5; + }; + class Foundation_Ghost_EPOCH : Foundation_EPOCH + { + allowedSnapPoints[] = { "N", "S", "E", "W"}; + allowedSnapObjects[] = { "Constructions_foundation_F" }; }; class WoodFoundation_EPOCH : Default { removeParts[] = { { "PartPlankPack", 4 } }; + GhostPreview = "WoodFoundation_Ghost_EPOCH"; + staticClass = "WoodFoundation_EPOCH"; + snapPointsPara[] = { "N", "S", "E", "W", "C" }; + snapPointsPerp[] = {}; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + allowedSnapObjects[] = { "Constructions_foundation_F" }; + maxHeight = 2.5; + }; + class WoodFoundation_Ghost_EPOCH : WoodFoundation_EPOCH + { + allowedSnapPoints[] = { "N", "S", "E", "W"}; + allowedSnapObjects[] = { "Constructions_foundation_F" }; }; class Hesco3_EPOCH : Default { removeParts[] = { { "KitHesco3", 1 } }; + simulClass = "Hesco3_SIM_EPOCH"; + staticClass = "Hesco3_EPOCH"; + GhostPreview = "Hesco3_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = { "C", "E", "W" }; + energyCost = 0.4; + limitNearby = 4; + bypassJammer = 1; }; + class Hesco3_SIM_EPOCH : Hesco3_EPOCH + { + allowedSnapPoints[] = { "C", "E", "W" }; + allowedSnapObjects[] = { "Hesco3_EPOCH" }; + removeParts[] = {}; + }; + class Hesco3_Ghost_EPOCH : Hesco3_SIM_EPOCH {}; class TankTrap_EPOCH : Default { removeParts[] = { { "KitTankTrap", 1 } }; + simulClass = "TankTrap_SIM_EPOCH"; + staticClass = "TankTrap_EPOCH"; + GhostPreview = "TankTrap_EPOCH"; + energyCost = 0.2; + limitNearby = 4; + bypassJammer = 1; }; + class TankTrap_SIM_EPOCH: TankTrap_EPOCH + { + removeParts[] = {}; + }; + class Spike_TRAP_EPOCH: Default + { + simulClass = "Spike_TRAP_SIM_EPOCH"; + staticClass = "Spike_TRAP_EPOCH"; + GhostPreview = "Spike_TRAP_EPOCH"; + ammoClass = "Spike_TRAP_AMMO_EPOCH"; + energyCost = 0.2; + limitNearby = 2; + bypassJammer = 1; + }; + class Spike_TRAP_SIM_EPOCH: Spike_TRAP_EPOCH {}; + class Metal_TRAP_EPOCH: Default + { + simulClass = "Metal_TRAP_SIM_EPOCH"; + staticClass = "Metal_TRAP_EPOCH"; + GhostPreview = "Metal_TRAP_EPOCH"; + ammoClass = "Metal_TRAP_AMMO_EPOCH"; + energyCost = 0.4; + limitNearby = 2; + bypassJammer = 1; + }; + class Metal_TRAP_SIM_EPOCH: Metal_TRAP_EPOCH {}; class SolarGen_EPOCH : Default { removeParts[] = { { "KitSolarGen", 1 } }; + powerCapacity = 10; + powerType = 1; + GhostPreview = "SolarGen_EPOCH"; + staticClass = "SolarGen_EPOCH"; + simulClass = "SolarGen_SIM_EPOCH"; + }; + class SolarGen_SIM_EPOCH : SolarGen_EPOCH { + removeParts[] = {}; }; class PlotPole_EPOCH : Default { removeParts[] = { { "KitPlotPole", 1 } }; + GhostPreview = "PlotPole_EPOCH"; + staticClass = "PlotPole_EPOCH"; + simulClass = "PlotPole_SIM_EPOCH"; + bypassJammer = 1; + }; + class PlotPole_SIM_EPOCH : PlotPole_EPOCH + { + removeParts[] = {}; }; class WoodRamp_EPOCH : Default { removeParts[] = { { "PartPlankPack", 3 } }; + simulClass = "WoodRamp_SIM_EPOCH"; + staticClass = "WoodRamp_EPOCH"; + GhostPreview = "WoodRamp_Ghost_EPOCH"; + snapPointsPara[] = {}; + snapPointsPerp[] = {}; + //allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "CB" }; + energyCost = 0.2; }; + class WoodRamp_SIM_EPOCH : WoodRamp_EPOCH + { + allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "CB" }; + allowedSnapObjects[] = { "Const_floors_static_F", "Constructions_foundation_F" }; + removeParts[] = {}; + }; + class WoodRamp_Ghost_EPOCH : WoodRamp_SIM_EPOCH {}; class WoodFloor_EPOCH : Default { upgradeBuilding[] = { { "MetalFloor_EPOCH", { { "ItemCorrugatedLg", 2 } } } }; removeParts[] = { { "PartPlankPack", 2 } }; + simulClass = "WoodFloor_SIM_EPOCH"; + staticClass = "WoodFloor_EPOCH"; + GhostPreview = "WoodFloor_Ghost_EPOCH"; + snapPointsPara[] = {"NF","SF","EF","WF","C","CB"}; + snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; + energyCost = 0.2; }; + class WoodFloor_SIM_EPOCH: WoodFloor_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","C"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodFloor_Ghost_EPOCH: WoodFloor_SIM_EPOCH {}; class MetalFloor_EPOCH : Default { removeParts[] = { { "ItemCorrugatedLg", 2 } }; + simulClass = "MetalFloor_SIM_EPOCH"; + staticClass = "MetalFloor_EPOCH"; + GhostPreview = "MetalFloor_Ghost_EPOCH"; + snapPointsPara[] = { "NF", "SF", "EF", "WF", "C", "CB" }; + snapPointsPerp[] = { "N", "S", "E", "W", "CinN", "CinS", "CinE", "CinW" }; + energyCost = 0.5; }; + class MetalFloor_SIM_EPOCH : Default + { + allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "C" }; + allowedSnapObjects[] = { "Const_floors_static_F", "Constructions_foundation_F" }; + removeParts[] = {}; + }; + class MetalFloor_Ghost_EPOCH : MetalFloor_SIM_EPOCH {}; class CinderWallGarage_EPOCH : Default { removeParts[] = { { "CinderBlocks", 4 }, { "ItemCorrugatedLg", 1 }, { "CircuitParts", 1 } }; + simulClass = "CinderWallGarage_SIM_EPOCH"; + staticClass = "CinderWallGarage_EPOCH"; + GhostPreview = "CinderWallGarage_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + energyCost = 0.5; }; - class CinderWallHalf_EPOCH : Default{ + class CinderWallGarage_SIM_EPOCH : CinderWallGarage_EPOCH + { + allowedSnapObjects[] = { "Const_Cinder_static_F", "Const_floors_static_F" }; + removeParts[] = {}; + }; + class CinderWallHalf_EPOCH : Default + { upgradeBuilding[] = { { "CinderWall_EPOCH", { { "CinderBlocks", 2 }, { "MortarBucket", 1 } } } }; removeParts[] = { { "CinderBlocks", 2 }, { "ItemRock", 1 } }; + simulClass = "CinderWallHalf_SIM_EPOCH"; + staticClass = "CinderWallHalf_EPOCH"; + GhostPreview = "CinderWallHalf_Ghost_EPOCH"; + energyCost = 0.2; + snapType = "snapPointsPara"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; }; - class CinderWall_EPOCH : Default{ + class CinderWallHalf_SIM_EPOCH: CinderWallHalf_EPOCH + { + allowedSnapObjects[] = { "Const_Cinder_static_F", "Const_floors_static_F" }; + removeParts[] = {}; + upgradeBuilding[] = {}; + }; + class CinderWallHalf_Ghost_EPOCH : CinderWallHalf_SIM_EPOCH {}; + class CinderWall_EPOCH : Default + { upgradeBuilding[] = { { "CinderWallGarage_EPOCH", { { "ItemCorrugatedLg", 1 }, { "CircuitParts", 1 } } } }; removeParts[] = { { "CinderBlocks", 4 }, { "ItemRock", 2 } }; + simulClass = "CinderWall_SIM_EPOCH"; + staticClass = "CinderWall_EPOCH"; + GhostPreview = "CinderWall_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + energyCost = 0.4; }; - class WoodLargeWall_EPOCH : Default{ + class CinderWall_SIM_EPOCH: CinderWall_EPOCH + { + allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodLargeWall_EPOCH : Default + { upgradeBuilding[] = { { "WoodWall1_EPOCH", { { "ItemPlywoodPack", 1 } } }, { "WoodLargeWallCor_EPOCH", { { "ItemCorrugated", 1 } } } }; removeParts[] = { { "PartPlankPack", 2 } }; + simulClass = "WoodLargeWall_SIM_EPOCH"; + staticClass = "WoodLargeWall_EPOCH"; + GhostPreview = "WoodLargeWall_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; }; - class WoodWall1_EPOCH : Default{ + class WoodLargeWall_SIM_EPOCH: WoodLargeWall_EPOCH + { + upgradeBuilding[] = {}; + removeParts[] = {}; + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + }; + class WoodLargeWall_Ghost_EPOCH: WoodLargeWall_SIM_EPOCH {}; + class WoodWall1_EPOCH : Default + { upgradeBuilding[] = { { "WoodWall2_EPOCH", { { "PartPlankPack", 1 } } }, { "WoodLargeWallCor_EPOCH", { { "ItemCorrugated", 1 } } } }; removeParts[] = { { "PartPlankPack", 2 } }; + simulClass = "WoodWall1_SIM_EPOCH"; + staticClass = "WoodWall1_EPOCH"; + GhostPreview = "WoodWall1_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + energyCost = 0.2; + }; + class WoodWall1_SIM_EPOCH : WoodWall1_EPOCH + { + allowedSnapObjects[] = { "Const_floors_static_F", "Const_WoodWalls_static_F" }; + energyCost = 0.2; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodLargeWallCor_EPOCH : Default{ upgradeBuilding[] = { { "WoodLargeWallDoorway_EPOCH", { { "PartPlankPack", 1 } } } }; removeParts[] = { { "PartPlankPack", 2 }, { "ItemCorrugated", 1 } }; + simulClass = "WoodLargeWallCor_SIM_EPOCH"; + staticClass = "WoodLargeWallCor_EPOCH"; + GhostPreview = "WoodLargeWallCor_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + availableTextures[] = { "\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa" }; + }; + class WoodLargeWallCor_SIM_EPOCH: WoodLargeWallCor_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodWall2_EPOCH : Default{ upgradeBuilding[] = { @@ -100,10 +322,35 @@ class CfgBaseBuilding { { "WoodLargeWallDoor_EPOCH", { { "ItemCorrugated", 1 }, { "PartPlankPack", 1 } } }, }; removeParts[] = { { "ItemPlywoodPack", 1 }, { "PartPlankPack", 2 } }; + simulClass = "WoodWall2_SIM_EPOCH"; + staticClass = "WoodWall2_EPOCH"; + GhostPreview = "WoodWall2_EPOCH"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + energyCost = 0.2; + }; + class WoodWall2_SIM_EPOCH: WoodWall2_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodLargeWallDoorway_EPOCH : Default{ upgradeBuilding[] = { { "WoodLargeWallDoor_EPOCH", { { "ItemCorrugated", 1 }, { "PartPlankPack", 1 } } } }; removeParts[] = { { "PartPlankPack", 2 }, { "ItemCorrugated", 1 } }; + simulClass = "WoodLargeWallDoorway_SIM_EPOCH"; + staticClass = "WoodLargeWallDoorway_EPOCH"; + GhostPreview = "WoodLargeWallDoorway_EPOCH"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + energyCost = 0.2; + availableTextures[] = { "\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa" }; + }; + class WoodLargeWallDoorway_SIM_EPOCH: WoodLargeWallDoorway_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodWall3_EPOCH : Default{ upgradeBuilding[] = { @@ -111,55 +358,225 @@ class CfgBaseBuilding { { "WoodLargeWallDoorL_EPOCH", { { "ItemCorrugated", 1 }, { "CircuitParts", 1 } } }, }; removeParts[] = { { "ItemPlywoodPack", 1 }, { "PartPlankPack", 2 } }; + simulClass = "WoodWall3_SIM_EPOCH"; + staticClass = "WoodWall3_EPOCH"; + GhostPreview = "WoodWall3_EPOCH"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + energyCost = 0.2; + }; + class WoodWall3_SIM_EPOCH: WoodWall3_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodLargeWallDoor_EPOCH : Default{ upgradeBuilding[] = { { "WoodLargeWallDoorL_EPOCH", { { "ItemCorrugated", 1 }, { "CircuitParts", 1 } } } }; removeParts[] = { { "PartPlankPack", 2 }, { "ItemCorrugated", 1 } }; + simulClass = "WoodLargeWallDoor_SIM_EPOCH"; + staticClass = "WoodLargeWallDoor_EPOCH"; + GhostPreview = "WoodLargeWallDoor_EPOCH"; + snapPointsPara[] = {"N","E","W"}; + allowedSnapPoints[] = {"N","S","E","W"}; + availableTextures[] = { "\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa" }; + energyCost = 0.2; + }; + class WoodLargeWallDoor_SIM_EPOCH: WoodLargeWallDoor_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodWall4_EPOCH : Default { removeParts[] = { { "ItemPlywoodPack", 1 }, { "PartPlankPack", 2 }, { "CircuitParts", 1 } }; + simulClass = "WoodWall4_SIM_EPOCH"; + staticClass = "WoodWall4_EPOCH"; + GhostPreview = "WoodWall4_EPOCH"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + energyCost = 0.2; + }; + class WoodWall4_SIM_EPOCH: WoodWall4_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; }; class WoodLargeWallDoorL_EPOCH : Default { removeParts[] = { { "PartPlankPack", 2 }, { "ItemCorrugated", 1 }, { "CircuitParts", 1 } }; + simulClass = "WoodLargeWallDoorL_SIM_EPOCH"; + staticClass = "WoodLargeWallDoorL_EPOCH"; + GhostPreview = "WoodLargeWallDoorL_EPOCH"; + snapPointsPara[] = { "N", "E", "W" }; + allowedSnapPoints[] = { "N", "S", "E", "W" }; + availableTextures[] = { "\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa", "\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa" }; + energyCost = 0.2; }; - class WoodStairs_EPOCH : Default{ + class WoodLargeWallDoorL_SIM_EPOCH: WoodLargeWallDoorL_EPOCH + { + allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodStairs_EPOCH : Default + { upgradeBuilding[] = { { "WoodStairs2_EPOCH", { { "PartPlankPack", 4 } } } }; removeParts[] = { { "PartPlankPack", 4 } }; + simulClass = "WoodStairs_SIM_EPOCH"; + staticClass = "WoodStairs_EPOCH"; + GhostPreview = "WoodStairs_Ghost_EPOCH"; + snapPointsPara[] = {}; + snapPointsPerp[] = {}; + //allowedSnapPoints[] = { "NF2", "SF2", "EF2", "WF2", "NF", "SF", "EF", "WF", "CB" }; + //allowedSnapObjects[] = { "Const_floors_static_F", "Constructions_foundation_F" }; + energyCost = 0.2; }; + class WoodStairs_SIM_EPOCH: WoodStairs_EPOCH + { + allowedSnapPoints[] = {"NF","SF","EF","WF","CB"}; + allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"}; + upgradeBuilding[] = {}; + removeParts[] = {}; + }; + class WoodStairs_Ghost_EPOCH: WoodStairs_SIM_EPOCH {}; class WoodStairs2_EPOCH : Default { removeParts[] = { { "PartPlankPack", 4 } }; + simulClass = "WoodStairs2_SIM_EPOCH"; + staticClass = "WoodStairs2_EPOCH"; + GhostPreview = "WoodStairs2_EPOCH"; + snapPointsPara[] = { "NF2", "SF2", "EF2", "WF2", "NF", "SF", "EF", "WF", "C", "CB" }; + snapPointsPerp[] = { "N", "S", "E", "W", "CinN", "CinS", "CinE", "CinW" }; + //allowedSnapPoints[] = { "NF2", "SF2", "EF2", "WF2", "NF", "SF", "EF", "WF", "CB" }; + energyCost = 0.3; + }; + class WoodStairs2_SIM_EPOCH : WoodStairs2_EPOCH + { + allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "CB" }; + allowedSnapObjects[] = { "Const_floors_static_F", "Constructions_foundation_F" }; + removeParts[] = {}; }; class WoodTower_EPOCH : Default { removeParts[] = { { "PartPlankPack", 4 } }; upgradeBuildingPart[] = { { "ItemPlywoodPack", 1 }, { "PartPlankPack", 2 } }; removeBuildingPart[] = { { "ItemPlywoodPack", 1 }, { "PartPlankPack", 2 } }; + simulClass = "WoodTower_SIM_EPOCH"; + staticClass = "WoodTower_EPOCH"; + GhostPreview = "WoodTower_Ghost_EPOCH"; + snapPointsPara[] = { "NF2", "SF2", "EF2", "WF2","NF", "SF", "EF", "WF", "C", "CB" }; + snapPointsPerp[] = { "N", "S", "E", "W", "CinN", "CinS", "CinE", "CinW" }; + //allowedSnapPoints[] = { "NF2", "SF2", "EF2", "WF2", "CB" }; + //allowedSnapObjects[] = { "WoodTower_EPOCH", "Const_floors_static_F", "Constructions_foundation_F" }; + persistAnimations[] = { "NWall", "EWall", "SWall", "WWall" }; + energyCost = 0.3; }; + class WoodTower_SIM_EPOCH : WoodTower_EPOCH + { + allowedSnapPoints[] = { "NF2", "SF2", "EF2", "WF2", "CB" }; + allowedSnapObjects[] = { "WoodTower_EPOCH", "Const_floors_static_F", "Constructions_foundation_F" }; + energyCost = 0.3; + }; + class WoodTower_Ghost_EPOCH : WoodTower_SIM_EPOCH {}; class WoodLadder_EPOCH : Default { removeParts[] = { { "PartPlankPack", 2 } }; + simulClass = "WoodLadder_SIM_EPOCH"; + staticClass = "WoodLadder_EPOCH"; + GhostPreview = "WoodLadder_Ghost_EPOCH"; + energyCost = 0.1; }; + class WoodLadder_SIM_EPOCH: WoodLadder_EPOCH + { + removeParts[] = {}; + }; + class WoodLadder_Ghost_EPOCH : WoodLadder_SIM_EPOCH {}; class Tipi_EPOCH : Default { removeParts[] = { { "Pelt_EPOCH", 2 }, { "PartPlankPack", 1 } }; + GhostPreview = "Tipi_Ghost_EPOCH"; + staticClass = "Tipi_EPOCH"; + simulClass = "Tipi_SIM_EPOCH"; + limitNearby = 2; + bypassJammer = 1; }; + class Tipi_SIM_EPOCH : Tipi_EPOCH + { + simulClass = "Tipi_SIM_EPOCH"; + staticClass = "Tipi_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + removeParts[] = {}; + }; + class Tipi_Ghost_EPOCH : Tipi_SIM_EPOCH {}; class StorageShelf_EPOCH : Default { removeParts[] = { { "ItemCorrugated", 2 } }; + GhostPreview = "StorageShelf_Ghost_EPOCH"; + staticClass = "StorageShelf_EPOCH"; + simulClass = "StorageShelf_SIM_EPOCH"; + limitNearby = 5; + bypassJammer = 1; }; + class StorageShelf_SIM_EPOCH : StorageShelf_EPOCH + { + removeParts[] = {}; + }; + class StorageShelf_Ghost_EPOCH : StorageShelf_SIM_EPOCH {}; class Workbench_EPOCH : Default { removeParts[] = { { "PartPlankPack", 2 } }; + GhostPreview = "WorkBench_Ghost_EPOCH"; + staticClass = "WorkBench_EPOCH"; + simulClass = "WorkBench_SIM_EPOCH"; + limitNearby = 5; + bypassJammer = 1; }; - + class WorkBench_SIM_EPOCH : Workbench_EPOCH + { + removeParts[] = {}; + }; + class WorkBench_Ghost_EPOCH : WorkBench_SIM_EPOCH {}; class LockBox_EPOCH : Default { returnOnPack[] = { { "ItemLockbox", 1 } }; - } + simulClass = "LockBox_SIM_EPOCH"; + staticClass = "LockBox_EPOCH"; + weaponHolderProxy = "LockBoxProxy_EPOCH"; + GhostPreview = "LockBox_EPOCH"; + bypassJammer = 1; + limitNearby = 2; + isSecureStorage = 1; + }; + class LockBox_SIM_EPOCH : LockBox_EPOCH + { + returnOnPack[] = {}; + }; class Safe_EPOCH : Default { returnOnPack[] = { { "ItemSafe", 1 } }; - } + simulClass = "Safe_SIM_EPOCH"; + staticClass = "Safe_EPOCH"; + weaponHolderProxy = "SafeProxy_EPOCH"; + GhostPreview = "Safe_EPOCH"; + bypassJammer = 1; + limitNearby = 2; + isSecureStorage = 1; + }; + class Safe_SIM_EPOCH : Safe_EPOCH + { + returnOnPack[] = {}; + }; + class Jack_EPOCH : Default + { + simulClass = "Jack_SIM_EPOCH"; + staticClass = "Jack_EPOCH"; + GhostPreview = "Jack_EPOCH"; + limitNearby = 2; + bypassJammer = 1; + energyCost = 0.1; + }; + class Jack_SIM_EPOCH : Jack_EPOCH {}; }; diff --git a/Sources/epoch_config/Configs/CfgBuildingLootPos.hpp b/Sources/epoch_config/Configs/CfgBuildingLootPos.hpp index a3f0a0e4..e6c63fc4 100644 --- a/Sources/epoch_config/Configs/CfgBuildingLootPos.hpp +++ b/Sources/epoch_config/Configs/CfgBuildingLootPos.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgBuildingLootPos.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgBuildingLootPos.hpp */ class CfgBuildingLootPos @@ -28,7 +28,7 @@ class CfgBuildingLootPos lockerPos[] = {}; toolRackPos[] = {}; shoeboxPos[] = {}; - lootBias = 30; + lootBias = 40; limit = 3; lootType = "normal"; @@ -145,6 +145,7 @@ class CfgBuildingLootPos }; }; class Land_Research_HQ_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 0.380859, 4.1875, -3.29264 }, 2.04878 }, @@ -223,6 +224,7 @@ class CfgBuildingLootPos }; }; class Land_spp_Tower_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 2.79297, -1.28906, -14.9882 }, 88.9351 }, @@ -272,6 +274,7 @@ class CfgBuildingLootPos }; }; class Land_MilOffices_V1_F : Default { + limit = 6; lootType = "mil"; shelfPos[] = { { { 5.89844, 0.773438, -2.89318 }, 269.647 }, @@ -516,6 +519,7 @@ class CfgBuildingLootPos }; }; class Land_Airport_right_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { {-4.19922,-2.1543,-1.76375}, 359.705 }, @@ -638,6 +642,7 @@ class CfgBuildingLootPos }; }; class Land_Airport_left_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { {3.91211,-1.41797,-1.76377}, 184.071 }, @@ -724,6 +729,7 @@ class CfgBuildingLootPos }; }; class Land_Hangar_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { {-14.3125,1.24023,-5.40771}, 270.363 }, @@ -806,6 +812,7 @@ class CfgBuildingLootPos }; }; class Land_Cargo_Tower_V1_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 0.552734, -1.625, 5.05352 }, 178.136 }, @@ -922,6 +929,7 @@ class CfgBuildingLootPos }; }; class Land_Medevac_HQ_V1_F : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 2.64648, -5.00391, -3.29263 }, 179.273 }, @@ -968,6 +976,7 @@ class CfgBuildingLootPos }; }; class Land_Cargo_HQ_V1_F : Default { + limit = 4; lootType = "mil"; shelfPos[] = { { { 0.302734, 4.1875, -3.2987 }, 357.597 }, @@ -1093,6 +1102,7 @@ class CfgBuildingLootPos }; }; class Land_u_Barracks_V2_F : Default { + limit = 6; lootType = "mil"; shelfPos[] = { { { -2.01953, 3.59766, 1.40866 }, 86.5322 }, @@ -1193,6 +1203,7 @@ class CfgBuildingLootPos }; }; class Land_i_Barracks_V2_F : Default { + limit = 6; lootType = "mil"; shelfPos[] = { { { -3.91406, 4.36816, 0.579132 }, 0.755371 }, @@ -1394,6 +1405,7 @@ class CfgBuildingLootPos }; }; class Land_Offices_01_V1_F : Default { + limit = 6; shelfPos[] = { { { 1.18555, 3.91016, 0.712739 }, 359.463 }, { { -1.66797, -5.50195, -7.10147 }, 270.268 }, @@ -1604,7 +1616,7 @@ class CfgBuildingLootPos class Land_i_House_Big_01_V3_F : Land_i_House_Big_01_V1_F {}; class Land_Hospital_side1_F : Default { - lootBias = 25; + limit = 5; lootType = "mil"; shelfPos[] = { { { -5.40039, 2.9082, -7.91957 }, 2.14935 }, @@ -1659,7 +1671,7 @@ class CfgBuildingLootPos }; }; class Land_Hospital_side2_F : Default { - lootBias = 25; + limit = 5; lootType = "mil"; shelfPos[] = { { { 4.34766, -10.8809, -8.13902 }, 179.22 }, @@ -1702,7 +1714,7 @@ class CfgBuildingLootPos }; }; class Land_Hospital_main_F : Default { - lootBias = 25; + limit = 5; lootType = "mil"; shelfPos[] = { { { 14.3516, -2.75781, -8.04017 }, 90.0092 }, @@ -2611,6 +2623,7 @@ class CfgBuildingLootPos }; }; class Land_WIP_F : Default { + limit = 6; shelfPos[] = { { { -0.957031, -4.42969, 12.2029 }, 358.087 }, { { -0.919922, -5.26563, 0.396693 }, 178.896 }, @@ -2961,6 +2974,7 @@ class CfgBuildingLootPos }; }; class Land_GH_House_2_F : Default { + limit = 4; lootType = "mil"; shelfPos[] = { { { -3.61914, -1.67969, -0.301109 }, 359.443 }, @@ -3688,6 +3702,7 @@ class CfgBuildingLootPos }; }; class Land_Hangar_2 : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 1.82813, -9.84717, -2.58939 }, 181.468 }, @@ -3814,6 +3829,7 @@ class CfgBuildingLootPos }; }; class Land_Mil_ControlTower : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 1.49512, 2.23389, -1.09485 }, 268.083 }, @@ -3913,6 +3929,7 @@ class CfgBuildingLootPos }; }; class Land_Mil_Barracks_i : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 0.902344, -2.39502, -1.12442 }, 238.007 }, @@ -3940,6 +3957,7 @@ class CfgBuildingLootPos }; }; class Land_Ss_hangar : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 14.2314, -8.46289, -5.89868 }, 173.905 }, @@ -4513,6 +4531,7 @@ class CfgBuildingLootPos //// Taki Start /// class Land_Mil_hangar_EP1 : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { {13.5302,-21.2354,-5.37346}, 179 }, @@ -4550,6 +4569,7 @@ class CfgBuildingLootPos }; }; class Land_Mil_ControlTower_EP1 : Default { + limit = 5; lootType = "mil"; shelfPos[] = { { { 3.03467, 2.64453, -1.16014 }, 0 }, @@ -5317,6 +5337,7 @@ class CfgBuildingLootPos }; }; class Land_Mil_Barracks_i_EP1 : Default { + limit = 5; lootType = "mil"; pelicanPos[] = { { {-0.560303,-1.47656,0.0566254}, 88 }, @@ -6038,6 +6059,7 @@ class CfgBuildingLootPos pelicanPos[] = { { { -7.55273, 1.50537, 5.76163 }, 28.6669 } }; }; class Land_A_BuildingWIP : Default { + limit = 6; fridgePos[] = { { { 2.03711, 11.1831, -6.49124 }, 305.356 }, { { -3.37573, 12.2183, 1.48757 }, 305.492 }, { { -24.4121, 7.55957, -2.55824 }, 228.742 } }; shelfPos[] = { { { -5.80249, -5.0332, -2.55812 }, 356.037 }, { { 12.1133, -4.3042, -6.54318 }, 179.13 }, { { -21.0371, 1.47168, -6.46016 }, 178.598 } }; pelicanPos[] = { { { -7.40625, -9.28955, -6.50476 }, 210.36 }, { { -20.8247, -11.5005, 5.44375 }, 191.623 }, { { -24.6577, 11.9438, 1.45556 }, 293.971 } }; @@ -6191,6 +6213,7 @@ class CfgBuildingLootPos pelicanPos[] = { { { -0.840332, 1.09473, -10 }, 269.861 } }; }; class Carnival_Tent : Default { + limit = 2; lootBias = 50; shelfPos[] = { { { -1, -1, -10 }, 178.014 } }; chairPos[] = { { { 1, 1, -10 }, 152.678 } }; @@ -6849,6 +6872,7 @@ class CfgBuildingLootPos }; }; class Land_Panelak3 : Default { + limit = 6; shelfPos[] = { { {-3.97217,-0.323242,1.84827}, 90 }, { {4.33447,-2.9873,12.6483}, 92.1 }, @@ -7450,6 +7474,7 @@ class CfgBuildingLootPos }; }; class Land_MBG_Killhouse_4 : Default { + limit = 5; shelfPos[] = { { {-1.86426,0.823242,-3.84317}, 0 } }; @@ -7498,6 +7523,7 @@ class CfgBuildingLootPos }; }; class Land_MBG_Warehouse : Default { + limit = 5; shelfPos[] = { { {-11.0225,19.5303,-6.14345}, 0 }, { {22.1719,4.58838,-6.14345}, 90 }, @@ -7795,6 +7821,7 @@ class CfgBuildingLootPos }; }; class Land_aif_hotel : Default { + limit = 6; shelfPos[] = { { {-2.01904,1.21753,2.74082}, 0 }, { {3.21387,-0.964844,-7.74672}, 180 } @@ -7953,6 +7980,7 @@ class CfgBuildingLootPos }; }; class Land_House_C_4_EP1 : Default { + limit = 5; shelfPos[] = { { {-0.529297,2.29675,-0.350365}, 270 }, { {-4.1626,2.0033,-0.278609}, 180 }, @@ -8198,6 +8226,7 @@ class CfgBuildingLootPos }; }; class land_mbg_apartments_big_04 : Default { + limit = 4; shelfPos[] = { { {-2.9585,-0.955566,-3.19898}, 173 }, { {3.57837,-1.02734,-0.150979}, 180 }, @@ -8858,6 +8887,7 @@ class CfgBuildingLootPos }; }; class Land_MBG_ATC_Base : Default { + limit = 6; lootType = "mil"; shelfPos[] = { { {-4.58923,-6.30957,-1.21875}, 270 }, @@ -8963,6 +8993,7 @@ class CfgBuildingLootPos }; }; class Land_aif_hotel_bio : Default { + limit = 8; shelfPos[] = { { {-0.945801,1.20837,-0.835111}, 360 }, { {-1.18018,1.21466,-4.68552}, 360 }, @@ -9164,6 +9195,1832 @@ class CfgBuildingLootPos }; + // Tanoa Start + class Land_Slum_01_F : Default { + shelfPos[] = { + { {5.25391,1.71436,0.658049}, 84.7501 } + }; + fridgePos[] = { + { {5.03906,-1.99072,0.658049}, 176.525 } + }; + bedPos[] = { + { {1.07031,1.3623,0.658049}, 269.404 } + }; + couchPos[] = { + { {1.93359,-1.15479,0.658049}, 89.0329 } + }; + cookerPos[] = { + { {3.92383,-1.99268,0.658049}, 181.256 } + }; + chairPos[] = { + { {5.05859,0.463379,0.658049}, 90.9162 } + }; + filingPos[] = { + { {-0.882813,-0.362793,0.658049}, 267.887 } + }; + }; + class Land_Shed_03_F : Default { + shelfPos[] = { + { {-2.01563,-0.980957,-0.751299}, 269.311 } + }; + toolRackPos[] = { + { {2.14844,2.00049,-0.751299}, 0.999977 } + }; + shoeboxPos[] = { + { {0.509766,1.26611,0.0687008}, 45.1 } + }; + palletPos[] = { + { {1.64063,0.697266,-0.731299}, 95.1 } + }; + }; + class Land_Slum_02_F : Default { + bedPos[] = { + { {1.22852,-3.61572,0.172568}, 90.4497 } + }; + couchPos[] = { + { {1.55273,3.08984,0.172568}, 357.823 } + }; + chairPos[] = { + { {-2.19727,4.18018,0.172568}, 330.547 } + }; + tablePos[] = { + { {-2.22461,-2.31494,0.172568}, 270.659 } + }; + freezerPos[] = { + { {-1.76563,-4.21729,0.172568}, 178.06 } + }; + }; + class Land_House_Native_02_F : Default { + bedPos[] = { + { {0.9375,1.75684,-2.37989}, 272.018 }, + { {-3.10547,-1.17676,-2.39065}, 181.605 } + }; + couchPos[] = { + { {-0.34375,-0.958984,-9.34442}, 88.1513 }, + { {-0.556641,-1.53369,-2.39481}, 93.8058 } + }; + chairPos[] = { + { {1.99609,-2.19531,-2.40153}, 124.93 } + }; + tablePos[] = { + { {-2.42383,2.229,-2.38727}, 3.42621 } + }; + }; + class Land_House_Small_03_F : Default { + shelfPos[] = { + { {-1.22559,4.9668,-1.32402}, 0 } + }; + fridgePos[] = { + { {-3.01465,-1.84375,-1.32402}, 173 } + }; + bedPos[] = { + { {-3.58789,3.50586,-1.32402}, 360 } + }; + couchPos[] = { + { {1.82227,1.22754,-1.33284}, 0 } + }; + wardrobePos[] = { + { {-5.9375,1.37109,-1.32402}, 270 } + }; + cookerPos[] = { + { {-4.34082,-1.72656,-1.32402}, 178 } + }; + chairPos[] = { + { {2.62207,-1.78809,-1.33284}, 128 } + }; + filingPos[] = { + { {2.71094,4.85059,-1.32402}, 80 } + }; + shoeboxPos[] = { + { {-0.546875,-1.90332,-1.32402}, 220 } + }; + }; + class Land_House_Native_01_F : Default { + shelfPos[] = { + { {-0.728516,-2.77393,-3.09498}, 179.287 } + }; + bedPos[] = { + { {0.015625,2.1377,-3.09498}, 267.599 } + }; + couchPos[] = { + { {2.50391,-1.8877,-3.09498}, 89.2346 } + }; + chairPos[] = { + { {-4.26367,2.45264,-3.09498}, 314.553 }, + { {-4.18945,-2.64697,-3.09498}, 230.264 } + }; + tablePos[] = { + { {4.14258,2.20703,-3.09498}, 86.9606 } + }; + }; + class Land_Shed_05_F : Default { + shelfPos[] = { + { {0.584961,-2.53516,-0.917485}, 179 }, + { {2.10938,-2.5376,-0.885151}, 180 } + }; + toolRackPos[] = { + { {-2.91504,0.525391,-1.18515}, 271 } + }; + shoeboxPos[] = { + { {2.6543,1.2959,-0.917485}, 179 } + }; + palletPos[] = { + { {-2.04883,0.546875,-0.917485}, 239 } + }; + }; + class Land_Shed_04_F : Default { + shoeboxPos[] = { + { {-0.276367,0.746094,-0.730756}, 20 } + }; + }; + class Land_Addon_05_F : Default { + shoeboxPos[] = { + { {-2.1875,-8.24023,-1.5455}, 20 } + }; + palletPos[] = { + { {3.5293,-9.71973,-10}, 350 } + }; + cabinetPos[] = { + { {0.197266,8.04199,-0.245499}, 270 } + }; + }; + class Land_Shed_06_F : Default { + palletPos[] = { + { {0.900391,-3.4082,-10}, 150 }, + { {3.21875,3.33691,-10}, 240 } + }; + }; + class Land_House_Small_04_F : Default { + fridgePos[] = { + { {0.599609,3.83398,-0.817202}, 88 } + }; + couchPos[] = { + { {-1.0459,-3.00391,-0.879978}, 170 } + }; + wardrobePos[] = { + { {2.64111,-0.519531,-0.879978}, 349 } + }; + cookerPos[] = { + { {0.489746,2.70313,-0.817202}, 88 } + }; + chairPos[] = { + { {-3.22803,3.57813,-0.879978}, 93 }, + { {-1.81592,-5.86133,-0.879978}, 350 } + }; + filingPos[] = { + { {3.86328,-0.421875,-0.817202}, 4.99998 } + }; + freezerPos[] = { + { {0.489746,1.13086,-0.979978}, 83 } + }; + }; + class Land_House_Small_01_F : Default { + fridgePos[] = { + { {1.35645,1.26563,-0.711113}, 270 } + }; + bedPos[] = { + { {-0.301758,2.41602,-0.711113}, 0 }, + { {-5.28613,2.12988,-0.711113}, 181 } + }; + couchPos[] = { + { {5.02441,-1.78613,-0.711113}, 3 } + }; + wardrobePos[] = { + { {-3.15137,3.43164,-0.711113}, 0 } + }; + cookerPos[] = { + { {1.47168,2.39844,-0.711113}, 274 } + }; + chairPos[] = { + { {-5.77539,-3.21094,-0.711113}, 230 } + }; + filingPos[] = { + { {1.37012,-3.65039,-0.711113}, 260 } + }; + tablePos[] = { + { {-2.49512,-3.42383,-0.711113}, 180 } + }; + lockerPos[] = { + { {1.37012,-2.08496,-0.711113}, 269 } + }; + shoeboxPos[] = { + { {5.11621,3.51172,-0.711113}, 330 } + }; + freezerPos[] = { + { {2.83594,3.32129,-0.711113}, 0 } + }; + }; + class Land_Shop_Town_04_F : Default { + filingPos[] = { + { {-2.57227,7.74902,-2.47962}, 160 } + }; + tablePos[] = { + { {-0.00585938,-5.6123,-2.43639}, 7.00001 } + }; + shoeboxPos[] = { + { {3.9082,-5.51563,-2.43639}, 30 } + }; + }; + class Land_Shop_Town_01_F : Default { + shelfPos[] = { + { {-0.230469,3.29053,-3.27726}, 90 } + }; + fridgePos[] = { + { {-4.0918,5.69189,-3.27726}, 0 } + }; + couchPos[] = { + { {-3.29492,-2.98584,-3.27726}, 180 } + }; + chairPos[] = { + { {4.00586,-1.50049,-3.27726}, 60 } + }; + filingPos[] = { + { {1.95313,-1.27393,-3.27726}, 340 }, + { {2.74023,-1.27441,-3.27726}, 9.99994 } + }; + tablePos[] = { + { {2.83008,-3.90283,-3.27726}, 180 } + }; + palletPos[] = { + { {-3.70313,1.3208,-3.27726}, 190 } + }; + freezerPos[] = { + { {-2.94531,5.59961,-3.27726}, 0 } + }; + }; + class Land_House_Small_05_F : Default { + bedPos[] = { + { {-2.17871,4.17773,-1.08628}, 270 } + }; + couchPos[] = { + { {-2.03711,-0.123047,-1.08628}, 90 } + }; + wardrobePos[] = { + { {1.28809,2.62012,-1.08628}, 96 } + }; + chairPos[] = { + { {-3.27539,-2.1377,-1.08628}, 340 } + }; + }; + class Land_Slum_05_F : Default { + shoeboxPos[] = { + { {-0.156738,-4.78711,0.0666714}, 340 } + }; + }; + class Land_WaterTower_01_F : Default { + shoeboxPos[] = { + { {0.326172,0.492188,3.83657}, 343 } + }; + }; + class Land_Shed_02_F : Default { + shelfPos[] = { + { {-1.08301,-0.931641,-0.853716}, 184 } + }; + shoeboxPos[] = { + { {1.39258,-0.668945,-0.853716}, 134 } + }; + palletPos[] = { + { {0.96582,1.17871,-0.853716}, 360 } + }; + freezerPos[] = { + { {-1.03418,2.05859,-0.853716}, 360 } + }; + }; + class Land_House_Small_06_F : Default { + shelfPos[] = { + { {-1.25879,-5.12598,-1.00433}, 180 } + }; + bedPos[] = { + { {1.31641,-3.91016,-1.00433}, 0.999985 } + }; + couchPos[] = { + { {-2.30176,0.980469,-1.00433}, 270 } + }; + chairPos[] = { + { {-0.439453,3.0625,-1.00503}, 170 }, + { {-3.89941,3.2666,-1.00503}, 190 } + }; + filingPos[] = { + { {-4.15234,1.86719,-1.00503}, 360 } + }; + tablePos[] = { + { {-4.20703,-3.69238,-1.00433}, 270 } + }; + shoeboxPos[] = { + { {1.64063,1.83301,-1.00433}, 310 } + }; + }; + class Land_Shop_Town_02_F : Default { + shoeboxPos[] = { + { {-5.40625,6.30664,-2.15892}, 100 } + }; + palletPos[] = { + { {-2.86523,-4.47754,-2.14134}, 100 } + }; + freezerPos[] = { + { {1.40332,-3.96875,-2.14405}, 7 } + }; + }; + class Land_House_Small_02_F : Default { + fridgePos[] = { + { {-3.88184,5.76367,-0.748837}, 359 } + }; + bedPos[] = { + { {-0.28125,-4.79785,-0.748837}, 0 }, + { {-3.46777,-4.79102,-0.748837}, 180 } + }; + couchPos[] = { + { {-0.484375,2.29688,-0.748837}, 0 } + }; + wardrobePos[] = { + { {-3.2041,0.615234,-0.748837}, 180 } + }; + cookerPos[] = { + { {-2.75586,5.69043,-0.748837}, 359 } + }; + tablePos[] = { + { {-3.56055,-0.798828,-0.748837}, 350 } + }; + shoeboxPos[] = { + { {0.357422,-0.501953,-0.748837}, 350 } + }; + freezerPos[] = { + { {-0.652344,5.69824,-0.748837}, 1.99997 } + }; + }; + class Land_Shed_01_F : Default { + filingPos[] = { + { {1.42285,1.47559,-0.931513}, 350 } + }; + freezerPos[] = { + { {-1.77344,1.41309,-0.931513}, 9.99995 } + }; + cabinetPos[] = { + { {0.115234,1.83984,0.21385}, 90 } + }; + }; + class Land_Shop_Town_03_F : Default { + shelfPos[] = { + { {0.864258,0.563477,-3.12776}, 0 }, + { {2.90137,0.589844,-3.12776}, 0 }, + { {-6.33594,-2.21094,-3.12776}, 270 }, + { {-6.39063,-4.15137,-3.12776}, 270 } + }; + fridgePos[] = { + { {5.53223,7.76563,-3.12776}, 0 } + }; + couchPos[] = { + { {0.0869141,-4.16504,-3.12776}, 180 } + }; + cookerPos[] = { + { {4.52539,7.6748,-3.12776}, 0 } + }; + chairPos[] = { + { {-5.86816,0.150391,-3.12776}, 310 } + }; + filingPos[] = { + { {2.05469,1.57422,-3.12776}, 180 }, + { {2.9375,1.5293,-3.12776}, 160 }, + { {-3.66406,-6.05957,-3.12776}, 179 } + }; + tablePos[] = { + { {-0.3125,7.65527,-3.12776}, 0 } + }; + lockerPos[] = { + { {-6.18066,6.2627,-3.12776}, 270 } + }; + toolRackPos[] = { + { {0.198242,4.85742,-3.12776}, 180 } + }; + shoeboxPos[] = { + { {-0.901367,-0.350586,-3.12776}, 350 } + }; + palletPos[] = { + { {-2.46289,-0.205078,-3.12776}, 0 }, + { {5.70898,-5.57129,-3.12776}, 0 } + }; + freezerPos[] = { + { {6.17578,0.0576172,-3.12776}, 90 } + }; + cabinetPos[] = { + { {-5.32715,8.04883,-1.71284}, 90 } + }; + }; + class Land_Addon_03_F : Default { + palletPos[] = { + { {-1.4248,-6.35352,-10}, 129 } + }; + }; + class Land_MetalShelter_01_F : Default { + palletPos[] = { + { {1.09033,-3.78711,-10}, 219 }, + { {-0.870117,5.29102,-10}, 129 } + }; + }; + class Land_MetalShelter_02_F : Default { + palletPos[] = { + { {3.93555,-1.65918,-10}, 169 }, + { {-0.0859375,7.17285,-10}, 169 } + }; + }; + class Land_Slum_03_F : Default { + shelfPos[] = { + { {0.338867,6.85938,-0.651794}, 87 } + }; + fridgePos[] = { + { {-0.0244141,-1.3252,-0.651794}, 180 } + }; + bedPos[] = { + { {-0.658203,3.54785,-0.651794}, 0 } + }; + couchPos[] = { + { {2.02246,2.97363,-0.651794}, 179 } + }; + wardrobePos[] = { + { {-4.66406,6.22168,-0.651794}, 250 } + }; + cookerPos[] = { + { {0.0136719,1.4209,-0.651794}, 78 } + }; + chairPos[] = { + { {-4.56445,2.78223,-0.651794}, 220 }, + { {5.11914,7.11035,-0.651794}, 60 } + }; + filingPos[] = { + { {1.20703,-1.32129,-0.451795}, 178 } + }; + tablePos[] = { + { {5.24902,1.26953,-0.651794}, 90 } + }; + shoeboxPos[] = { + { {-3.74512,-1.3291,-0.651794}, 50 } + }; + freezerPos[] = { + { {-1.34277,-1.23926,-0.651794}, 180 } + }; + }; + class Land_Supermarket_01_F : Default { + limit = 6; + shelfPos[] = { + { {7.64648,9.40625,-1.50003}, 90 }, + { {-5.44336,11.3174,-1.50003}, 270 } + }; + fridgePos[] = { + { {7.4541,8.25293,-1.50003}, 90 } + }; + filingPos[] = { + { {7.33008,2.6748,-1.50003}, 90 }, + { {-5.30859,7.14551,-1.50003}, 180 } + }; + lockerPos[] = { + { {7.45508,11.6025,-1.50003}, 90 } + }; + shoeboxPos[] = { + { {1.94336,-0.0195313,-0.604303}, 70 }, + { {-2.12598,-0.510742,-0.249176}, 70 }, + { {-1.76465,6.97363,-0.954569}, 0 }, + { {-0.787109,-7.65137,-0.519948}, 70 }, + { {6.39746,-8.38379,-0.604303}, 0 }, + { {2.74609,13.0088,-0.964099}, 0 } + }; + palletPos[] = { + { {-3.33301,12.2793,-1.50003}, 0 } + }; + freezerPos[] = { + { {1.66504,-2.0127,-1.50003}, 270 }, + { {-5.13867,-4.80469,-1.50003}, 270 } + }; + cabinetPos[] = { + { {5.44238,3.73242,-0.411002}, 180 } + }; + }; + class Land_Shop_City_04_F : Default { + shoeboxPos[] = { + { {-0.371094,-9.38672,-3.86604}, 340 } + }; + palletPos[] = { + { {8.04004,2.60254,-10}, 360 } + }; + }; + class Land_Addon_04_F : Default { + shelfPos[] = { + { {-0.568359,-1.52441,0.313654}, 180 } + }; + fridgePos[] = { + { {-1.32617,-7.26465,0.295511}, 180 } + }; + couchPos[] = { + { {-2.7666,0.267578,0.313654}, 180 } + }; + cookerPos[] = { + { {-3.54883,-5.06836,0.315461}, 270 } + }; + chairPos[] = { + { {4.83691,-1.95801,0.313654}, 260 }, + { {3.29785,-7.03223,0.295511}, 160 }, + { {-5.05273,-7.73633,0.315461}, 90 } + }; + tablePos[] = { + { {1.59961,-7.15234,0.295511}, 180 } + }; + shoeboxPos[] = { + { {1.36914,1.98438,0.313654}, 210 } + }; + freezerPos[] = { + { {-0.391602,-2.87891,0.295511}, 90 } + }; + }; + class Land_House_Big_05_F : Default { + chairPos[] = { + { {-4.15723,4.97559,-1.51147}, 160 }, + { {-9.0625,-5.37061,-1.51147}, 250 } + }; + filingPos[] = { + { {4.51758,4.67822,-1.11731}, 260 } + }; + shoeboxPos[] = { + { {2.64258,-4.01025,-1.51147}, 250 }, + { {-2.81543,6.1792,-1.51147}, 260 } + }; + freezerPos[] = { + { {4.5791,-4.1543,-1.11731}, 350 } + }; + }; + class Land_Shop_City_07_F : Default { + filingPos[] = { + { {0.467773,1.75781,0.0203753}, 187 } + }; + pelicanPos[] = { + { {3.10742,-6.49805,3.61298}, 110 } + }; + shoeboxPos[] = { + { {-4.28418,3.27246,3.61298}, 110 }, + { {-2.88184,-7.625,-2.9677}, 7.00001 } + }; + palletPos[] = { + { {2.91406,5.62598,-3.31962}, 180 } + }; + }; + class Land_Addon_01_F : Default { + chairPos[] = { + { {-0.0292969,-2.26465,-1.18165}, 0 } + }; + shoeboxPos[] = { + { {-0.220703,2,-1.18165}, 197 } + }; + }; + class Land_House_Big_03_F : Default { + shelfPos[] = { + { {3.06348,-0.749023,-3.17077}, 358 } + }; + fridgePos[] = { + { {1.45996,3.63086,-3.18166}, 358 } + }; + bedPos[] = { + { {3.14551,3.02051,-0.0877934}, 268 } + }; + couchPos[] = { + { {9.25977,1.07813,-3.18166}, 90 } + }; + cookerPos[] = { + { {2.42676,3.52832,-3.18166}, 358 } + }; + chairPos[] = { + { {2.37793,-2.84863,-0.0877924}, 250 }, + { {1.91211,6.02051,-0.130716}, 308 }, + { {10.9111,4.89844,-3.22091}, 170 } + }; + filingPos[] = { + { {2.0166,-0.995117,-3.17077}, 353 } + }; + tablePos[] = { + { {7.98242,-2.47754,-0.0877924}, 134 }, + { {9.17285,3.52832,-3.18166}, 359 } + }; + toolRackPos[] = { + { {1.76855,-3.7998,-3.17077}, 269 } + }; + shoeboxPos[] = { + { {-6.37891,-5.76563,-0.118968}, 128 } + }; + palletPos[] = { + { {6.00977,-4.7666,-3.17077}, 269 } + }; + freezerPos[] = { + { {5.45313,0.272461,-3.18166}, 179 } + }; + }; + class Land_House_Big_01_F : Default { + fridgePos[] = { + { {0.23584,5.61719,-1.02038}, 360 } + }; + couchPos[] = { + { {0.98584,0.580078,-1.02038}, 180 } + }; + wardrobePos[] = { + { {7.31494,2.14844,-1.02038}, 93 } + }; + cookerPos[] = { + { {1.19141,5.53125,-1.02038}, 360 } + }; + chairPos[] = { + { {7.07471,-0.691406,-1.02038}, 136 }, + { {-6.84961,-2.28125,-1.02038}, 345.9 } + }; + filingPos[] = { + { {7.33984,5.61914,-1.02038}, 3 } + }; + tablePos[] = { + { {6.8042,-2.19336,-1.02038}, 1.99997 } + }; + freezerPos[] = { + { {4.15479,5.52344,-1.02038}, 360 } + }; + }; + class Land_Hotel_02_F : Default { + bedPos[] = { + { {3.78418,-0.498047,0.221087}, 90 }, + { {3.76855,2.49609,0.221087}, 270 } + }; + chairPos[] = { + { {-8.21875,-1.00781,0.0842772}, 225 }, + { {-9.95703,-1.77148,-3.41891}, 90 }, + { {-1.83398,15.1475,-3.40639}, 360 } + }; + filingPos[] = { + { {6.56641,-2.00391,-3.42002}, 181 } + }; + tablePos[] = { + { {-8.43945,-0.506836,-3.40639}, 270 }, + { {-8.44727,2.4834,0.0842772}, 270 } + }; + lockerPos[] = { + { {-5.14746,-1.97754,-3.40639}, 181 } + }; + shoeboxPos[] = { + { {4.52832,0.628906,-2.55951}, 130 } + }; + palletPos[] = { + { {-1.97754,0.867188,-3.40639}, 348 } + }; + freezerPos[] = { + { {7.91699,-1.58008,-3.4237}, 90 } + }; + cabinetPos[] = { + { {-8.8584,3.79102,-2.28192}, 360 } + }; + }; + class Land_Slum_04_F : Default { + shoeboxPos[] = { + { {4.09277,2.27441,0.0612197}, 257 } + }; + }; + class Land_GarageShelter_01_F : Default { + couchPos[] = { + { {-1.33691,-0.69043,-1.26478}, 360 } + }; + tablePos[] = { + { {-3.50391,3.37988,-1.26478}, 357 } + }; + toolRackPos[] = { + { {-4.56738,0.189453,-1.26478}, 272 } + }; + shoeboxPos[] = { + { {-4.22461,-2.53906,-1.26478}, 157 } + }; + palletPos[] = { + { {3.78418,2.875,-1.26478}, 258 } + }; + freezerPos[] = { + { {-4.10742,1.94824,-1.26478}, 270 } + }; + }; + class Land_Church_03_F : Default { + chairPos[] = { + { {7.31055,-5.0791,-7.20663}, 282 } + }; + shoeboxPos[] = { + { {7.10645,-6.07715,-7.20654}, 220 } + }; + }; + class Land_Shed_07_F : Default { + shelfPos[] = { + { {-4.88574,1.10059,-10}, 267 } + }; + lockerPos[] = { + { {-4.56445,-1.59277,-10}, 265 } + }; + toolRackPos[] = { + { {-1.2002,-2.32715,-10}, 175 } + }; + palletPos[] = { + { {0.436523,1.31348,-10}, 190 }, + { {3.9668,-1.38477,-10}, 140 } + }; + }; + class Land_School_01_F : Default { + shelfPos[] = { + { {4.15234,-0.0341797,-1.27842}, 90 }, + { {14.5557,3.80078,-1.27842}, 90 } + }; + fridgePos[] = { + { {-3.97363,-0.359375,-1.27842}, 270 } + }; + bedPos[] = { + { {5.70605,-1.58789,-1.27842}, 177 } + }; + couchPos[] = { + { {13.4473,-1.30078,-1.27842}, 359 }, + { {-13.4824,-1.14453,-1.27842}, 180 } + }; + wardrobePos[] = { + { {-5.03516,-0.242188,-1.27842}, 90 } + }; + cookerPos[] = { + { {-3.83594,4.10742,-1.27842}, 274 } + }; + chairPos[] = { + { {8.8584,3.96484,-1.27842}, 359 }, + { {-14.0371,3.93262,-1.27842}, 319 } + }; + filingPos[] = { + { {4.07422,4.17285,-1.27842}, 9.99996 }, + { {-4.93359,4.17871,-1.27842}, 9.99996 } + }; + tablePos[] = { + { {7.83301,-2.52832,-1.27842}, 180 }, + { {-14.2764,1.65723,-1.27842}, 270 } + }; + lockerPos[] = { + { {-3.95215,-2.07324,-1.27842}, 270 } + }; + shoeboxPos[] = { + { {2.13672,-2.58105,-1.27842}, 30 } + }; + freezerPos[] = { + { {-3.87012,0.894531,-1.27842}, 270 } + }; + cabinetPos[] = { + { {-1.21094,-2.92285,0.014966}, 270 } + }; + }; + class Land_Temple_Native_01_F : Default { + shelfPos[] = { + { {3.4541,0.648438,-5.94443}, 90 } + }; + couchPos[] = { + { {2.37207,3.21094,-5.94443}, 0 } + }; + chairPos[] = { + { {-3.0791,4.45801,-5.94443}, 310 } + }; + tablePos[] = { + { {-0.0419922,4.62695,-5.94443}, 0 } + }; + shoeboxPos[] = { + { {-3.23047,-0.166016,-5.94443}, 220 } + }; + }; + class Land_Shop_City_06_F : Default { + wardrobePos[] = { + { {-6.61328,0.117188,-4.06814}, 259 } + }; + chairPos[] = { + { {-5.58203,2.58203,-0.322272}, 230 } + }; + filingPos[] = { + { {-6.78125,1.59766,-4.06819}, 280 }, + { {8.04297,3.90674,-0.322294}, 90 } + }; + tablePos[] = { + { {-5.76172,6.38916,-0.322268}, 270 } + }; + lockerPos[] = { + { {-1.50195,2.33984,-0.322311}, 179 } + }; + toolRackPos[] = { + { {0.0507813,3.70508,-4.39184}, 270 } + }; + shoeboxPos[] = { + { {-7.73047,-1.41846,5.20514}, 220 } + }; + palletPos[] = { + { {1.58789,6.33545,-4.302}, 250 } + }; + cabinetPos[] = { + { {0.0820313,6.07031,-3.002}, 0 } + }; + }; + class Land_Shop_Town_05_F : Default { + shelfPos[] = { + { {0.0429688,-5.08594,-2.70736}, 356 } + }; + chairPos[] = { + { {-4.22852,-5.55566,-2.77661}, 40 } + }; + filingPos[] = { + { {4.31934,-5.24805,-2.70736}, 310 } + }; + shoeboxPos[] = { + { {4.31445,9.11523,-2.66736}, 160 } + }; + }; + class Land_Shop_City_03_F : Default { + shelfPos[] = { + { {6.98975,-2.47461,-4.96662}, 90 } + }; + fridgePos[] = { + { {0.209473,-2.37695,-4.6728}, 273 } + }; + couchPos[] = { + { {3.53662,0.644531,-4.96672}, 0 } + }; + filingPos[] = { + { {6.75244,-3.24805,-4.96664}, 91 } + }; + shoeboxPos[] = { + { {4.67041,8.10352,-3.23532}, 92 } + }; + cabinetPos[] = { + { {4.68262,7.24609,-3.82146}, 180 } + }; + }; + class Land_Church_01_F : Default { + chairPos[] = { + { {-1.61426,15.6572,-10.5169}, 190 } + }; + shoeboxPos[] = { + { {-7.59375,-1.33301,-9.98111}, 120 } + }; + freezerPos[] = { + { {7.74609,1.15723,-9.98111}, 270 } + }; + }; + class Land_Warehouse_03_F : Default { + shelfPos[] = { + { {8.17676,1.42285,0.150167}, 90 }, + { {6.45313,5.35156,-2.37297}, 0 }, + { {-10.8906,-4.6582,-2.37297}, 270 } + }; + lockerPos[] = { + { {6.87402,5.19043,0.150167}, 0 } + }; + toolRackPos[] = { + { {5.27441,4.51074,-2.37297}, 89 } + }; + shoeboxPos[] = { + { {6.95605,-5.28223,-2.37297}, 141 } + }; + palletPos[] = { + { {4.35156,1.79883,-2.37297}, 160 }, + { {-5.1748,4.30371,-2.37297}, 190 } + }; + freezerPos[] = { + { {4.84082,-5.00684,-2.37297}, 90 } + }; + cabinetPos[] = { + { {5.24707,-2.82715,-0.982677}, 180 } + }; + }; + class Land_House_Big_04_F : Default { + bedPos[] = { + { {-5.24219,1.9375,0.267768}, 91 } + }; + couchPos[] = { + { {2.4834,2.03711,0.265382}, 89 }, + { {3.07227,-2.52051,-3.00084}, 270 } + }; + wardrobePos[] = { + { {-2.32129,1.14453,0.266175}, 181 } + }; + chairPos[] = { + { {-5.89453,4.40234,0.270024}, 301 } + }; + filingPos[] = { + { {-6.16699,-5.22168,-3.00084}, 255 } + }; + tablePos[] = { + { {2.20801,-4.98145,-3.00084}, 180 }, + { {3.58496,4.55859,0.267125}, 0 } + }; + shoeboxPos[] = { + { {-4.35059,-1.54102,-2.95084}, 315.7 } + }; + }; + class Land_Shop_City_02_F : Default { + shelfPos[] = { + { {0.958984,-2.36719,-4.38168}, 270 }, + { {0.954102,-4.19531,-4.38123}, 270 }, + { {8.28809,-5.41211,-4.37245}, 90 } + }; + fridgePos[] = { + { {-10.2744,-2.09766,-4.34924}, 3 } + }; + couchPos[] = { + { {2.97266,-7.19531,-4.37758}, 108 } + }; + wardrobePos[] = { + { {4.74902,-4.83594,-4.37564}, 310 } + }; + cookerPos[] = { + { {6.80273,-1.58203,-4.3743}, 360 }, + { {7.94434,-1.58398,-4.37358}, 4.99999 }, + { {-8.07227,-3.92969,-4.39757}, 90 } + }; + chairPos[] = { + { {-0.245117,-8.36523,-4.38341}, 90 }, + { {4.65723,7.82031,-4.38109}, 207 }, + { {5.375,-8.06055,-4.37345}, 188 } + }; + filingPos[] = { + { {1.33105,2.37891,-4.38319}, 360 }, + { {2.0791,2.39453,-4.38221}, 360 }, + { {-0.109375,-4.94531,-4.38316}, 0 }, + { {4.41504,10.0195,-4.34025}, 360 } + }; + tablePos[] = { + { {-2.09668,-5.21094,-4.38676}, 352 } + }; + toolRackPos[] = { + { {-1.51758,-4.61328,-4.38571}, 360 } + }; + palletPos[] = { + { {4.59668,0.285156,-4.378}, 0 } + }; + freezerPos[] = { + { {2.84473,-1.625,-4.3795}, 0 }, + { {-8.09082,-2.61133,-4.34924}, 89 }, + { {7.62695,9.83398,-4.37802}, 180 } + }; + cabinetPos[] = { + { {0.881836,0.953125,-3.09679}, 0 } + }; + }; + class Land_Shop_City_01_F : Default { + bedPos[] = { + { {1.64746,3.81543,-4.95041}, 226 } + }; + couchPos[] = { + { {5.36328,4.43457,-4.95041}, 270 } + }; + wardrobePos[] = { + { {0.811523,-0.87207,-4.95041}, 0 } + }; + cookerPos[] = { + { {2.68848,-1.00391,-4.9569}, 320 } + }; + shoeboxPos[] = { + { {1.87305,6.26074,-5.00912}, 270 } + }; + palletPos[] = { + { {0.708008,0.950195,-4.9469}, 270 } + }; + freezerPos[] = { + { {7.10352,2.82227,-4.9469}, 280 } + }; + }; + class Land_Hotel_01_F : Default { + limit = 6; + shelfPos[] = { + { {-0.0751953,-0.589844,-1.57032}, 90 } + }; + bedPos[] = { + { {3.67285,-2.13672,4.51435}, 270 }, + { {-4.98633,-2.0625,4.51435}, 270 } + }; + wardrobePos[] = { + { {-3.37695,-4.43359,4.51435}, 180 } + }; + chairPos[] = { + { {0.660156,2.75,-5.30929}, 52 }, + { {1.8125,-4.20605,4.51435}, 180 }, + { {-5.70996,5.68945,-5.30929}, 320 } + }; + filingPos[] = { + { {-0.948242,0.246094,1.67968}, 100 }, + { {-6.01855,-2.06543,-5.3093}, 280 }, + { {4.64453,-4.41895,4.51435}, 90 }, + { {-6.00586,-2.71484,-5.3093}, 270 } + }; + tablePos[] = { + { {2.76465,-4.37891,-5.3093}, 172 } + }; + lockerPos[] = { + { {4.58594,3.08594,-5.30929}, 90 }, + { {-6.0127,-0.396484,-5.3093}, 270 } + }; + shoeboxPos[] = { + { {-2.58398,-2.90625,-4.2657}, 232 }, + { {-5.65625,7.53809,4.51435}, 60 } + }; + cabinetPos[] = { + { {-6.30371,-3.88086,-4.10929}, 360 } + }; + }; + class Land_FuelStation_01_shop_F : Default { + shelfPos[] = { + { {-5.38574,2.01367,-2.01301}, 273 }, + { {-5.38574,3.31836,-2.01301}, 269 } + }; + chairPos[] = { + { {1.80371,-4.5957,-2.01301}, 122 } + }; + filingPos[] = { + { {-5.16309,0.28125,-2.01301}, 275 }, + { {-5.17676,4.62695,-2.01301}, 270 } + }; + tablePos[] = { + { {-0.15918,-4.7832,-2.01301}, 182 } + }; + lockerPos[] = { + { {2.07715,4.13086,-2.01301}, 95 } + }; + toolRackPos[] = { + { {-2.93164,5.10742,-2.01301}, 360 } + }; + shoeboxPos[] = { + { {-5.19629,-1.38281,-0.972044}, 152 } + }; + palletPos[] = { + { {1.53613,1.92383,-2.01301}, 182 } + }; + }; + class Land_FuelStation_01_workshop_F : Default { + shelfPos[] = { + { {-5.50488,2.46582,-2.35666}, 269 }, + { {-5.50781,-2.78809,-2.35666}, 269 } + }; + filingPos[] = { + { {-5.28809,3.89063,-2.35666}, 269 } + }; + lockerPos[] = { + { {2.71387,4.0293,-2.35666}, 359 } + }; + toolRackPos[] = { + { {-5.63086,-0.30957,-2.35666}, 270 } + }; + shoeboxPos[] = { + { {5.57715,-5.3418,-2.35666}, 270 } + }; + palletPos[] = { + { {-1.60742,-4.74414,-2.35666}, 270 }, + { {-4.48926,-4.70801,-2.35666}, 270 } + }; + cabinetPos[] = { + { {5.38184,4.33203,-1.05667}, 90 } + }; + }; + class Land_FuelStation_02_workshop_F : Default { + shelfPos[] = { + { {-5.18164,7.65918,-1.2675}, 270 } + }; + chairPos[] = { + { {4.39941,-1.01563,-1.2675}, 110 }, + { {4.35449,4.03906,-1.2675}, 83 } + }; + filingPos[] = { + { {4.56738,8.05664,-1.2675}, 0 } + }; + tablePos[] = { + { {4.45215,1.9668,-1.2675}, 90 } + }; + lockerPos[] = { + { {1.24707,8.13867,-1.2675}, 0 } + }; + toolRackPos[] = { + { {-2.81348,8.49121,-1.08995}, 0 } + }; + palletPos[] = { + { {-2.7793,3.2002,-1.08995}, 183 } + }; + cabinetPos[] = { + { {-0.326172,-1.26367,0.0900497}, 180 } + }; + }; + class Land_Mausoleum_01_F : Default { + shoeboxPos[] = { + { {-1.93823,-1.89551,-1.9543}, 114.315 } + }; + palletPos[] = { + { {-0.547119,1.19141,-1.9543}, 114.315 } + }; + }; + class Land_Barracks_01_grey_F : Default { + lootType = "mil"; + limit = 6; + shelfPos[] = { + { {-2.03589,-3.18555,0.518449}, 0 }, + { {1.44531,3.97949,0.518449}, 90 }, + { {2.10278,-3.72656,0.518448}, 270 }, + { {-7.10156,-1.87695,0.518449}, 89.4737 }, + { {-7.10596,2.8125,0.518449}, 90 }, + { {8.07251,3.89014,3.85143}, 92 }, + { {8.72681,3.58398,0.518449}, 270 }, + { {8.74683,-3.81934,0.518448}, 270 } + }; + fridgePos[] = { + { {-13.2495,-3.90918,0.518448}, 267 }, + { {-13.2495,-4.00391,3.85143}, 268 } + }; + bedPos[] = { + { {3.47974,2.33691,0.518449}, 90 }, + { {10.0161,-2.19824,0.518448}, 272 }, + { {-12.1023,2.34717,0.518449}, 89.4737 } + }; + couchPos[] = { + { {4.35059,-3.25342,3.85143}, 94 } + }; + cookerPos[] = { + { {-10.3127,-4.0293,3.85143}, 184 }, + { {-13.1499,-2.58691,0.518449}, 271 }, + { {14.1487,4.17773,0.518449}, 88 } + }; + chairPos[] = { + { {-3.70532,-5.94531,3.85143}, 180 }, + { {7.47803,-1.68994,3.85143}, 24 }, + { {14.0408,4.00049,3.85143}, 40 } + }; + filingPos[] = { + { {1.06055,1.62598,0.518449}, 170 }, + { {-7.30127,4.28271,0.518449}, 81.4737 }, + { {7.87549,-4.22852,3.85143}, 94 }, + { {8.95898,1.65479,3.85143}, 194 }, + { {8.93774,-4.21045,3.85143}, 258 } + }; + pelicanPos[] = { + { {13.9045,2.07129,3.85143}, 120 }, + { {-12.968,5.62793,3.85143}, 325.474 } + }; + tablePos[] = { + { {6.77832,-3.88818,0.518448}, 180 }, + { {-5.36353,-5.91406,3.85143}, 190 }, + { {9.72827,-1.60449,3.85143}, 358 } + }; + lockerPos[] = { + { {-5.56592,1.63184,3.85143}, 180 }, + { {-5.60791,1.63428,0.518449}, 181 }, + { {7.23291,-1.49609,0.518448}, 0 }, + { {-12.5654,1.63623,3.85143}, 180 }, + { {14.2329,-3.45313,3.85143}, 90 } + }; + toolRackPos[] = { + { {4.19165,1.28271,3.85143}, 180 } + }; + shoeboxPos[] = { + { {0.542969,1.71289,3.85143}, 210 } + }; + palletPos[] = { + { {0.747803,3.71387,3.85143}, 180 }, + { {7.26978,3.72852,0.518449}, 90 }, + { {-7.85474,3.74756,3.85143}, 270 } + }; + freezerPos[] = { + { {-13.1458,-1.80273,3.85143}, 270 }, + { {13.8433,1.73633,0.518449}, 180 } + }; + cabinetPos[] = { + { {7.58691,1.3418,1.75143}, 267 } + }; + }; + class Land_Barracks_01_camo_F : Land_Barracks_01_grey_F {}; + class Land_Church_02_F : Default { + chairPos[] = { + { {0.820313,-15.8745,-3.31618}, 360 }, + { {-0.789795,-15.8867,-3.31618}, 360 } + }; + shoeboxPos[] = { + { {3.60547,-15.7925,-2.38721}, 330 }, + { {-3.66235,18.7886,-3.1444}, 162 } + }; + palletPos[] = { + { {-5.76733,-11.1523,-10}, 162 } + }; + }; + class Land_SCF_01_warehouse_F : Default { + shelfPos[] = { + { {-8.89941,17.1563,-4.61258}, 90 } + }; + shoeboxPos[] = { + { {0.47168,-6.45068,3.87006}, 349 }, + { {15.7676,15.7952,-4.58326}, 240 } + }; + palletPos[] = { + { {4.05469,-12.293,-4.57731}, 360 }, + { {9.12354,-12.5586,-4.57731}, 40 }, + { {-10.6152,15.0613,-4.61258}, 40 } + }; + cabinetPos[] = { + { {2.73633,-11.3958,-3.37731}, 92 } + }; + }; + class Land_Shed_Small_F : Default { + palletPos[] = { + { {-2.91113,-10.7017,-10}, 81 }, + { {4.06006,10.9492,-10}, 349 } + }; + }; + class Land_GuardHouse_01_F : Default { + lootType = "mil"; + shelfPos[] = { + { {-2.41455,-2.44482,-1.02058}, 270 } + }; + bedPos[] = { + { {0.998047,-3.93896,-1.02058}, 90 } + }; + pelicanPos[] = { + { {1.69629,0.259277,0.00792408}, 9.99997 } + }; + lockerPos[] = { + { {-2.2334,-4.14111,-1.02058}, 270 } + }; + shoeboxPos[] = { + { {-2.28906,0.447266,0.00792408}, 320 } + }; + cabinetPos[] = { + { {-0.0507813,0.614258,-0.547749}, 90 } + }; + }; + class Land_Airport_01_controlTower_F : Default { + filingPos[] = { + { {-1.57251,2.68604,4.65874}, 350 } + }; + pelicanPos[] = { + { {0.608643,0.954102,8.11717}, 111 } + }; + shoeboxPos[] = { + { {-0.823242,-0.911133,5.58527}, 220 } + }; + cabinetPos[] = { + { {-2.06567,0.0991211,5.35874}, 0 } + }; + }; + class Land_Airport_01_terminal_F : Default { + shelfPos[] = { + { {-8.92432,3.9043,-4.02355}, 180 } + }; + tablePos[] = { + { {6.97095,8.64941,-4.05115}, 360 }, + { {-15.301,1.44824,-4.03527}, 270 } + }; + lockerPos[] = { + { {-3.4248,2.5918,-4.02355}, 270 } + }; + toolRackPos[] = { + { {-10.52,2.11914,-4.17527}, 90 } + }; + shoeboxPos[] = { + { {-1.11304,-2.05566,-4.17527}, 120 }, + { {8.36523,4.32715,-4.05115}, 211 } + }; + palletPos[] = { + { {-4.90723,6.66016,-4.02355}, 180 }, + { {-8.74316,8.28613,-4.02355}, 180 } + }; + freezerPos[] = { + { {-7.42358,4.20898,-4.02355}, 181 } + }; + cabinetPos[] = { + { {3.85596,0.212891,-2.82126}, 180 } + }; + }; + class Land_dp_smallTank_F : Default { + shoeboxPos[] = { + { {-2.18872,0.745605,5.52527}, 360 } + }; + }; + class Land_House_Big_02_F : Default { + shelfPos[] = { + { {-6.26172,7.39502,-1.45192}, 271.405 } + }; + fridgePos[] = { + { {-4.95996,-0.250977,-1.45192}, 92.4045 } + }; + couchPos[] = { + { {-4.02734,8.32373,-1.45192}, 266 } + }; + wardrobePos[] = { + { {-7.33887,-0.602051,-1.45192}, 200 } + }; + cookerPos[] = { + { {-10.1758,2.96045,-1.45192}, 262.405 } + }; + chairPos[] = { + { {9.18945,-5.94482,-1.45192}, 210 } + }; + filingPos[] = { + { {5.15137,3.5791,-1.45192}, 80.4045 } + }; + tablePos[] = { + { {2.33398,3.50146,-1.45192}, 360 } + }; + toolRackPos[] = { + { {-2.30566,4.39014,-1.45192}, 178.405 } + }; + shoeboxPos[] = { + { {5.00391,1.60986,-1.45192}, 33.4045 } + }; + palletPos[] = { + { {-0.859375,8.72803,-1.45192}, 178.405 } + }; + freezerPos[] = { + { {-10.1797,1.22607,-1.45192}, 271.405 } + }; + }; + class Land_DPP_01_waterCooler_F : Default { + shoeboxPos[] = { + { {3.26855,1.49414,-1.96692}, 200 } + }; + palletPos[] = { + { {0.692383,1.22388,-10}, 200 }, + { {-1.78516,-2.64307,-10}, 200 } + }; + }; + class Land_DPP_01_smallFactory_F : Default { + shelfPos[] = { + { {0.342773,4.88306,-10}, 180 } + }; + shoeboxPos[] = { + { {-10.8447,1.93359,3.08963}, 320 } + }; + palletPos[] = { + { {-1.5752,5.64551,-10}, 190 } + }; + }; + class Land_GantryCrane_01_F : Default { + pelicanPos[] = { + { {-0.723633,1.46777,9.01571}, 120 } + }; + shoeboxPos[] = { + { {1.89746,-0.496094,9.39161}, 220 } + }; + }; + class Land_MobileCrane_01_F : Default { + shelfPos[] = { + { {10.7402,-2.49805,-19.0618}, 91 } + }; + lockerPos[] = { + { {10.5547,2.62158,-19.065}, 90 } + }; + shoeboxPos[] = { + { {7.84961,-3.33984,-8.30899}, 300 } + }; + palletPos[] = { + { {14.0488,-2.7959,-14.0393}, 270 }, + { {15.6523,1.0332,-12.8083}, 250 } + }; + }; + class Land_MobileCrane_01_hook_F : Land_MobileCrane_01_F {}; + class Land_SCF_01_shed_F : Default { + palletPos[] = { + { {9.55371,0.875,-10}, 270 }, + { {-9.4187,-14.084,-10}, 270 } + }; + }; + class Land_Shop_City_05_F : Default { + couchPos[] = { + { {-0.138672,-10.7393,-7.28326}, 274 } + }; + shoeboxPos[] = { + { {1.63086,13.9697,-7.02897}, 190.8 } + }; + palletPos[] = { + { {-9.44238,15.4424,-10}, 190.8 } + }; + }; + class Land_MultistoryBuilding_01_F : Default { + shelfPos[] = { + { {15.0352,5.12891,-21.0171}, 360 } + }; + lockerPos[] = { + { {10.4814,-13.9253,-21.0171}, 179.8 } + }; + toolRackPos[] = { + { {9.27246,-3.62622,-21.0171}, 269 } + }; + shoeboxPos[] = { + { {21.5146,4.90503,-21.0171}, 30 } + }; + palletPos[] = { + { {10.1982,4.39917,-21.0171}, 182.8 }, + { {12.5723,-8.16211,-21.0171}, 182.8 } + }; + cabinetPos[] = { + { {19.5664,5.21143,-19.7702}, 88.8 } + }; + }; + class Land_MultistoryBuilding_03_F : Default { + shelfPos[] = { + { {-1.05566,4.97437,-26}, 100 } + }; + chairPos[] = { + { {-6.9209,-1.37549,-24.2517}, 100 } + }; + filingPos[] = { + { {-1.14063,4.07007,-26}, 100 } + }; + toolRackPos[] = { + { {-2.94629,8.3147,-25.7446}, 3 } + }; + shoeboxPos[] = { + { {-1.65137,-12.4939,-26}, 100 } + }; + palletPos[] = { + { {-5.52832,4.54736,-26}, 0 } + }; + cabinetPos[] = { + { {-0.852539,6.11084,-24.5986}, 180 } + }; + }; + class Land_MultistoryBuilding_04_F : Default { + shelfPos[] = { + { {-8.16956,9.50293,-36.322}, 100 } + }; + chairPos[] = { + { {3.35938,-9.11426,-36.322}, 340 }, + { {-8.71216,-6.77441,-36.322}, 110 } + }; + filingPos[] = { + { {-8.41406,-4.76172,-36.322}, 160 } + }; + shoeboxPos[] = { + { {11.5045,-8.82324,-36.322}, 100 } + }; + palletPos[] = { + { {1.19971,-13.2129,-36.322}, 100 }, + { {-3.46057,13.7285,-36.322}, 100 }, + { {6.96362,13.7822,-36.322}, 70 } + }; + cabinetPos[] = { + { {12.7135,6.69727,-35.3042}, 0 } + }; + }; + class Land_Cathedral_01_F : Default { + chairPos[] = { + { {-7.57324,-0.583008,-9.39412}, 43 } + }; + tablePos[] = { + { {0.451172,-12.4187,-7.82105}, 13 } + }; + shoeboxPos[] = { + { {-9.78125,-9.85229,-9.39412}, 43 } + }; + palletPos[] = { + { {7.71191,-0.686768,-9.39412}, 360 } + }; + }; + class Land_Airport_01_hangar_F : Default { + shelfPos[] = { + { {14.9707,4.25635,-3}, 81 }, + { {-3.5625,15.9639,-3}, 1 }, + { {-8.81055,15.979,-3}, 1 } + }; + toolRackPos[] = { + { {12.5303,-10.4146,-2.62908}, 181 } + }; + palletPos[] = { + { {-13.75,-8.90918,-3}, 191 }, + { {-14.0654,14.2466,-3}, 84 } + }; + }; + class Land_Airport_02_controlTower_F : Default { + shelfPos[] = { + { {-0.619141,0.914063,-10.799}, 359 } + }; + filingPos[] = { + { {0.871582,2.76172,2.18546}, 183 }, + { {-0.985352,2.78906,2.18546}, 181 } + }; + pelicanPos[] = { + { {1.77051,5.9082,3.09551}, 53 } + }; + shoeboxPos[] = { + { {-2.04199,5.11133,3.09551}, 53 } + }; + palletPos[] = { + { {-0.614746,-1.76758,-10.7145}, 90 } + }; + cabinetPos[] = { + { {0.940918,1.02539,0.285469}, 90 } + }; + }; + class Land_Airport_02_terminal_F : Default { + chairPos[] = { + { {10.875,-2.83594,-1.4043}, 90 } + }; + tablePos[] = { + { {10.9907,-0.375,-1.4043}, 90 } + }; + lockerPos[] = { + { {4.18457,2.45215,-1.40867}, 270 }, + { {4.19165,4.24609,-1.40868}, 270 } + }; + shoeboxPos[] = { + { {7.94824,2.00195,-0.939405}, 60 } + }; + palletPos[] = { + { {4.65234,-0.265625,-1.40867}, 90 } + }; + cabinetPos[] = { + { {10.6372,5.38281,-0.141179}, 90 } + }; + }; + class Land_Airport_02_hangar_right_F : Default { + shelfPos[] = { + { {5.99121,9.65039,-7.25818}, 90 }, + { {6.23975,-14.0654,-7.72174}, 90 }, + { {9.82324,-12.6621,-7.71869}, 179 } + }; + lockerPos[] = { + { {6.06519,-17.5381,-7.72373}, 90 } + }; + toolRackPos[] = { + { {12.8186,-7.41309,-7.25818}, 90 } + }; + shoeboxPos[] = { + { {6.60205,-19.917,-1.86625}, 230 } + }; + cabinetPos[] = { + { {6.375,-21.5215,-6.16557}, 179 } + }; + }; + class Land_Airport_02_hangar_left_F : Default { + shelfPos[] = { + { {-12.5098,-8.36523,-7.24053}, 272 }, + { {6.09326,20.5518,-7.25266}, 0 }, + { {-5.78027,-23.7773,-1.23606}, 272 } + }; + shoeboxPos[] = { + { {-4.53125,20.251,-1.24107}, 144 } + }; + }; + class Land_DPP_01_mainFactory_F : Default { + shelfPos[] = { + { {12.4868,5.71582,-4.25747}, 360 } + }; + toolRackPos[] = { + { {11.915,-0.972656,-10.5492}, 272 } + }; + shoeboxPos[] = { + { {12.3447,6.52246,-5.56747}, 50 } + }; + palletPos[] = { + { {-5.20117,11.5381,-9.74186}, 84 }, + { {-9.70508,11.4258,-9.73776}, 84 }, + { {20.9487,-3.17871,-7.43347}, 50 } + }; + }; + class Land_CombineHarvester_01_wreck_F : Default { + shoeboxPos[] = { + { {1.24243,-1.62891,0.0273294}, 272 } + }; + palletPos[] = { + { {2.77905,1.94629,-1.88333}, 272 } + }; + }; + class Land_SCF_01_generalBuilding_F : Default { + shelfPos[] = { + { {1.65527,-13.3105,-4.84338}, 360 }, + { {-5.47607,-13.2764,-0.342323}, 360 }, + { {-1.80737,-22.2637,-4.84338}, 170 } + }; + toolRackPos[] = { + { {-4.11987,-13.1016,-4.84338}, 1.99998 } + }; + shoeboxPos[] = { + { {-2.5481,-22.7988,9.69048}, 122 } + }; + palletPos[] = { + { {2.17529,-16.9023,-0.342323}, 1.99998 }, + { {-2.24731,-18.9658,-0.342323}, 1.99998 }, + { {-0.242432,-21.7676,-4.84338}, 340 } + }; + }; + class Land_SCF_01_washer_F : Default { + shelfPos[] = { + { {5.99902,1.37305,2.18735}, 180 }, + { {-3.38672,6.87158,-1.80765}, 180 } + }; + shoeboxPos[] = { + { {-1.32813,2.7832,2.18735}, 159 } + }; + palletPos[] = { + { {-0.738281,4.4375,3.22431}, 180 }, + { {3.9248,7.34766,-1.76456}, 360 } + }; + }; + class Land_SCF_01_shredder_F : Default { + shoeboxPos[] = { + { {1.08203,-6.02979,-1.39866}, 229 } + }; + palletPos[] = { + { {-0.345703,-5.55029,-1.39866}, 159 } + }; + }; + class Land_SCF_01_clarifier_F : Default { + shelfPos[] = { + { {4.23633,-5.50244,-2.00547}, 270 } + }; + shoeboxPos[] = { + { {-1.63477,1.06299,8.53659}, 215 } + }; + palletPos[] = { + { {3.67383,-3.10547,-10}, 240 }, + { {-5.26855,-2.09424,-10}, 240 } + }; + }; + class Land_SCF_01_feeder_F : Default { + shoeboxPos[] = { + { {-0.84668,8.46875,-3.38788}, 240 } + }; + palletPos[] = { + { {-2.33984,15.1572,-2.61678}, 240 } + }; + }; + class Land_SCF_01_chimney_F : Default { + pelicanPos[] = { + { {-2.99512,-3.04297,24.3271}, 200 } + }; + shoeboxPos[] = { + { {0.0537109,1.75391,24.3271}, 200 } + }; + }; + class Land_SCF_01_boilerBuilding_F : Default { + shelfPos[] = { + { {22.2256,1.09546,-8.65179}, 90 }, + { {22.4199,2.60059,-17.6125}, 270 }, + { {-1.29102,23.6138,-13.1725}, 90 } + }; + toolRackPos[] = { + { {14.8506,-0.107178,-17.8281}, 180 } + }; + shoeboxPos[] = { + { {10.8652,14.1597,-17.8272}, 350 } + }; + palletPos[] = { + { {16.4326,1.20996,-13.1888}, 358 }, + { {15.5107,13.283,-13.177}, 358 }, + { {11.7666,-17.9785,-17.695}, 190 }, + { {-23.1025,15.8513,-17.6078}, 190 } + }; + cabinetPos[] = { + { {10.6318,3.73242,-11.8678}, 358 } + }; + }; + class Land_SCF_01_crystallizer_F : Default { + shelfPos[] = { + { {5.98633,5.46533,-0.536706}, 360 }, + { {-8.78906,-0.0581055,-0.536711}, 180 } + }; + shoeboxPos[] = { + { {8.37891,5.93506,-2.93731}, 230 } + }; + palletPos[] = { + { {1.06738,0.640137,-0.536709}, 360 }, + { {-3.97168,0.850098,4.92104}, 350 } + }; + }; + class Land_SCF_01_crystallizerTowers_F : Default { + shelfPos[] = { + { {1.4541,-0.650879,-7.24714}, 360 } + }; + shoeboxPos[] = { + { {-4.73145,1.5752,12.2733}, 140 } + }; + palletPos[] = { + { {-0.708008,-0.354492,-7.24714}, 270 } + }; + }; + class Land_Radar_Small_F : Default { + shelfPos[] = { + { {0.581055,3.92749,-10}, 200 } + }; + palletPos[] = { + { {-4.85449,-0.675781,-10}, 169 } + }; + }; + class Land_MiningShovel_01_abandoned_F : Default { + shelfPos[] = { + { {3.3916,-2.8252,-0.647353}, 70 } + }; + shoeboxPos[] = { + { {-0.786133,-7.95947,3.74709}, 139 } + }; + palletPos[] = { + { {-2.4502,-4.36426,-0.484981}, 179 }, + { {-0.444336,-9.64648,-0.484981}, 149 } + }; + }; + class Land_SM_01_reservoirTower_F : Default { + shelfPos[] = { + { {-0.0371094,1.45996,-1.95632}, 180 } + }; + shoeboxPos[] = { + { {-3.44531,-2.54688,-1.98985}, 211 } + }; + palletPos[] = { + { {0.893555,-3.41504,-1.98556}, 251 } + }; + }; + class Land_HaulTruck_01_abandoned_F : Default { + shoeboxPos[] = { + { {-0.0493164,-3.35742,1.27724}, 151 } + }; + palletPos[] = { + { {-1.08545,-5.21582,1.27749}, 181 } + }; + }; + class Land_Warehouse_01_F : Default { + shelfPos[] = { + { {5.69727,-20.2239,-10}, 360 } + }; + palletPos[] = { + { {2.49023,-21.2285,-10}, 161 }, + { {-1.92578,21.6052,-10}, 161 } + }; + }; + class Land_Warehouse_02_F : Default { + shelfPos[] = { + { {8.18945,-11.0618,-3.96959}, 360 } + }; + palletPos[] = { + { {-1.94727,-11.8555,-3.96959}, 360 }, + { {11.3662,-11.8032,-3.96959}, 360 } + }; + }; + class Land_SM_01_shelter_narrow_F : Default { + palletPos[] = { + { {-2.53125,11.0098,-10}, 360 }, + { {4.07813,-10.8501,-10}, 360 } + }; + }; + class Land_SM_01_shelter_wide_F : Default { + palletPos[] = { + { {-7.67676,5.47681,-10}, 360 }, + { {7.57324,-6.09155,-10}, 360 } + }; + }; + class Land_SM_01_shed_unfinished_F : Default { + shelfPos[] = { + { {-3.42773,8.58179,-1.648}, 350 } + }; + filingPos[] = { + { {-4.98242,-1.33374,-1.648}, 100 } + }; + shoeboxPos[] = { + { {-4.00879,1.89185,-1.648}, 80 } + }; + palletPos[] = { + { {1.77051,2.32544,-1.648}, 360 } + }; + }; + class Land_SY_01_reclaimer_F : Default { + shelfPos[] = { + { {-14.377,5.68848,-2.27833}, 360 } + }; + shoeboxPos[] = { + { {-11.6846,1.34912,-2.27688}, 220 } + }; + palletPos[] = { + { {-15.2012,-1.79639,-10}, 220 } + }; + }; + class Land_SM_01_shed_F : Default { + shelfPos[] = { + { {-5.92969,-1.72266,-1.60012}, 180 }, + { {9.05469,-1.71729,-1.60012}, 180 }, + { {8.64551,8.68945,-1.60012}, 0 } + }; + toolRackPos[] = { + { {-1.58496,8.8877,-1.60012}, 0 } + }; + shoeboxPos[] = { + { {-6.93652,2.11621,-1.60012}, 140 } + }; + palletPos[] = { + { {-3.1377,-0.233398,-1.60012}, 170 } + }; + freezerPos[] = { + { {-5.04785,1.56201,-1.60012}, 90 } + }; + cabinetPos[] = { + { {-8.79102,-1.59473,-0.300119}, 0 } + }; + }; + + + + + + + + + + + + + + // Tanoa Stop + diff --git a/Sources/epoch_config/Configs/CfgClientFunctions.hpp b/Sources/epoch_config/Configs/CfgClientFunctions.hpp index b724bdb4..da80895d 100644 --- a/Sources/epoch_config/Configs/CfgClientFunctions.hpp +++ b/Sources/epoch_config/Configs/CfgClientFunctions.hpp @@ -32,6 +32,10 @@ class CfgClientFunctions class unitSpawn {}; class antiWall {}; class onEachFrame {}; + class callSapperMigration {}; + class zombieSpawn {}; + class makeMarker {}; + class removeMarker {}; }; class building @@ -112,6 +116,14 @@ class CfgClientFunctions class fnc_findSapperStalkLocation {}; class fnc_dirToFuzzy {}; class fnc_cursorTarget {}; + class fnc_triggerAntagonist {}; + class fnc_playerDeathDetonate {}; + class fnc_playerDeathMorph {}; + class fnc_playerSetVariable {}; + class fnc_playerAttachToAntagonist {}; + class fnc_dynamicFSM {}; + class fnc_vectorDivide {}; + class giveAttributes {}; }; class environment { @@ -143,6 +155,12 @@ class CfgClientFunctions class initUI {}; class refeshUI {}; }; + class messaging { + file = "epoch_code\gui\scripts\messaging"; + class message {}; + class message_old1 {}; + class message_old2 {}; + }; class looting { class spawnLoot {}; }; @@ -158,8 +176,9 @@ class CfgClientFunctions class getIDC {}; class guiObjHP {}; class secureStorageHandler {}; - class dynamicText {}; class genderSelection {}; + class getColorScheme {}; + class dragControl {}; }; class config { @@ -173,7 +192,15 @@ class CfgClientFunctions class dynamicMenuPopulate {}; class dynamicMenuCleanup {}; }; - + + class dynamicHUD { + file = "epoch_code\gui\scripts\dynamicHUD"; + class dynamicHUD_adjust {}; + class dynamicHUD_loadSave {}; + class dynamicHUD_start {}; + class getHUDCtrl {}; + }; + class gui_craft { file = "epoch_code\gui\scripts\craftingv2"; class crafting_animate {}; diff --git a/Sources/epoch_config/Configs/CfgDynamicHUD.hpp b/Sources/epoch_config/Configs/CfgDynamicHUD.hpp new file mode 100644 index 00000000..fc998a0f --- /dev/null +++ b/Sources/epoch_config/Configs/CfgDynamicHUD.hpp @@ -0,0 +1,60 @@ +/* +defaultPos: + 0 - top left + 1 - top center + 2 - top right + 3 - mid left + 4 - mid center + 5 - mid right + 6 - bottom left + 7 - bottom center + 8 - bottom right + +defaultPopulate: + 0 - right + 1 - left + 2 - down + 3 - up + 4 - horizontal grow + 5 - vertical grow + +offSetX: Positive = right, Negative = left +offSetY: Positive = down, Negative = up + Offsets group of controls, unit measurement is width or height of group. The bigger the group the more it will be offset. + Offsets are optional, don't have to be included + +classname: + https://community.bistudio.com/wiki/ctrlCreate/classnames + +Obtaining Controls: + use epoch_getHUDCtrl function to obtain controls for manipulation + _name = Config name of your group + _index = each group hosts multiple elements, each element has it's index, starting from 0 + [_ConfigName, _index] call epoch_getHUDCtrl; + ["myHUDname", 3] call epoch_getHUDCtrl; +*/ + +class rmx_dynamicHUD +{ + class topRight //ConfigName matters to be able to use function! + { + classname = "RscPicture"; + defaultPos = 2; + defaultPopulate = 1; + arraySize = 8; + width = 4; + height = 4; + offSetX = 0; + offSetY = 0; + }; + class botcenter + { + classname = "RscPicture"; + defaultPos = 7; + defaultPopulate = 4; + arraySize = 9; + width = 5; + height = 5; + }; + +}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgEpochClient.hpp b/Sources/epoch_config/Configs/CfgEpochClient.hpp index 0cf9c1aa..5e1b8433 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient.hpp @@ -1,6 +1,6 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: Andrew Gregory Description: Main Client side configs for the Epoch gamemode @@ -9,11 +9,11 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient.hpp */ class CfgEpochClient { - epochVersion = "0.3.8.0"; + epochVersion = "0.3.9.0"; sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = // 2% chance (+ 4% chance if in city) (1% - 2% Half if using silencer) to spawn drone if shot fired buildingNearbyMilitary = 0; //1 to allow building nearby @@ -23,6 +23,9 @@ class CfgEpochClient buildingJammerRange = 75; // jammer range in meters disableRemoteSensors = true; // disableRemoteSensors true EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."}; + deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"};//Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F + niteLight[] = {1.88,22};//Set ambient lighting at night: {Brightness of light,Height of light}. Default (Low Ambient): {1.88,22} | Twilight: {7.2,88} | Distant: {12.8,142} + ryanZombiesEnabled = false; // disabled by default antagonistSpawnIndex[] = { {"Epoch_Cloak_F", 1}, // {"type", limit} {"GreatWhite_F", 2}, @@ -30,7 +33,8 @@ class CfgEpochClient {"Epoch_SapperB_F",1}, {"I_UAV_01_F",2}, {"PHANTOM",1}, - {"B_Heli_Transport_01_F",1} + {"B_Heli_Transport_01_F",1}, + {"EPOCH_RyanZombie_1",12} }; customVarsDefaults[] = { // EPOCH_player + varName, default value, {max,min} @@ -50,23 +54,25 @@ class CfgEpochClient {"SpawnArray",{},{}}, {"Karma",0,{50000,-50000}}, {"Alcohol",0,{100,0}}, - {"Radiation",0,{100,0}} + {"Radiation",0,{100,0}}, + {"Nuisance",0,{100,0}}, + {"MissionArray",{},{}} }; // controls max group limit and cost group_upgrade_lvl[] = {4,"100",6,"300",8,"500",10,"1000",12,"1500",13,"1750",14,"2000",15,"3000",16,"5000"}; // Event handler code displayAddEventHandler[] = {"keyDown","keyUp"}; - keyDown = "(_this call EPOCH_KeyDown)"; - keyUp = "(_this call EPOCH_KeyUp)"; + keyDown = "(_this call EPOCH_KeyDown)"; + keyUp = "(_this call EPOCH_KeyUp)"; addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","Fired","Killed","HandleRating","GetInMan","GetOutMan"}; Respawn = "(_this select 0) call EPOCH_clientRespawn"; Put = "(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler"; - Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck"; - Fired = "_this call EPOCH_fnc_playerFired;"; - InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};"; + Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck"; + Fired = "_this call EPOCH_fnc_playerFired;"; + InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};"; InventoryOpened = "_this spawn EPOCH_initUI;_container = _this select 1;_lockedNear = false;if (_container isKindOf 'GroundWeaponHolder' || _container isKindOf 'WeaponHolderSimulated') then {{if (locked _x in [2, 3] ||_x getVariable['EPOCH_Locked', false]) exitWith {_lockedNear = true}} forEach (player nearSupplies 10);};if (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false] || _lockedNear) then {[] spawn {disableSerialization;waitUntil {!isNull findDisplay 602};_display = findDisplay 602;_ctrl_cargo = _display displayCtrl 6401;_ctrl_ground = _display displayCtrl 6321;_ctrl_cargo ctrlEnable false;ctrlSetFocus _ctrl_ground;ctrlActivate _ctrl_ground;};};"; - Killed = "_this call EPOCH_fnc_playerDeath;"; + Killed = "_this call EPOCH_fnc_playerDeath;"; HandleRating = "EPOCH_playerKarma = EPOCH_playerKarma + (_this select 1);0"; HandleDamage = ""; HandleHeal = ""; @@ -77,9 +83,9 @@ class CfgEpochClient GetOutMan = "_this call EPOCH_antiWall;"; // suppress these units from spawning near Jammer or Traders - nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F"}; - nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F","GreatWhite_F"}; - nonTraderAIRange = 150; + nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"}; + nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"}; + nonTraderAIRange = 50; // Fishing loots fishLoots[] = {"ItemTuna","ItemSeaBass","ItemSeaBass","ItemSeaBass","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout"}; @@ -100,6 +106,7 @@ class CfgEpochClient #include "CfgEpochClient\utes.hpp" #include "CfgEpochClient\vr.hpp" #include "CfgEpochClient\Zargabad.hpp" + #include "CfgEpochClient\Tanoa.hpp" #include "CfgEpochClient\WorldInteractions.hpp" }; class CfgEpochSapper @@ -108,6 +115,10 @@ class CfgEpochSapper groanTrig = 16; //Percentage chance of a groan. Min value = 4 sRange = 300; //Distance from target over which sapper will dispose. Range within which sapper code will be aware of targets. Distance up to which sapper will attempt to find a spot to hide in. Min Value = 150. smellDist = 24; //Distance up to which sapper can smell. Used to decide if sapper can see target when deciding to charge and influences target selection. Is influenced by wind direction. Min Value = 8. + reflexSpeed = 0.25; //Sapper brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive sapper. (Guide Min 0.25 - Max 2.5). + nestChance = 2; //Every time a sapper spawns apply this percentage chance that sapper will create a nest. + hideLevel = 72; //(Emotion) Sapper fear increases by several factors, higher number of armed player(s) in area / being shot at. Set fear level (out of 100) at which he will go into a 'hide / evade mode'.. temporarily. + chargeLevel = 52; //(Emotion) Sapper anger increases by smelling / sensing players, being shot at / hit, too many players on his turf. Set level (Out of 100) at which he is triggered to charge on the current target. }; class CfgEpochUAV { @@ -115,6 +126,22 @@ class CfgEpochUAV UAVMaxDist = 180; //Maximum distance to choose next position when roaming. Min Value = 42 / Max Value = 400. UAVHeight = 100; //Set height when roaming, slight randomness is applied to this value. UAV will choose own height when locked onto target. Min Value = 42 / Max Value = 280. UAV can still spot targets from height ! }; +class CfgEpochUAVSupport +{ + unitTypes[] = {"I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"};//Selects from randomly + maxUnitNum = 2; //Maximum number of units spawned when UAV spots target. + minAISkill = 0.2; //Minumum AI Skill. Skills are chosen randomly between this minimum overall AI skill value and the following max AI skill values, for each of the next skills: + maxAimingAccuracy = 0.7; + maxAimingShake = 0.9; + maxAimingSpeed = 0.6; + maxEndurance = 0.4; + maxSpotDistance = 0.4; + maxSpotTime = 0.3; + maxCourage = 0.3; + maxReloadSpeed = 0.5; + maxCommanding = 0.4; + maxGeneral = 0.4; +}; class CfgEpochAirDrop { AirDropFreq = 1200; //AirDropChance, to decide if Air drop occurs, will only be checked once per AirDropFreq time period, for each player. Min value = 120. @@ -130,3 +157,18 @@ class CfgEpochCloak teleportChance = 66; //Chance for cloak to teleport. (Min: 1) hoverFrequency = 1280; //Cloak has new hover attack. When player is above cloak, and at a distance, cloak will float to player and teleport attack. Only perform one of these moves per this period. (Min: 240) }; +class CfgEpochRyanZombie +{ + zeds[] = {"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5"}; + attackDist = 1.6; //Attack Distance. + range = 45; //Range at which to dispose old zombies and spawn new ones within. + // maxNumber = 12; //Maximum number of zombies within range, + disposeRange = 800; // distance before zombie is disposed + smell[] = {38,0.42}; //Distance in metres up to which the zombie can smell a target. | Skill (0 - 1). 0 - Disable + sight[] = {28,0.72}; //Zombie sight distance | Skill (0 - 1). + hearing[] = {108,0.68}; //Zombie hearing distance / Skill. Max FiredNear EH Limit ? + memory[] = {480,0.8}; //Memory time. / Weighting. WIP - Not Used + reflexSpeed = 0.25; //Zombie brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive zombie. (Guide Min 0.25 - Max 2.5). + moans[] = {"ryanzombiesmoan1","ryanzombiesmoan2","ryanzombiesmoan3","ryanzombiesmoan4"}; + screams[] = {"ryanzombiesscream1", "ryanzombiesscream2", "ryanzombiesscream3", "ryanzombiesscream4", "ryanzombiesscream5", "ryanzombiesscream6", "ryanzombiesscream7", "ryanzombiesscream8", "ryanzombiesscream9"}; +}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp index 99e1a1e6..93eb7cbf 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp */ class Altis { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp index 421e74b0..ca33f978 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Bornholm.hpp */ class Bornholm { blockedArea[] = { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp index dd19c67c..35299555 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Chernarus.hpp */ class Chernarus { blockedArea[] = { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp index db3bb215..9bd7baaf 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Chernarus_Summer.hpp */ class Chernarus_Summer { blockedArea[] = { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp index fa42ff6a..2f5ee380 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Esseker.hpp */ class Esseker { blockedArea[] = { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp b/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp index 94e5f685..486822ea 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/ProvingGrounds_PMC.hpp */ class ProvingGrounds_PMC { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp index c8ea7daa..a03eeecc 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp */ class Sara { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/SaraLite.hpp b/Sources/epoch_config/Configs/CfgEpochClient/SaraLite.hpp index 6b264e8a..a1bd15dd 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/SaraLite.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/SaraLite.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp */ class SaraLite { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp index 7f77eda5..16bdc350 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Sara_dbe1.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Sara.hpp */ class Sara_dbe1 { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp index a632f162..e7691d42 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Stratis.hpp */ class Stratis { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Tanoa.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Tanoa.hpp new file mode 100644 index 00000000..b2bee08c --- /dev/null +++ b/Sources/epoch_config/Configs/CfgEpochClient/Tanoa.hpp @@ -0,0 +1,19 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode config for Zargabad + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Tanoa.hpp +*/ +class Tanoa { + blockedArea[] = {}; + // main config + TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" }; +}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp b/Sources/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp index f231b9d9..f7f565f2 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/WorldInteractions.hpp @@ -2,6 +2,38 @@ class CfgWorldInteractions { class Water { water = 1; }; + class BankTerminal { + bankTerminal = 1; + }; + class Rocks { + rock = 1; + }; + class HempFiber { + HempFiber = 1; + }; + class PumpkinPatch { + PumpkinPatch = 1; + }; + class Bushes { + bush = 1; + }; + class Trash { + Trash = 1; + }; + class TrashSmall { + TrashSmall = 1; + }; + class Trees { + tree = 1; + }; + class Cinder { + cinder = 1; + }; + class Wrecks { + wreck = 1; + }; + + class barrelwater_f_p3d : Water {}; class water_source_f_p3d : Water {}; class waterbarrel_f_p3d : Water {}; @@ -18,85 +50,81 @@ class CfgWorldInteractions { class misc_concbox_ep1_p3d : Water {}; class Land_water_tank : Water {}; class Land_Pumpa : Water {}; - - class BankTerminal { - bankTerminal = 1; - }; - class atm_01_f_p3d : BankTerminal {}; - class phonebooth_01_f_p3d : BankTerminal {}; - class atm_02_f_p3d : BankTerminal {}; - class phonebooth_02_f_p3d : BankTerminal {}; - class nastenka_p3d : BankTerminal {}; - class nastenka2_p3d : BankTerminal {}; - class nastenka3_p3d : BankTerminal {}; - class phone_box_south_p3d : BankTerminal {}; - class mailboxsouth_p3d : BankTerminal {}; - class Land_PhoneBooth_02_F : BankTerminal {}; - class Land_PhoneBooth_01_F : BankTerminal {}; - class Land_Atm_01_F : BankTerminal {}; - class Land_Atm_02_F : BankTerminal {}; - class Land_Laptop_device_F : BankTerminal {}; - - class Rocks { - rock = 1; - }; + class watertank_01_f_p3d : Water {}; + class watertank_02_f_p3d : Water {}; + class watertank_04_f_p3d : Water {}; + class watertank_03_f_p3d : Water {}; + class atm_01_f_p3d : bankTerminal {}; + class phonebooth_01_f_p3d : bankTerminal {}; + class atm_02_f_p3d : bankTerminal {}; + class phonebooth_02_f_p3d : bankTerminal {}; + class nastenka_p3d : bankTerminal {}; + class nastenka2_p3d : bankTerminal {}; + class nastenka3_p3d : bankTerminal {}; + class phone_box_south_p3d : bankTerminal {}; + class mailboxsouth_p3d : bankTerminal {}; + class Land_PhoneBooth_02_F : bankTerminal {}; + class Land_PhoneBooth_01_F : bankTerminal {}; + class Land_Atm_01_F : bankTerminal {}; + class Land_Atm_02_F : bankTerminal {}; + class Land_Laptop_device_F : bankTerminal {}; class sharpstone_03_lc_p3d : Rocks {}; - class sharpstone_02_lc_p3d : Rocks {}; - class sharpstone_01_lc_p3d : Rocks {}; - class sharpstone_02_p3d : Rocks {}; - class sharpstone_03_p3d : Rocks {}; - class sharprock_monolith_p3d : Rocks {}; - class sharprock_apart_p3d : Rocks {}; - class sharpstones_erosion_p3d : Rocks {}; - class bluntstone_01_lc_p3d : Rocks {}; - class bluntstone_02_lc_p3d : Rocks {}; - class bluntstone_03_lc_p3d : Rocks {}; - class bluntstones_erosion_p3d : Rocks {}; - class bluntstone_01_p3d : Rocks {}; - class bluntstone_03_p3d : Rocks {}; - class sharprock_spike_p3d : Rocks {}; - class sharprock_wallh_p3d : Rocks {}; - class w_sharpstone_03_p3d : Rocks {}; - class w_sharpstone_02_p3d : Rocks {}; - class w_sharpstone_01_p3d : Rocks {}; - class bluntrock_apart_p3d : Rocks {}; - class bluntstone_02_p3d : Rocks {}; - class bluntrock_monolith_p3d : Rocks {}; - class bluntrock_wallh_p3d : Rocks {}; - class sharprock_wallv_p3d : Rocks {}; - class stonesharp_medium_p3d : Rocks {}; - class stone_medium_f_p3d : Rocks {}; - class stonesharp_big_p3d : Rocks {}; - class stonesharp_small_p3d : Rocks {}; - class small_stone_02_f_p3d : Rocks {}; - class stone_small_f_p3d : Rocks {}; - class stone_big_f_p3d : Rocks {}; - class bluntrock_spike_p3d : Rocks {}; + class sharpstone_02_lc_p3d : Rocks {}; + class sharpstone_01_lc_p3d : Rocks {}; + class sharpstone_02_p3d : Rocks {}; + class sharpstone_03_p3d : Rocks {}; + class sharprock_monolith_p3d : Rocks {}; + class sharprock_apart_p3d : Rocks {}; + class sharpstones_erosion_p3d : Rocks {}; + class bluntstone_01_lc_p3d : Rocks {}; + class bluntstone_02_lc_p3d : Rocks {}; + class bluntstone_03_lc_p3d : Rocks {}; + class bluntstones_erosion_p3d : Rocks {}; + class bluntstone_01_p3d : Rocks {}; + class bluntstone_03_p3d : Rocks {}; + class sharprock_spike_p3d : Rocks {}; + class sharprock_wallh_p3d : Rocks {}; + class w_sharpstone_03_p3d : Rocks {}; + class w_sharpstone_02_p3d : Rocks {}; + class w_sharpstone_01_p3d : Rocks {}; + class bluntrock_apart_p3d : Rocks {}; + class bluntstone_02_p3d : Rocks {}; + class bluntrock_monolith_p3d : Rocks {}; + class bluntrock_wallh_p3d : Rocks {}; + class sharprock_wallv_p3d : Rocks {}; + class stonesharp_medium_p3d : Rocks {}; + class stone_medium_f_p3d : Rocks {}; + class stonesharp_big_p3d : Rocks {}; + class stonesharp_small_p3d : Rocks {}; + class small_stone_02_f_p3d : Rocks {}; + class stone_small_f_p3d : Rocks {}; + class stone_big_f_p3d : Rocks {}; + class bluntrock_spike_p3d : Rocks {}; class r2_boulder1_p3d : Rocks {}; class r2_boulder2_p3d : Rocks {}; class r2_rock1_p3d : Rocks {}; class r2_rocktower_p3d : Rocks {}; class r2_rockwall_p3d : Rocks {}; class r_rock_02_ep1_p3d : Rocks {}; - class brownrock2_p3d : Rocks {}; - class brownrock3_p3d : Rocks {}; - class desertrock_p3d : Rocks {}; - class desertrock2_p3d : Rocks {}; - class desertrock3_p3d : Rocks {}; - class r_stone_01_ep1_p3d : Rocks {}; - class brownrock_p3d : Rocks {}; - class rockn_02_p3d : Rocks {}; - class sharpstone_01_p3d : Rocks {}; - class r_rock_03_ep1_p3d : Rocks {}; - class rocks_02_p3d : Rocks {}; - class skala3_5_p3d : Rocks {}; - class skala3_4_p3d : Rocks {}; - class skala1_4_p3d : Rocks {}; + class brownrock2_p3d : Rocks {}; + class brownrock3_p3d : Rocks {}; + class desertrock_p3d : Rocks {}; + class desertrock2_p3d : Rocks {}; + class desertrock3_p3d : Rocks {}; + class r_stone_01_ep1_p3d : Rocks {}; + class brownrock_p3d : Rocks {}; + class rockn_02_p3d : Rocks {}; + class sharpstone_01_p3d : Rocks {}; + class r_rock_03_ep1_p3d : Rocks {}; + class rocks_02_p3d : Rocks {}; + class skala3_5_p3d : Rocks {}; + class skala3_4_p3d : Rocks {}; + class skala1_4_p3d : Rocks {}; class bo_r2_boulder1_p3d : Rocks {}; - class bo_r2_boulder2_p3d : Rocks {}; - class bo_r2_rock1_p3d : Rocks {}; - class bo_r2_rocktower_p3d : Rocks {}; - class bo_r2_rockwall_p3d : Rocks {}; + class bo_r2_boulder2_p3d : Rocks {}; + class bo_r2_rock1_p3d : Rocks {}; + class bo_r2_rocktower_p3d : Rocks {}; + class bo_r2_rockwall_p3d : Rocks {}; class w_sharpstones_erosion_p3d : Rocks {}; class decal_rock_dark_p3d : Rocks {}; class r_stone_01_pmc_p3d : Rocks {}; @@ -116,21 +144,30 @@ class CfgWorldInteractions { class r_tk_boulder_01_ep1_p3d : Rocks {}; class r_tk_boulder_02_ep1_p3d : Rocks {}; class r_tk_rock_01_ep1_p3d : Rocks {}; - - class HempFiber { - HempFiber = 1; - }; + class cliff_stone_big_lc_f_p3d : Rocks {}; + class cliff_wall_long_f_p3d : Rocks {}; + class cliff_stone_medium_lc_f_p3d : Rocks {}; + class cliff_stone_small_lc_f_p3d : Rocks {}; + class cliff_boulder_f_p3d : Rocks {}; + class cliff_peak_f_p3d : Rocks {}; + class cliff_wall_round_f_p3d : Rocks {}; + class cliff_stonecluster_f_p3d : Rocks {}; + class cliff_wall_tall_f_p3d : Rocks {}; + class lavaboulder_03_f_p3d : Rocks {}; + class lavastone_small_lc_f_p3d : Rocks {}; + class lavaboulder_02_f_p3d : Rocks {}; + class lavaboulder_01_f_p3d : Rocks {}; + class lavastone_big_lc_f_p3d : Rocks {}; + class lavastonecluster_large_f_p3d : Rocks {}; + class lavaboulder_04_f_p3d : Rocks {}; + class lavastonecluster_small_f_p3d : Rocks {}; + class cliff_stone_medium_f_p3d : Rocks {}; + class lavastone_big_f_p3d : Rocks {}; + class lavastone_small_f_p3d : Rocks {}; + class cliff_surfacemine_f_p3d : Rocks {}; class p_fiberplant_ep1_p3d : HempFiber {}; - - class PumpkinPatch { - PumpkinPatch = 1; - }; class p_pumpkin_summer_p3d : PumpkinPatch {}; class pumpkin_p3d : PumpkinPatch {}; - - class Trash { - Trash = 1; - }; class sack_f_p3d : Trash {}; class garbagebags_f_p3d : Trash {}; class pallets_f_p3d : Trash {}; @@ -164,18 +201,18 @@ class CfgWorldInteractions { class humanskeleton_f_p3d : Trash {}; class shelvesmetal_f_p3d : Trash {}; class popelnice_p3d : Trash {}; - class garbage_misc_p3d : Trash {}; - class paletyc_p3d : Trash {}; - class junkpile_p3d : Trash {}; - class kontejner_p3d : Trash {}; - class misc_chickencoop_p3d : Trash {}; - class misc_boogieman_p3d : Trash {}; - class misc_hutch_p3d : Trash {}; - class garbage_paleta_p3d : Trash {}; - class misc_cargo1a_p3d : Trash {}; - class misc_cargo2a_p3d : Trash {}; - class misc_greenhouse_p3d : Trash {}; - class zastavka_stojan_p3d : Trash {}; + class garbage_misc_p3d : Trash {}; + class paletyc_p3d : Trash {}; + class junkpile_p3d : Trash {}; + class kontejner_p3d : Trash {}; + class misc_chickencoop_p3d : Trash {}; + class misc_boogieman_p3d : Trash {}; + class misc_hutch_p3d : Trash {}; + class garbage_paleta_p3d : Trash {}; + class misc_cargo1a_p3d : Trash {}; + class misc_cargo2a_p3d : Trash {}; + class misc_greenhouse_p3d : Trash {}; + class zastavka_stojan_p3d : Trash {}; class podesta_s10_p3d : Trash {}; class kontejner_sklo_p3d : Trash {}; class paletyd_p3d : Trash {}; @@ -216,172 +253,176 @@ class CfgWorldInteractions { class stand_meat_ep1_p3d : Trash {}; class bags_ep1_p3d : Trash {}; class misc_garb_heap_ep1_p3d : Trash {}; - - class TrashSmall { - TrashSmall = 1; - }; + class woodencrate_01_stack_x3_f_p3d : Trash {}; + class garbageheap_03_f_p3d : Trash {}; + class garbageheap_04_f_p3d : Trash {}; + class garbageheap_02_f_p3d : Trash {}; + class garbageheap_01_f_p3d : Trash {}; + class woodencrate_01_stack_x5_f_p3d : Trash {}; + class woodencrate_01_f_p3d : Trash {}; + class clothesline_01_short_f_p3d : Trash {}; + class boat_01_abandoned_red_f_p3d : Trash {}; + class grave_01_f_p3d : Trash {}; + class grave_03_f_p3d : Trash {}; class misc_postbox_p3d : TrashSmall {}; - - class Trees { - tree = 1; - }; - class t_ficusb1s_f_p3d: Trees {}; - class t_oleae1s_f_p3d: Trees {}; - class t_ficusb2s_f_p3d: Trees {}; - class t_broussonetiap1s_f_p3d: Trees {}; - class t_pinuss2s_f_p3d: Trees {}; - class t_pinuss2s_b_f_p3d: Trees {}; - class t_pinuss1s_f_p3d: Trees {}; - class t_oleae2s_f_p3d: Trees {}; - class t_fraxinusav2s_f_p3d: Trees {}; - class t_pinusp3s_f_p3d: Trees {}; - class t_poplar2f_dead_f_p3d: Trees {}; - class t_populusn3s_f_p3d: Trees {}; - class t_phoenixc1s_f_p3d: Trees {}; + class garbagebin_02_f_p3d : TrashSmall {}; + class t_ficusb1s_f_p3d : Trees {}; + class t_oleae1s_f_p3d : Trees {}; + class t_ficusb2s_f_p3d : Trees {}; + class t_broussonetiap1s_f_p3d : Trees {}; + class t_pinuss2s_f_p3d : Trees {}; + class t_pinuss2s_b_f_p3d : Trees {}; + class t_pinuss1s_f_p3d : Trees {}; + class t_oleae2s_f_p3d : Trees {}; + class t_fraxinusav2s_f_p3d : Trees {}; + class t_pinusp3s_f_p3d : Trees {}; + class t_poplar2f_dead_f_p3d : Trees {}; + class t_populusn3s_f_p3d : Trees {}; + class t_phoenixc1s_f_p3d : Trees {}; class t_populus3s_p3d : Trees {}; - class t_fagus2w_p3d : Trees {}; - class t_betula2s_p3d : Trees {}; - class t_fagus2s_p3d : Trees {}; - class t_fagus2f_p3d : Trees {}; - class t_sorbus2s_p3d : Trees {}; - class t_fraxinus2w_p3d : Trees {}; - class t_salix2s_p3d : Trees {}; - class t_malus1s_p3d : Trees {}; - class t_betula1f_p3d : Trees {}; - class t_pinusn2s_p3d : Trees {}; - class t_picea2s_p3d : Trees {}; - class t_larix3s_p3d : Trees {}; - class t_picea3f_p3d : Trees {}; - class t_picea1s_p3d : Trees {}; - class misc_fallentree2_p3d : Trees {}; - class misc_stub2_p3d : Trees {}; - class t_fraxinus2s_p3d : Trees {}; - class t_quercus2f_p3d : Trees {}; - class misc_trunk_water_p3d : Trees {}; - class misc_trunk_torzo_p3d : Trees {}; - class t_alnus2s_p3d : Trees {}; - class misc_fallentree1_p3d : Trees {}; - class t_betula2f_p3d : Trees {}; - class t_pinusn1s_p3d : Trees {}; - class t_pinuss2f_p3d : Trees {}; - class t_quercus3s_p3d : Trees {}; - class t_carpinus2s_p3d : Trees {}; - class misc_fallenspruce_p3d : Trees {}; - class t_stub_picea_p3d : Trees {}; - class misc_stub1_p3d : Trees {}; - class t_acer2s_p3d : Trees {}; - class t_betula2w_p3d : Trees {}; - class t_pyrus2s_p3d : Trees {}; + class t_fagus2w_p3d : Trees {}; + class t_betula2s_p3d : Trees {}; + class t_fagus2s_p3d : Trees {}; + class t_fagus2f_p3d : Trees {}; + class t_sorbus2s_p3d : Trees {}; + class t_fraxinus2w_p3d : Trees {}; + class t_salix2s_p3d : Trees {}; + class t_malus1s_p3d : Trees {}; + class t_betula1f_p3d : Trees {}; + class t_pinusn2s_p3d : Trees {}; + class t_picea2s_p3d : Trees {}; + class t_larix3s_p3d : Trees {}; + class t_picea3f_p3d : Trees {}; + class t_picea1s_p3d : Trees {}; + class misc_fallentree2_p3d : Trees {}; + class misc_stub2_p3d : Trees {}; + class t_fraxinus2s_p3d : Trees {}; + class t_quercus2f_p3d : Trees {}; + class misc_trunk_water_p3d : Trees {}; + class misc_trunk_torzo_p3d : Trees {}; + class t_alnus2s_p3d : Trees {}; + class misc_fallentree1_p3d : Trees {}; + class t_betula2f_p3d : Trees {}; + class t_pinusn1s_p3d : Trees {}; + class t_pinuss2f_p3d : Trees {}; + class t_quercus3s_p3d : Trees {}; + class t_carpinus2s_p3d : Trees {}; + class misc_fallenspruce_p3d : Trees {}; + class t_stub_picea_p3d : Trees {}; + class misc_stub1_p3d : Trees {}; + class t_acer2s_p3d : Trees {}; + class t_betula2w_p3d : Trees {}; + class t_pyrus2s_p3d : Trees {}; class t_pinuss3s_ep1_p3d : Trees {}; - class t_pinuse2s_ep1_p3d : Trees {}; - class t_populusf2s_ep1_p3d : Trees {}; - class str_topol_p3d : Trees {}; - class les_singlestrom_b_p3d : Trees {}; - class banana_3_p3d : Trees {}; - class jablon_p3d : Trees {}; - class str_pinie_p3d : Trees {}; - class t_ficusb2s_ep1_p3d : Trees {}; - class palm_01_p3d : Trees {}; - class vysilac_budova_p3d : Trees {}; - class palm_10_p3d : Trees {}; - class palm_03_p3d : Trees {}; - class palm_04_p3d : Trees {}; - class t_pistacial2s_ep1_p3d : Trees {}; - class panelak_p3d : Trees {}; + class t_pinuse2s_ep1_p3d : Trees {}; + class t_populusf2s_ep1_p3d : Trees {}; + class str_topol_p3d : Trees {}; + class les_singlestrom_b_p3d : Trees {}; + class banana_3_p3d : Trees {}; + class jablon_p3d : Trees {}; + class str_pinie_p3d : Trees {}; + class t_ficusb2s_ep1_p3d : Trees {}; + class palm_01_p3d : Trees {}; + class vysilac_budova_p3d : Trees {}; + class palm_10_p3d : Trees {}; + class palm_03_p3d : Trees {}; + class palm_04_p3d : Trees {}; + class t_pistacial2s_ep1_p3d : Trees {}; + class panelak_p3d : Trees {}; class str_kastan_p3d : Trees {}; - class a_hospital_p3d : Trees {}; - class i_barracks_v1_f_p3d : Trees {}; - class dum_istan3_hromada_p3d : Trees {}; - class dum_istan3_hromada2_p3d : Trees {}; - class dum_istan4_big_inverse_p3d : Trees {}; - class panelak2_p3d : Trees {}; - class podesta_1_mid_p3d : Trees {}; - class podesta_1_cornl_p3d : Trees {}; - class t_prunuss2s_ep1_p3d : Trees {}; - class dum_istan2_02_p3d : Trees {}; - class dum_istan4_inverse_p3d : Trees {}; - class podesta_1_stairs2_p3d : Trees {}; - class podesta_1_mid_cornl_p3d : Trees {}; - class hrusen2_p3d : Trees {}; - class zed_kamenna_p3d : Trees {}; - class str_dub_p3d : Trees {}; - class str_dub_jiny_p3d : Trees {}; - class smrk_siroky_p3d : Trees {}; - class smrk_maly_p3d : Trees {}; - class les_singlestrom_p3d : Trees {}; - class palm_02_p3d : Trees {}; - class brg_banana_3_p3d : Trees {}; - class banana_2_p3d : Trees {}; - class oliva_p3d : Trees {}; - class brg_umbrella_acacia02b_p3d : Trees {}; - class brg_umbrella_acacia01b_p3d : Trees {}; - class brg_umbrella_acacia04b_p3d : Trees {}; - class brg_umbrella_acacia03b_p3d : Trees {}; - class str_buk_p3d : Trees {}; - class les_dub_p3d : Trees {}; - class b_pinusm1s_ep1_p3d : Trees {}; - class krovi_long_p3d : Trees {}; - class str_lipa_p3d : Trees {}; - class str_javor_p3d : Trees {}; - class str_trnka_p3d : Trees {}; - class t_poplar2f_dead_pmc_p3d : Trees {}; - class t_quercusir2s_f_p3d : Trees {}; - class dd_bush01_p3d : Trees {}; - class t_fagus2f_summer_p3d : Trees {}; - class akat02s_p3d : Trees {}; - class t_amygdalusc2s_ep1_p3d : Trees {}; - class str_osika_p3d : Trees {}; - class palm_09_p3d : Trees {}; - class dd_borovice_p3d : Trees {}; - class dd_borovice02_p3d : Trees {}; - class str_topol2_p3d : Trees {}; - class brg_umbrella_acacia_shrub02_p3d : Trees {}; - class t_populusb2s_ep1_p3d : Trees {}; - class les_dub_jiny_p3d : Trees {}; - class les_buk_p3d : Trees {}; - class str_fikovnik_p3d : Trees {}; - class str_briza_rovna_p3d : Trees {}; - class str_jerabina_p3d : Trees {}; - class str_habr_p3d : Trees {}; - class les_fikovnik2_p3d : Trees {}; + class a_hospital_p3d : Trees {}; + class i_barracks_v1_f_p3d : Trees {}; + class dum_istan3_hromada_p3d : Trees {}; + class dum_istan3_hromada2_p3d : Trees {}; + class dum_istan4_big_inverse_p3d : Trees {}; + class panelak2_p3d : Trees {}; + class podesta_1_mid_p3d : Trees {}; + class podesta_1_cornl_p3d : Trees {}; + class t_prunuss2s_ep1_p3d : Trees {}; + class dum_istan2_02_p3d : Trees {}; + class dum_istan4_inverse_p3d : Trees {}; + class podesta_1_stairs2_p3d : Trees {}; + class podesta_1_mid_cornl_p3d : Trees {}; + class hrusen2_p3d : Trees {}; + class zed_kamenna_p3d : Trees {}; + class str_dub_p3d : Trees {}; + class str_dub_jiny_p3d : Trees {}; + class smrk_siroky_p3d : Trees {}; + class smrk_maly_p3d : Trees {}; + class les_singlestrom_p3d : Trees {}; + class palm_02_p3d : Trees {}; + class brg_banana_3_p3d : Trees {}; + class banana_2_p3d : Trees {}; + class oliva_p3d : Trees {}; + class brg_umbrella_acacia02b_p3d : Trees {}; + class brg_umbrella_acacia01b_p3d : Trees {}; + class brg_umbrella_acacia04b_p3d : Trees {}; + class brg_umbrella_acacia03b_p3d : Trees {}; + class str_buk_p3d : Trees {}; + class les_dub_p3d : Trees {}; + class b_pinusm1s_ep1_p3d : Trees {}; + class krovi_long_p3d : Trees {}; + class str_lipa_p3d : Trees {}; + class str_javor_p3d : Trees {}; + class str_trnka_p3d : Trees {}; + class t_poplar2f_dead_pmc_p3d : Trees {}; + class t_quercusir2s_f_p3d : Trees {}; + class dd_bush01_p3d : Trees {}; + class t_fagus2f_summer_p3d : Trees {}; + class akat02s_p3d : Trees {}; + class t_amygdalusc2s_ep1_p3d : Trees {}; + class str_osika_p3d : Trees {}; + class palm_09_p3d : Trees {}; + class dd_borovice_p3d : Trees {}; + class dd_borovice02_p3d : Trees {}; + class str_topol2_p3d : Trees {}; + class brg_umbrella_acacia_shrub02_p3d : Trees {}; + class t_populusb2s_ep1_p3d : Trees {}; + class les_dub_jiny_p3d : Trees {}; + class les_buk_p3d : Trees {}; + class str_fikovnik_p3d : Trees {}; + class str_briza_rovna_p3d : Trees {}; + class str_jerabina_p3d : Trees {}; + class str_habr_p3d : Trees {}; + class les_fikovnik2_p3d : Trees {}; class bo_t_populus3s_p3d : Trees {}; - class bo_t_fagus2w_p3d : Trees {}; - class bo_t_betula2s_p3d : Trees {}; - class bo_t_fagus2s_p3d : Trees {}; - class bo_t_fagus2f_p3d : Trees {}; - class bo_t_sorbus2s_p3d : Trees {}; - class bo_t_fraxinus2w_p3d : Trees {}; - class bo_t_salix2s_p3d : Trees {}; - class bo_t_malus1s_p3d : Trees {}; - class bo_t_betula1f_p3d : Trees {}; - class bo_t_pinusn2s_p3d : Trees {}; - class bo_t_picea2s_p3d : Trees {}; - class bo_t_larix3s_p3d : Trees {}; - class bo_t_picea3f_p3d : Trees {}; - class bo_t_picea1s_p3d : Trees {}; - class bo_misc_fallentree2_p3d : Trees {}; - class bo_misc_stub2_p3d : Trees {}; - class bo_t_fraxinus2s_p3d : Trees {}; - class bo_t_quercus2f_p3d : Trees {}; - class bo_misc_trunk_water_p3d : Trees {}; - class bo_misc_trunk_torzo_p3d : Trees {}; - class bo_t_alnus2s_p3d : Trees {}; - class bo_misc_fallentree1_p3d : Trees {}; - class bo_t_betula2f_p3d : Trees {}; - class bo_t_pinusn1s_p3d : Trees {}; - class bo_t_pinuss2f_p3d : Trees {}; - class bo_t_quercus3s_p3d : Trees {}; - class bo_t_carpinus2s_p3d : Trees {}; - class bo_t_stub_picea_p3d : Trees {}; - class bo_t_acer2s_p3d : Trees {}; - class bo_t_betula2w_p3d : Trees {}; - class bo_t_pyrus2s_p3d : Trees {}; - class bo_b_corylus_p3d : Trees {}; + class bo_t_fagus2w_p3d : Trees {}; + class bo_t_betula2s_p3d : Trees {}; + class bo_t_fagus2s_p3d : Trees {}; + class bo_t_fagus2f_p3d : Trees {}; + class bo_t_sorbus2s_p3d : Trees {}; + class bo_t_fraxinus2w_p3d : Trees {}; + class bo_t_salix2s_p3d : Trees {}; + class bo_t_malus1s_p3d : Trees {}; + class bo_t_betula1f_p3d : Trees {}; + class bo_t_pinusn2s_p3d : Trees {}; + class bo_t_picea2s_p3d : Trees {}; + class bo_t_larix3s_p3d : Trees {}; + class bo_t_picea3f_p3d : Trees {}; + class bo_t_picea1s_p3d : Trees {}; + class bo_misc_fallentree2_p3d : Trees {}; + class bo_misc_stub2_p3d : Trees {}; + class bo_t_fraxinus2s_p3d : Trees {}; + class bo_t_quercus2f_p3d : Trees {}; + class bo_misc_trunk_water_p3d : Trees {}; + class bo_misc_trunk_torzo_p3d : Trees {}; + class bo_t_alnus2s_p3d : Trees {}; + class bo_misc_fallentree1_p3d : Trees {}; + class bo_t_betula2f_p3d : Trees {}; + class bo_t_pinusn1s_p3d : Trees {}; + class bo_t_pinuss2f_p3d : Trees {}; + class bo_t_quercus3s_p3d : Trees {}; + class bo_t_carpinus2s_p3d : Trees {}; + class bo_t_stub_picea_p3d : Trees {}; + class bo_t_acer2s_p3d : Trees {}; + class bo_t_betula2w_p3d : Trees {}; + class bo_t_pyrus2s_p3d : Trees {}; + class bo_b_corylus_p3d : Trees {}; class t_fagus2s_summer_p3d : Trees {}; class t_betula2s_summer_p3d : Trees {}; - class cwr2_a2_t_sorbus2s_p3d : Trees {}; - class cwr2_a2_t_fagus2w_p3d : Trees {}; - class cwr2_a2_t_alnus2s_p3d : Trees {}; + class cwr2_a2_t_sorbus2s_p3d : Trees {}; + class cwr2_a2_t_fagus2w_p3d : Trees {}; + class cwr2_a2_t_alnus2s_p3d : Trees {}; class mb_t_ulmus_large_p3d : Trees {}; class cwr_aleppopine_p3d : Trees {}; class cwr2_a2_t_quercus3s_p3d : Trees {}; @@ -394,52 +435,68 @@ class CfgWorldInteractions { class str_briza_kriva_p3d : Trees {}; class smrk_velky_p3d : Trees {}; class str_briza_p3d : Trees {}; - class misc_trunk_torzo_ep1_p3d : Trees {}; - class t_juniperusc2s_ep1_p3d : Trees {}; - class misc_trunk_water_ep1_p3d : Trees {}; - - class Bushes { - bush = 1; - }; - class b_ficusc2d_f_p3d: Bushes {}; - class b_ficusc1s_f_p3d: Bushes {}; - class b_neriumo2d_f_p3d: Bushes {}; - class b_arundod2s_f_p3d: Bushes {}; - class b_arundod3s_f_p3d: Bushes {}; - class b_ficusc2s_f_p3d: Bushes {}; + class misc_trunk_torzo_ep1_p3d : Trees {}; + class t_juniperusc2s_ep1_p3d : Trees {}; + class misc_trunk_water_ep1_p3d : Trees {}; + class t_cocosnucifera3s_tall_f_p3d : Trees {}; + class t_leucaena_f_p3d : Trees {}; + class t_ficus_medium_f_p3d : Trees {}; + class t_cyathea_f_p3d : Trees {}; + class t_ficus_small_f_p3d : Trees {}; + class t_cocosnucifera2s_small_f_p3d : Trees {}; + class t_millettia_f_p3d : Trees {}; + class t_inocarpus_f_p3d : Trees {}; + class t_cocosnucifera3s_bend_f_p3d : Trees {}; + class t_agathis_wide_f_p3d : Trees {}; + class d_treestump_cut_small_f_p3d : Trees {}; + class d_treestump_natural_small_f_p3d : Trees {}; + class d_treestump_natural_large_f_p3d : Trees {}; + class t_albizia_f_p3d : Trees {}; + class t_agathis_tall_f_p3d : Trees {}; + class t_palaquium_f_p3d : Trees {}; + class t_ficus_big_f_p3d : Trees {}; + class t_rhizophora_f_p3d : Trees {}; + class t_cacao_ripe_f_p3d : Trees {}; + class d_treestump_cut_large_f_p3d : Trees {}; + class b_ficusc2d_f_p3d : Bushes {}; + class b_ficusc1s_f_p3d : Bushes {}; + class b_neriumo2d_f_p3d : Bushes {}; + class b_arundod2s_f_p3d : Bushes {}; + class b_arundod3s_f_p3d : Bushes {}; + class b_ficusc2s_f_p3d : Bushes {}; class b_craet1_p3d : Bushes {}; - class b_craet2_p3d : Bushes {}; - class b_corylus_p3d : Bushes {}; - class b_corylus2s_p3d : Bushes {}; - class b_betulahumilis_p3d : Bushes {}; - class b_sambucus_p3d : Bushes {}; - class b_salix2s_p3d : Bushes {}; - class b_canina2s_p3d : Bushes {}; - class b_pmugo_p3d : Bushes {}; - class b_prunus_p3d : Bushes {}; - class krovi_bigest_p3d : Bushes {}; - class krovi4_p3d : Bushes {}; - class krovi_p3d : Bushes {}; - class ker_s_bobulema_p3d : Bushes {}; - class ker_pichlavej_p3d : Bushes {}; - class pinus_mugo_lowpoly_p3d : Bushes {}; - class b_amygdalusn1s_ep1_p3d : Bushes {}; - class banana_4_p3d : Bushes {}; - class banana_1_p3d : Bushes {}; - class palm_08small_p3d : Bushes {}; - class ker_deravej_p3d : Bushes {}; - class brg_umbrella_acacia_shrub2_p3d : Bushes {}; - class krovi2_p3d : Bushes {}; - class brg_banana_4_p3d : Bushes {}; + class b_craet2_p3d : Bushes {}; + class b_corylus_p3d : Bushes {}; + class b_corylus2s_p3d : Bushes {}; + class b_betulahumilis_p3d : Bushes {}; + class b_sambucus_p3d : Bushes {}; + class b_salix2s_p3d : Bushes {}; + class b_canina2s_p3d : Bushes {}; + class b_pmugo_p3d : Bushes {}; + class b_prunus_p3d : Bushes {}; + class krovi_bigest_p3d : Bushes {}; + class krovi4_p3d : Bushes {}; + class krovi_p3d : Bushes {}; + class ker_s_bobulema_p3d : Bushes {}; + class ker_pichlavej_p3d : Bushes {}; + class pinus_mugo_lowpoly_p3d : Bushes {}; + class b_amygdalusn1s_ep1_p3d : Bushes {}; + class banana_4_p3d : Bushes {}; + class banana_1_p3d : Bushes {}; + class palm_08small_p3d : Bushes {}; + class ker_deravej_p3d : Bushes {}; + class brg_umbrella_acacia_shrub2_p3d : Bushes {}; + class krovi2_p3d : Bushes {}; + class brg_banana_4_p3d : Bushes {}; class bo_b_craet1_p3d : Bushes {}; - class bo_b_craet2_p3d : Bushes {}; - class bo_b_corylus2s_p3d : Bushes {}; - class bo_b_betulahumilis_p3d : Bushes {}; - class bo_b_sambucus_p3d : Bushes {}; - class salix2s_p3d : Bushes {}; - class bo_b_canina2s_p3d : Bushes {}; - class bo_b_pmugo_p3d : Bushes {}; - class bo_b_prunus_p3d : Bushes {}; + class bo_b_craet2_p3d : Bushes {}; + class bo_b_corylus2s_p3d : Bushes {}; + class bo_b_betulahumilis_p3d : Bushes {}; + class bo_b_sambucus_p3d : Bushes {}; + class salix2s_p3d : Bushes {}; + class bo_b_canina2s_p3d : Bushes {}; + class bo_b_pmugo_p3d : Bushes {}; + class bo_b_prunus_p3d : Bushes {}; class b_corylus2s_summer_p3d : Bushes {}; class b_craet1_summer_p3d : Bushes {}; class b_betula2w_summer_p3d : Bushes {}; @@ -453,92 +510,100 @@ class CfgWorldInteractions { class cwr2_a2_b_sambucus_p3d : Bushes {}; class b_hip2s_pmc_p3d : Bushes {}; class b_elderberry2s_pmc_p3d : Bushes {}; - class ker_buxus_p3d : Bushes {}; - class str_liskac_p3d : Bushes {}; - class dd_bush02_p3d : Bushes {}; + class ker_buxus_p3d : Bushes {}; + class str_liskac_p3d : Bushes {}; + class dd_bush02_p3d : Bushes {}; class b_pistacial1s_ep1_p3d : Bushes {}; - - class Cinder { - cinder = 1; - }; + class b_colored_red_f_p3d : Bushes {}; + class b_colored_yellow_f_p3d : Bushes {}; + class b_cestrum_f_p3d : Bushes {}; + class b_calochlaena_f_p3d : Bushes {}; + class b_gardenia_f_p3d : Bushes {}; + class b_gardenia_dec_01_f_p3d : Bushes {}; + class b_gardenia_dec_02_f_p3d : Bushes {}; + class b_leucaena_f_p3d : Bushes {}; + class t_pritchardia_f_p3d : Bushes {}; + class b_pipermeth_f_p3d : Bushes {}; + class t_banana_f_p3d : Bushes {}; + class t_banana_slim_f_p3d : Bushes {}; + class t_banana_wild_f_p3d : Bushes {}; + class b_rhizophora_f_p3d : Bushes {}; + class b_neriumo2d_tanoa_f_p3d : Bushes {}; class cinderblocks_f_p3d : Cinder {}; - - class Wrecks { - wreck = 1; - }; - class wall_tin_4_2_p3d: Wrecks {}; - class mil_wiredfence_f_p3d: Wrecks {}; - class cages_f_p3d: Wrecks {}; - class wreck_car_f_p3d: Wrecks {}; - class pipes_small_f_p3d: Wrecks {}; - class pipe_fence_4m_f_p3d: Wrecks {}; - class spp_tower_f_p3d: Wrecks {}; - class wreck_ural_f_p3d: Wrecks {}; - class wreck_car3_f_p3d: Wrecks {}; - class ironpipes_f_p3d: Wrecks {}; - class pipes_large_f_p3d: Wrecks {}; - class coil_f_p3d: Wrecks {}; - class wreck_offroad_f_p3d: Wrecks {}; - class wreck_offroad2_f_p3d: Wrecks {}; - class crabcages_f_p3d: Wrecks {}; - class metalbarrel_empty_f_p3d: Wrecks {}; - class net_fenced_8m_f_p3d: Wrecks {}; - class net_fence_8m_f_p3d: Wrecks {}; - class wavepowerplantbroken_f_p3d: Wrecks {}; - class wreck_truck_dropside_f_p3d: Wrecks {}; - class wavepowerplant_f_p3d: Wrecks {}; - class wreck_traw_f_p3d: Wrecks {}; - class wreck_slammer_f_p3d: Wrecks {}; - class maroula_f_p3d: Wrecks {}; - class indfnc_9_f_p3d: Wrecks {}; - class indfnc_3_f_p3d: Wrecks {}; - class indfnc_3_d_f_p3d: Wrecks {}; - class wreck_car2_f_p3d: Wrecks {}; - class net_fence_4m_f_p3d: Wrecks {}; - class wreck_truck_f_p3d: Wrecks {}; - class wreck_hunter_f_p3d: Wrecks {}; - class wreck_slammer_hull_f_p3d: Wrecks {}; + class cinderblocks_01_f_p3d : Cinder {}; + class wall_tin_4_2_p3d : Wrecks {}; + class mil_wiredfence_f_p3d : Wrecks {}; + class cages_f_p3d : Wrecks {}; + class wreck_car_f_p3d : Wrecks {}; + class pipes_small_f_p3d : Wrecks {}; + class pipe_fence_4m_f_p3d : Wrecks {}; + class spp_tower_f_p3d : Wrecks {}; + class wreck_ural_f_p3d : Wrecks {}; + class wreck_car3_f_p3d : Wrecks {}; + class ironpipes_f_p3d : Wrecks {}; + class pipes_large_f_p3d : Wrecks {}; + class coil_f_p3d : Wrecks {}; + class wreck_offroad_f_p3d : Wrecks {}; + class wreck_offroad2_f_p3d : Wrecks {}; + class crabcages_f_p3d : Wrecks {}; + class metalbarrel_empty_f_p3d : Wrecks {}; + class net_fenced_8m_f_p3d : Wrecks {}; + class net_fence_8m_f_p3d : Wrecks {}; + class wavepowerplantbroken_f_p3d : Wrecks {}; + class wreck_truck_dropside_f_p3d : Wrecks {}; + class wavepowerplant_f_p3d : Wrecks {}; + class wreck_traw_f_p3d : Wrecks {}; + class wreck_slammer_f_p3d : Wrecks {}; + class maroula_f_p3d : Wrecks {}; + class indfnc_9_f_p3d : Wrecks {}; + class indfnc_3_f_p3d : Wrecks {}; + class indfnc_3_d_f_p3d : Wrecks {}; + class wreck_car2_f_p3d : Wrecks {}; + class net_fence_4m_f_p3d : Wrecks {}; + class wreck_truck_f_p3d : Wrecks {}; + class wreck_hunter_f_p3d : Wrecks {}; + class wreck_slammer_hull_f_p3d : Wrecks {}; class wall_fen1_5_pole_p3d : Wrecks {}; - class wall_fen1_5_2_p3d : Wrecks {}; - class wall_fen1_5_p3d : Wrecks {}; - class wall_indfnc_3_p3d : Wrecks {}; - class wall_indfnc_9_p3d : Wrecks {}; - class wall_indfnc_corner_p3d : Wrecks {}; - class misc_concrete_high_p3d : Wrecks {}; - class plot_vlnplech2_p3d : Wrecks {}; - class misc_g_pipes_p3d : Wrecks {}; - class wall_tincom_9_p3d : Wrecks {}; - class wall_tin_4_p3d : Wrecks {}; - class plot_vlnplech1_p3d : Wrecks {}; - class wall_tincom_9_2_p3d : Wrecks {}; - class wall_tincom_3_p3d : Wrecks {}; - class wall_tincom_pole_p3d : Wrecks {}; - class datsun01t_p3d : Wrecks {}; - class datsun02t_p3d : Wrecks {}; - class skodovka_wrecked_p3d : Wrecks {}; - class lada_wrecked_p3d : Wrecks {}; - class hiluxt_p3d : Wrecks {}; - class uaz_wrecked_p3d : Wrecks {}; - class ural_wrecked_p3d : Wrecks {}; - class rubble_metal_plates_04_p3d : Wrecks {}; - class rubble_metal_plates_02_p3d : Wrecks {}; - class rubble_metal_plates_01_p3d : Wrecks {}; - class wreck_brdm2_f_p3d : Wrecks {}; - class wreck_bmp2_f_p3d : Wrecks {}; - class wreck_heli_attack_01_f_p3d : Wrecks {}; - class bmp_break_p3d : Wrecks {}; - class wreck_t72_hull_f_p3d : Wrecks {}; - class wreck_t72_turret_f_p3d : Wrecks {}; - class wreck_hmmwv_f_p3d : Wrecks {}; - class kamaz_bort_p3d : Wrecks {}; - class wreck_van_f_p3d : Wrecks {}; - class kamaz_awtobas_p3d : Wrecks {}; - class maz_p3d : Wrecks {}; - class wreck_skodovka_f_p3d : Wrecks {}; - class wreck_cardismantled_f_p3d : Wrecks {}; - class kamaz_pozarka_p3d : Wrecks {}; - class zaporosez_p3d : Wrecks {}; - class kamaz_tent_p3d : Wrecks {}; + class wall_fen1_5_2_p3d : Wrecks {}; + class wall_fen1_5_p3d : Wrecks {}; + class wall_indfnc_3_p3d : Wrecks {}; + class wall_indfnc_9_p3d : Wrecks {}; + class wall_indfnc_corner_p3d : Wrecks {}; + class misc_concrete_high_p3d : Wrecks {}; + class plot_vlnplech2_p3d : Wrecks {}; + class misc_g_pipes_p3d : Wrecks {}; + class wall_tincom_9_p3d : Wrecks {}; + class wall_tin_4_p3d : Wrecks {}; + class plot_vlnplech1_p3d : Wrecks {}; + class wall_tincom_9_2_p3d : Wrecks {}; + class wall_tincom_3_p3d : Wrecks {}; + class wall_tincom_pole_p3d : Wrecks {}; + class datsun01t_p3d : Wrecks {}; + class datsun02t_p3d : Wrecks {}; + class skodovka_wrecked_p3d : Wrecks {}; + class lada_wrecked_p3d : Wrecks {}; + class hiluxt_p3d : Wrecks {}; + class uaz_wrecked_p3d : Wrecks {}; + class ural_wrecked_p3d : Wrecks {}; + class rubble_metal_plates_04_p3d : Wrecks {}; + class rubble_metal_plates_02_p3d : Wrecks {}; + class rubble_metal_plates_01_p3d : Wrecks {}; + class wreck_brdm2_f_p3d : Wrecks {}; + class wreck_bmp2_f_p3d : Wrecks {}; + class wreck_heli_attack_01_f_p3d : Wrecks {}; + class bmp_break_p3d : Wrecks {}; + class wreck_t72_hull_f_p3d : Wrecks {}; + class wreck_t72_turret_f_p3d : Wrecks {}; + class wreck_hmmwv_f_p3d : Wrecks {}; + class kamaz_bort_p3d : Wrecks {}; + class wreck_van_f_p3d : Wrecks {}; + class kamaz_awtobas_p3d : Wrecks {}; + class maz_p3d : Wrecks {}; + class wreck_skodovka_f_p3d : Wrecks {}; + class wreck_cardismantled_f_p3d : Wrecks {}; + class kamaz_pozarka_p3d : Wrecks {}; + class zaporosez_p3d : Wrecks {}; + class kamaz_tent_p3d : Wrecks {}; class budova5_p3d : Wrecks {}; class pletivo_dira_p3d : Wrecks {}; class pletivo_p3d : Wrecks {}; @@ -546,5 +611,33 @@ class CfgWorldInteractions { class wall_indfnc_3_d_p3d : Wrecks {}; class t72_wrecked_p3d : Wrecks {}; class t72_wrecked_turret_p3d : Wrecks {}; + class parkingmeter_01_f_p3d : Wrecks {}; + class pipefence_01_m_d_f_p3d : Wrecks {}; + class pipefence_01_m_8m_f_p3d : Wrecks {}; + class pipefence_01_m_gate_v2_f_p3d : Wrecks {}; + class fuelstation_02_prices_f_p3d : Wrecks {}; + class tinwall_01_m_4m_v2_f_p3d : Wrecks {}; + class pipefence_01_m_pole_f_p3d : Wrecks {}; + class wiredfence_01_16m_f_p3d : Wrecks {}; + class wiredfence_01_8m_d_f_p3d : Wrecks {}; + class wiredfence_01_8m_f_p3d : Wrecks {}; + class netfence_01_m_8m_f_p3d : Wrecks {}; + class netfence_01_m_d_f_p3d : Wrecks {}; + class netfence_01_m_4m_f_p3d : Wrecks {}; + class tinwall_02_l_4m_f_p3d : Wrecks {}; + class tinwall_02_l_8m_f_p3d : Wrecks {}; + class bulldozer_01_wreck_f_p3d : Wrecks {}; + class excavator_01_wreck_f_p3d : Wrecks {}; + class railwaycar_01_tank_f_p3d : Wrecks {}; + class railwaycar_01_passenger_f_p3d : Wrecks {}; + class locomotive_01_v3_f_p3d : Wrecks {}; + class bulldozer_01_abandoned_f_p3d : Wrecks {}; + class locomotive_01_v1_f_p3d : Wrecks {}; + class locomotive_01_v2_f_p3d : Wrecks {}; + class excavator_01_abandoned_f_p3d : Wrecks {}; + + + + }; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp b/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp index 2874ffde..0dc8f3b9 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Zargabad.hpp */ class Zargabad { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp b/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp index 15b807fb..cd9c867e 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/australia.hpp */ class australia { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/takistan.hpp b/Sources/epoch_config/Configs/CfgEpochClient/takistan.hpp index 87fcd46d..3f6bcac1 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/takistan.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/takistan.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/Takistan.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Takistan.hpp */ class Takistan { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp b/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp index ea4df6df..62ad5949 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/utes.hpp */ class utes { Water[] = { diff --git a/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp b/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp index c98430eb..f7a84734 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/vr.hpp */ class vr { blockedArea[] = {}; diff --git a/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp b/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp index bb8a6720..bcb0e55f 100644 --- a/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp +++ b/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochConfiguration.hpp */ class CfgEpochConfiguration @@ -23,6 +23,13 @@ class CfgEpochConfiguration icon = "\x\addons\a3_epoch_code\Data\owner.paa"; controlGroup = "EpochConfigKeyMap"; }; + class HUD + { + name = "Customize HUD (WIP)"; + color[] = {1,1,1,1}; + icon = "\x\addons\a3_epoch_code\Data\owner.paa"; + controlGroup = "Epoch_main_config_dynamicHUD"; + }; class html { name = "Changelog"; diff --git a/Sources/epoch_config/Configs/CfgItemInteractions.hpp b/Sources/epoch_config/Configs/CfgItemInteractions.hpp new file mode 100644 index 00000000..dd7e1944 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgItemInteractions.hpp @@ -0,0 +1,876 @@ +/* +Author: Aaron Clark - EpochMod.com +Contributors: Andrew Gregory + +Description: +Item interaction configs + +Licence: +Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + +Github: +https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgItemInteractions.hpp + +Legend: +interactAction: 0 = examine, 1 = eat, 2 = drink, 3 = build +interactAttributes[] = { + {"Temp",0}, + {"Hunger",0}, + {"Thirst",0}, + {"Energy",0}, + {"Soiled",0}, + {"Immunity",0}, + {"Toxicity",0}, + {"Stamina",0}, + {"Wet",0}, + {"BloodP",0}, + {"Karma",0}, + {"Alcohol",0}, + {"Radiation",0} +}; +*/ +class CfgItemInteractions { + // BASE CLASSES START + class Default + { + interactAction = 0; + }; + class Food_base : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",600} + }; + }; + class Food_TinCan_base : Food_base + { + interactReturnOnUse = "ItemEmptyTin"; + }; + class Food_Jar_base : Food_base + { + interactReturnOnUse = "emptyjar_epoch"; + }; + class Food_Cooler_base : Food_base + { + interactReturnOnUse = "ItemCoolerE"; + }; + class Drink_base : Default + { + interactAction = 2; + interactText = "DRINK"; + interactAttributes[] = { + {"Thirst",500} + }; + }; + class Drink_Jar_base : Drink_base + { + interactReturnOnUse = "emptyjar_epoch"; + }; + class Soda_base : Drink_base + { + interactReturnOnUse = "ItemSodaEmpty"; + }; + class Item_Build_base : Default + { + interactAction = 3; + interactText = "BUILD"; + }; + class Item_Packed_base : Default { + interactAction = 14; + interactText = "UNPACK"; + }; + // BASE CLASSES END + class honey_epoch : Food_Jar_base + { + interactText = "CONSUME"; + interactAttributes[] = { + {"Immunity",1}, + {"Stamina",30}, + {"BloodP",10} + }; + }; + class sardines_epoch : Food_TinCan_base + { + interactAttributes[] = { + {"Hunger",1000}, + {"Toxicity",7} + }; + }; + class meatballs_epoch : Food_TinCan_base + { + interactAttributes[] = { + {"Hunger",1200} + }; + }; + class scam_epoch : Food_TinCan_base + { + interactAttributes[] = { + {"Hunger",1000} + }; + }; + class sweetcorn_epoch : Food_TinCan_base + { + interactAttributes[] = { + {"Hunger",600} + }; + }; + class FoodBioMeat : Food_TinCan_base + { + interactAttributes[] = { + {"Hunger",1000}, + {"Toxicity",7} + }; + }; + class TacticalBacon : Food_TinCan_base + { + interactAttributes[] = { + {"Hunger",500} + }; + }; + class ItemTrout : Food_base + { + interactAttributes[] = { + {"Hunger",300}, + {"Toxicity",5} + }; + }; + class ItemSeaBass : Food_base + { + interactAttributes[] = { + {"Hunger",500}, + {"Toxicity",10} + }; + }; + class ItemTuna : Food_base + { + interactAttributes[] = { + {"Hunger",2500} + }; + }; + class ItemTroutCooked : Food_base + { + interactAttributes[] = { + {"Hunger",600} + }; + }; + class ItemSeaBassCooked : Food_base + { + interactAttributes[] = { + {"Hunger",1200} + }; + }; + class ItemTunaCooked : Food_base + { + interactAttributes[] = { + {"Hunger",5000} + }; + }; + class FoodMeeps : Food_base + { + interactAttributes[] = { + {"Hunger",500} + }; + }; + class FoodSnooter : Food_base + { + interactAttributes[] = { + {"Hunger",500}, + {"Stamina",50} + }; + }; + class ItemCooler0 : Food_Cooler_base + { + interactAttributes[] = { + {"Hunger",3000} + }; + }; + class ItemCooler1 : Food_Cooler_base + { + interactAttributes[] = { + {"Hunger",3500} + }; + }; + class ItemCooler2 : Food_Cooler_base + { + interactAttributes[] = { + {"Hunger",4000} + }; + }; + class ItemCooler3 : Food_Cooler_base + { + interactAttributes[] = { + {"Hunger",5000} + }; + }; + class ItemCooler4 : Food_Cooler_base + { + interactAttributes[] = { + {"Hunger",5000} + }; + }; + class WhiskeyNoodle : Drink_base + { + interactAttributes[] = { + {"Thirst",800}, + {"Toxicity",-1}, + {"Stamina",50}, + {"Alcohol",10} + }; + }; + class water_epoch : Drink_Jar_base + { + interactAttributes[] = { + {"Thirst",500}, + {"Toxicity",5,1}, + {"Stamina",50} + }; + }; + class clean_water_epoch : Drink_Jar_base + { + interactAttributes[] = { + {"Thirst",500}, + {"Stamina",50} + }; + }; + class ItemSodaRbull : Soda_base + { + interactAttributes[] = { + {"Thirst",1000}, + {"Stamina",100} + }; + }; + class ItemSodaOrangeSherbet : Soda_base + { + interactAttributes[] = { + {"Thirst",800}, + {"Stamina",75} + }; + }; + class ItemSodaPurple : Soda_base + { + interactAttributes[] = { + {"Thirst",800}, + {"Stamina",75} + }; + }; + class ItemSodaMocha : Soda_base + { + interactAttributes[] = { + {"Thirst",650}, + {"Stamina",150} + }; + }; + class ItemSodaBurst : Soda_base + { + interactAttributes[] = { + {"Thirst",800}, + {"Stamina",75} + }; + }; + class FoodWalkNSons : Soda_base + { + interactAttributes[] = { + {"Thirst",1200}, + {"Stamina",150} + }; + }; + class ItemSodaAlpineDude : Soda_base + { + interactAttributes[] = { + {"Thirst",800}, + {"Stamina",800} + }; + }; + class jerrycan_epoch : Default + { + interactAction = 4; + interactText = "FILL"; + interactReturnOnUse = "jerrycanE_epoch"; + interactAttributes[] = { 10 }; + }; + class jerrycanE_epoch : Default + { + interactAction = 5; + interactText = "SIPHON"; + interactReturnOnUse = "jerrycan_epoch"; + interactAttributes[] = { 10 }; + }; + class FAK : Default + { + interactAction = 13; + interactText = "USE"; + }; + class ItemLockbox : Item_Build_base + { + buildClass = "LockBox_SIM_EPOCH"; + }; + class ItemSafe : Item_Build_base + { + buildClass = "Safe_SIM_EPOCH"; + }; + class JackKit : Item_Build_base + { + buildClass = "Jack_SIM_EPOCH"; + }; + class EnergyPack : Default + { + interactAction = 9; + interactText = "USE"; + interactAttributes[] = { + {"Energy",100} + }; + }; + class EnergyPackLg : Default + { + interactAction = 9; + interactText = "USE"; + interactAttributes[] = { + {"Energy",1000} + }; + }; + class VehicleRepair : Default + { + interactAction = 10; + interactText = "USE"; + }; + class VehicleRepairLg : Default + { + interactAction = 11; + interactText = "USE"; + }; + class Venom_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Toxicity",20,1} + }; + }; + class SnakeCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",300}, + {"Soiled",1}, + {"Toxicity",10,1} + }; + }; + class SnakeMeat_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",1200} + }; + }; + class RabbitCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",300}, + {"Soiled",1}, + {"Toxicity",10,1} + }; + }; + class CookedRabbit_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",1200} + }; + }; + class ChickenCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",500}, + {"Soiled",1}, + {"Toxicity",25,1} + }; + }; + class CookedChicken_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",2000} + }; + }; + class GoatCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",500}, + {"Soiled",1}, + {"Toxicity",15,1} + }; + }; + class DogCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",500}, + {"Soiled",1}, + {"Toxicity",15,1}, + {"Karma",-10} + }; + }; + class CookedDog_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",3000}, + {"Karma",-10} + }; + }; + class CookedGoat_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",3000} + }; + }; + class SheepCarcass_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",500}, + {"Soiled",1}, + {"Toxicity",15,1} + }; + }; + class CookedSheep_EPOCH : Default + { + interactAction = 1; + interactText = "EAT"; + interactAttributes[] = { + {"Hunger",3000} + }; + }; + class KitSpikeTrap : Item_Build_base + { + buildClass = "Spike_TRAP_SIM_EPOCH"; + }; + class KitMetalTrap : Item_Build_base + { + buildClass = "Metal_TRAP_SIM_EPOCH"; + }; + class KitStudWall : Item_Build_base + { + buildClass = "WoodLargeWall_EPOCH"; + }; + class KitWoodFloor : Item_Build_base + { + buildClass = "WoodFloor_EPOCH"; + }; + class KitWoodStairs : Item_Build_base + { + buildClass = "WoodStairs_EPOCH"; + }; + class KitWoodTower : Item_Build_base + { + buildClass = "WoodTower_EPOCH"; + }; + class KitWoodRamp : Item_Build_base + { + buildClass = "WoodRamp_EPOCH"; + }; + class KitTankTrap : Item_Build_base + { + buildClass = "TankTrap_SIM_EPOCH"; + }; + class KitHesco3 : Item_Build_base + { + buildClass = "Hesco3_EPOCH"; + }; + class KitWoodLadder : Item_Build_base + { + buildClass = "WoodLadder_EPOCH"; + }; + class KitFirePlace : Item_Build_base + { + buildClass = "FirePlace_SIM_EPOCH"; + }; + class KitTiPi : Item_Build_base + { + buildClass = "Tipi_SIM_EPOCH"; + isStorage = 1; + }; + class KitShelf : Item_Build_base + { + buildClass = "StorageShelf_SIM_EPOCH"; + isStorage = 1; + }; + class KitWorkbench : Item_Build_base + { + buildClass = "Workbench_SIM_EPOCH"; + isStorage = 1; + }; + class KitFoundation : Item_Build_base + { + buildClass = "Foundation_EPOCH"; + }; + class KitWoodFoundation : Item_Build_base + { + buildClass = "WoodFoundation_EPOCH"; + }; + class KitSolarGen : Item_Build_base + { + buildClass = "SolarGen_SIM_EPOCH"; + }; + class KitPlotPole : Item_Build_base + { + buildClass = "PlotPole_SIM_EPOCH"; + }; + class KitCinderWall : Item_Build_base + { + buildClass = "CinderWallHalf_EPOCH"; + }; + class PaintCanBase : Default + { + interactAction = 12; + interactText = "USE"; + }; + class PaintCanClear : PaintCanBase + { + colorName = "None"; + textureIndex = 0; + }; + class PaintCanBlk : PaintCanBase + { + colorName = "Black"; + textureIndex = 1; + }; + class PaintCanBlu : PaintCanBase + { + colorName = "Blue"; + textureIndex = 2; + }; + class PaintCanBrn : PaintCanBase + { + colorName = "Brown"; + textureIndex = 3; + }; + class PaintCanGrn : PaintCanBase + { + colorName = "Green"; + textureIndex = 4; + }; + class PaintCanOra : PaintCanBase + { + colorName = "Orange"; + textureIndex = 5; + }; + class PaintCanPur : PaintCanBase + { + colorName = "Purple"; + textureIndex = 6; + }; + class PaintCanRed : PaintCanBase + { + colorName = "Red"; + textureIndex = 7; + }; + class PaintCanTeal : PaintCanBase + { + colorName = "Teal"; + textureIndex = 8; + }; + class PaintCanYel : PaintCanBase + { + colorName = "Yellow"; + textureIndex = 9; + }; + class Poppy : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = { + {"Immunity",10}, + {"Stamina",-100}, + {"BloodP",-10} + }; + }; + class Goldenseal : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = { + {"Toxicity",-50} + }; + }; + class Pumpkin : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = { + {"Hunger",500}, + {"Stamina",50} + }; + }; + class Towelette : Default + { + interactAction = 6; + interactText = "USE"; + interactAttributes[] = { + {"Soiled",-25} + }; + }; + class HeatPack : Default + { + interactAction = 7; + interactText = "USE"; + interactAttributes[] = { + {"Temp",1} + }; + }; + class ColdPack : Default + { + interactAction = 8; + interactText = "USE"; + interactAttributes[] = { + {"Temp",-1} + }; + }; + class ItemHotwire : Default { + interactAction = 2; + interactText = "USE"; + }; + class ItemKeyKit : Default { + interactAction = 2; + interactText = "USE"; + }; + class ItemBarrelF : Default { + interactAction = 4; + interactText = "FILL"; + interactAttributes[] = { 210 }; + interactReturnOnUse = "ItemBarrelE"; + }; + class ItemBarrelE : Default { + interactAction = 5; + interactText = "SIPHON"; + interactAttributes[] = { 210 }; + interactReturnOnUse = "ItemBarrelF"; + }; + class ItemKey : Default { + interactAction = 2; + interactText = "USE"; + }; + class ItemKeyBlue : ItemKey {}; + class ItemKeyGreen : ItemKey {}; + class ItemKeyRed : ItemKey {}; + class ItemKeyYellow : ItemKey {}; + class ItemDoc1 : Default { + interactAction = -1; + interactText = "READ"; + }; + class ItemDoc2 : ItemDoc1 {}; + class ItemDoc3 : ItemDoc1 {}; + class ItemDoc4 : ItemDoc1 {}; + class ItemDoc5 : ItemDoc1 {}; + class ItemDoc6 : ItemDoc1 {}; + class ItemDoc7 : ItemDoc1 {}; + class ItemDoc8 : ItemDoc1 {}; + class ItemVehDoc1 : ItemDoc1 {}; + class ItemVehDoc2 : ItemDoc1 {}; + class ItemVehDoc3 : ItemDoc1 {}; + class ItemVehDoc4 : ItemDoc1 {}; + class ItemBulb : Default {}; + class ItemBurlap : Default {}; + class ItemBriefcaseE : Default {}; + class ItemBriefcaseGold100oz : Default {}; + class ItemAluminumBar : Default {}; + class ItemCopperBar : Default {}; + class ItemTinBar : Default {}; + class ItemPlywoodPack : Default {}; + class ItemComboLock : Default {}; + class CircuitParts : Default {}; + class Pelt_EPOCH : Default {}; + class ItemPipe : Default {}; + class ItemEmptyTin : Default {}; + class ItemSodaEmpty : Default {}; + class emptyjar_epoch : Default {}; + class PartPlankPack : Default {}; + class CinderBlocks : Default {}; + class MortarBucket : Default {}; + class ItemKiloHemp : Default {}; + class ItemTopaz : Default {}; + class ItemOnyx : Default {}; + class ItemSapphire : Default {}; + class ItemAmethyst : Default {}; + class ItemEmerald : Default {}; + class ItemCitrine : Default {}; + class ItemRuby : Default {}; + class ItemQuartz : Default {}; + class ItemJade : Default {}; + class ItemGarnet : Default {}; + class ItemMixOil : Default {}; + class ItemDocument : Default {}; + class ItemDocumentMission : Default {}; + class ItemSilverBar : Default {}; + class ItemGoldBar : Default {}; + class ItemGoldBar10oz : Default {}; + class ItemRock : Default {}; + class ItemStick : Default {}; + class ItemRope : Default {}; + class PartOre : Default {}; + class PartOreSilver : Default {}; + class PartOreGold : Default {}; + class ItemPacked : Default {}; + class ItemSolar : Default {}; + class ItemCables : Default {}; + class ItemBattery : Default {}; + class ItemScraps : Default {}; + class ItemCorrugated : Default {}; + class ItemCorrugatedLg : Default {}; + class 5Rnd_rollins_mag : Default{}; + class CSGAS : Default {}; + class sledge_swing : Default {}; + class stick_swing : Default {}; + class hatchet_swing : Default {}; + class WoodLog_EPOCH : Default {}; + class ItemCoolerE : Default {}; + class lighter_epoch : Default {}; + class Item_AssaultPack_cbr : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_cbr"; + }; + class Item_AssaultPack_dgtl : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_dgtl"; + }; + class Item_AssaultPack_khk : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_khk"; + }; + class Item_AssaultPack_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_mcamo"; + }; + class Item_AssaultPack_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_ocamo"; + }; + class Item_AssaultPack_rgr : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_rgr"; + }; + class Item_AssaultPack_sgg : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_sgg"; + }; + class Item_AssaultPack_blk : Item_Packed_base + { + interactReturnOnUse = "B_AssaultPack_blk"; + }; + class Item_Carryall_cbr : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_cbr"; + }; + class Item_Carryall_khk : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_khk"; + }; + class Item_Carryall_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_mcamo"; + }; + class Item_Carryall_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_ocamo"; + }; + class Item_Carryall_oli : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_oli"; + }; + class Item_Carryall_oucamo : Item_Packed_base + { + interactReturnOnUse = "B_Carryall_oucamo"; + }; + class Item_FieldPack_blk : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_blk"; + }; + class Item_FieldPack_cbr : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_cbr"; + }; + class Item_FieldPack_khk : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_khk"; + }; + class Item_FieldPack_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_ocamo"; + }; + class Item_FieldPack_oli : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_oli"; + }; + class Item_FieldPack_oucamo : Item_Packed_base + { + interactReturnOnUse = "B_FieldPack_oucamo"; + }; + class Item_Kitbag_cbr : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_cbr"; + }; + class Item_Kitbag_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_mcamo"; + }; + class Item_Kitbag_rgr : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_rgr"; + }; + class Item_Kitbag_sgg : Item_Packed_base + { + interactReturnOnUse = "B_Kitbag_sgg"; + }; + class Item_TacticalPack_blk : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_blk"; + }; + class Item_TacticalPack_mcamo : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_mcamo"; + }; + class Item_TacticalPack_ocamo : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_ocamo"; + }; + class Item_TacticalPack_oli : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_oli"; + }; + class Item_TacticalPack_rgr : Item_Packed_base + { + interactReturnOnUse = "B_TacticalPack_rgr"; + }; + class Item_smallbackpack_red : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_red_epoch"; + }; + class Item_smallbackpack_green : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_green_epoch"; + }; + class Item_smallbackpack_teal : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_teal_epoch"; + }; + class Item_smallbackpack_pink : Item_Packed_base + { + interactReturnOnUse = "smallbackpack_pink_epoch"; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgMasterLoop.hpp b/Sources/epoch_config/Configs/CfgMasterLoop.hpp index c5b0b0ea..53de16d3 100644 --- a/Sources/epoch_config/Configs/CfgMasterLoop.hpp +++ b/Sources/epoch_config/Configs/CfgMasterLoop.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgMasterLoop.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgMasterLoop.hpp */ class CfgMasterLoop diff --git a/Sources/epoch_config/Configs/CfgMissions.hpp b/Sources/epoch_config/Configs/CfgMissions.hpp new file mode 100644 index 00000000..cbf5dd77 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions.hpp @@ -0,0 +1,185 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Mission selection configs and dialogs. Defines the missions for trader menu or triggered event. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgMissions.hpp +*/ + +class EpochMissionList{ + traderMissionClasses[] = {"missionDelivery","missionEscort","missionUav","missionSapper","missionSkull","missionMilitary","gameCaptureTheJammer","gameCarRace","infoTime","infoName","infoNews","infoVehicles","infoPeople","helpAirDrop","debugResetMission"}; //Exclude from here to remove from menu and trigger + traderMissionActiveNames[] = {}; //Not currently used (WIP) + traderMissionLongDesc[] = {}; //Not currently used (WIP) + traderMissionActiveLongDesc[] = {}; //Not currently used (WIP) +}; + +class epochMissions { + + class missionDelivery{ + missionName = "Pikes Peak Express"; //Name of mission as it appears in trader list + missionToolTip= "Courier."; //Tooltip for trader menu + missionDesc = "You must deliver an important message to another trader somewhere else on the map. Choose your trader wisely."; //Misison description as it appears in trader menu. + missionDeny = ""; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = ""; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"prepForDelivery","doDelivery","finishDelivery"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; + + class missionEscort{ + missionName = "VIP Escort"; + missionToolTip = "Escort a VIP.."; + missionDesc = "You must deliver the generals daughter to a secret military base."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"takeEscortDelivery","startEscortMission","AIVehicleFind","rndDenyIfInGroup"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionUav{ + missionName = "Drone Pilot"; + missionToolTip = "Pilot a UAV."; + missionDesc = "Fly a drone to another trader and perform reconnaissance over the area. Girls make better pilots."; + missionDeny = "missionNameSpace getVariable [""EPOCH_playerEnergy"",0] < 50"; + missionDenyToolTip = "You require energy for this mission !"; + tasksList[] = {"uavMissionAccepted","doUAVSpawn","doUAVAttach","takeOffUAV","uavMission1","uavMission2","uavMission3"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionSapper{ + missionName = "Sapper Bait"; + missionToolTip = "Lure a sapper back to the trader."; + missionDesc = "Traders use sappers as bait for bigger prey, earn a reward."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"takeEscortDelivery","startSapperMission","AIVehicleFind","rndDenyIfInGroup"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionSkull{ + missionName = "Skulls New Target"; + missionToolTip = "Infiltrate a secure location."; + missionDesc = "Use your sniper and camouflage skills to complete this mission for a large reward."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"prepForMisssion","moveToContact","TakeMission","leaveContact","moveToMilitary","meetInsurgentContact","spawnCOntact","findPosition","removeTargets","moveIn","takeReward","rndVehicleSpawn","rndLooter","rndSapperSpwn","rndInsurgentTaskBin","rndInsurgentTaksCont"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class missionMilitary{ + missionName = "Military Crash"; + missionToolTip = "Loot the crashed military vehcile."; + missionDesc = "Expect some resistance as you clear out the remaining troops and reap the rewards."; + missionDeny = "count weapons player < 1"; + missionDenyToolTip = "You are going to need weapons."; + tasksList[] = {"milMissionAccepted","milSpawnCrashSite","milMarkCrashSite","milFindCrashSite","milEndCrashSite"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class gameCaptureTheJammer{ + missionName = "Capture the Jammer"; + missionToolTip = "Mini Game - Fight for control of the base with your group."; + missionDesc = "Weapon and ammo drops during the game, the longer you keep the jammer the larger the prize, if you can find it."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {"acceptMisssion","tpPlayerFSM","scoreMOnitorFSM","timeoutSpawnRndReward"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class gameCarRace{ + missionName = "First Past The Line"; + missionToolTip = "Mini Game - Vehicle Race"; + missionDesc = "Mini Game - Race your vehicles to the finish point, make it there without stacking into a tree, there may be a prize for the winner."; + missionDeny = "true"; + missionDenyToolTip = "Not Ready."; + tasksList[] = {}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class infoTime{ + missionName = "What is the time ?"; + missionDesc = "Find out the time from the trader."; + missionToolTip = "What's the time"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagTime"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class infoName{ + missionName = "What is your name friend ?"; + missionDesc = "Ask the trader his name.."; + missionToolTip = "Trader Name"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagName"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + + class infoNews{ + missionName = "So, what's new ?"; + missionDesc = "Ask the trader for news or tips."; + missionToolTip = "News"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagNews"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class infoPeople{ + missionName = "Who is nearby ?"; + missionDesc = "Find out if there are nearby players."; + missionToolTip = "Players"; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderDiagNearby"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class infoVehicles{ + missionName = "What Vehicles are Nearby ?"; + missionDesc = "Ask the trader if they know of any vehicle locations."; + missionToolTip = "Need a Ride."; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderNearVehicles"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class helpAirDrop{ + missionName = "Call an Air Drop"; + missionDesc = "Helper - Call an airdrop if available"; + missionToolTip = "Airdrop Request."; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderTriggerAirDrop"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; + class debugResetMission{ + missionName = "Reset Missions"; + missionDesc = "Experimental - Reset missions cache if stuck on a mission."; + missionToolTip = "DEBUG - Reset."; + missionDeny = ""; + missionDenyToolTip = ""; + tasksList[] = {"traderMissionReset"}; + missionTrigger = ""; + missionTriggerDialog = ""; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp new file mode 100644 index 00000000..5c2f8071 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp @@ -0,0 +1,199 @@ +/* + Author: Andrew Gregory - EpochMod.com + Contributors: + + Description: + Example Mission file containing individual tasks (Commented) + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient.hpp +*/ + +//Built in useful vars that can be used in code based conditions / responses etc. +//N.B. Local vars can not be used as they are not in scope when call compiled. +// +//EPOCH_task_startTime - task start diag_tickTime | Usage: diag_tickTime - EPOCH_task_startTime > _someDelayTime; +//EPOCH_taskMarkerPos - Will override the built in marker position. Must be set at init stage, i.e. before marker is created. +//EPOCH_taskTitle - As set by title in each task class. +//EPOCH_taskLastLoop - is the diag_tickTime at the last loop start (based on taskCheckTime). Set to start time until loop starts. +//EPOCH_taskItem - Weaponholder object used to hold task item. Is null object until items are spawned in. +//EPOCH_taskMarkerName - Name for the marker generated automatically by the task system. +// +//Stand alone missions can be called by triggering the first task class with: epochTaskHandle = ["myTaskClass"] execFSM "epoch_code\System\task_control.fsm"; +// + + +class taskWithComments{ + //Task Author + author = "axeman"; + //Task Title as appears in (Accept / Decline) dialogue box. Leave as "" to trigger code only. + //title, desc and img are WIP and will be used for future dialogue GUIs. + title = "Find the Backpack."; + //Description on task. For dialogue box. + desc = "Our new friend has lost his backpack. Find it in a nearby house. It will be within 50m and looks like a white package. He needs the contents to continue on his way."; + //Task Image. For dialogue box. + img = "\A3\Characters_F_EPA\Data\ui\Icon_V_plate_carrier_snake_ca.paa"; + //Simple tasks are used for one off calls, e.g. Ask the trader the time. initfsm, initsqf and/or initcall will be triggered and the task will exit with no monitoring. + simpleTask = 0; + //Trigger this task. Use this condition to trigger the task (WIP - Mission and Individual Task Triggers from the Main Loop) + triggerCondition = "count nearestObjects [player,[""house""],250] > 8"; + //Limit the number of times this task can run for player per life or server restart. (WIP - Part of client / server mission & task monitoring) - Leave as default ! + taskLimit = 3; + //Pause time in the task loop. This figure is also applied before triggering completion of mission and again before cleanup / reminder / next task. + taskCheckTime = 16; + //A pause at the start of the task after collecting variables, before anything is created. TODO: maybe remove.. + triggerDelay = 16; + //Spawn helper objects at start of task / mission (e.g. a hatchet for a tree chopping task). Array will accept any object classes which will be positioned appropriately (WIP - Mainly to support vehicle spawning). + items[] = {"ItemSodaOrangeSherbet","itemGPS"}; + //Item Spawn (0 - Do not spawn, 1 - Nearby in House, 2 - Nearby Hidden, 3 - Near Player) + itemSpawn = 1; + + //Call these functions at init of task, after item spawn but before marker creation. Allows setting EPOCH_taskMarkerPos + initfsm = ""; + initsqf = ""; + initcall = "systemChat 'STARTING FROM CONFIG'"; + + //Place a marker on task target (0 = No Marker, 1 = Marker, with text, exactly on target, 2 = radial marker with target somewhere random inside marker) + markerType = 2; + //Set marker radius for radial marker (markerType = 2) + markerRadius = 50; + //Marker Text - Add text to marker, leave "" for no text. No text available for Marker type 2 yet. + markerText = "Last seen here somewhere."; + //task fsm / sqf. Call an sqf or FSM, designed to manage the mission locally. Will trigger at task start (After specified delay) + //All FSM & SQF Calls pass default variables. e.g. [player ,EPOCH_taskItem] execVM "yourSQF.sqf"; + //Both options (SQF or FSM) will be presented when a script call is available. Both will be called if value is not "" + //All sqf, fsm files are stored, by default, in \epoch_code\compile\missions\tasks\ (WIP - Can be edited with the task setting in CfgMissionTasks.hpp) + //TODO - Reduce to just call so these can all be pre-CompileFinaled + + //Call additional functions based on condition, e.g. air drop, antagonist spawn, or custom code. + //Conditions must return a boolean. e.g. player distance player < 12; + callEventBinTask = 0;//If calling another task (callEventTask1 etc.) then bin this task before starting the new one ? - WIP + callEventCondition1 = "true"; + callEventCondition2 = "EPOCH_taskItem distance player < 50"; + callEventCondition3 = ""; + + //All sqf, fsm files are stored, by default, in \epoch_code\compile\missions\tasks\ (WIP - Can be edited with the task setting above) + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = "triggerAirDrop.sqf"; + //Call another task class from the same mission. + callEventTask1 = ""; + + callEventCALL2 = "hint 'You are getting warm'"; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + + //dialogues. One of the array will be selected randomly upon each trigger + //Dialogue 1 will trigger only one time upon it's condition, designed to be a welcome message. + diag1Condition = "true"; + dialogue1[] = {"Ok, first thing I need to do is find my rucksack","Help me find my rucksack first.","I need to find my rucksack."}; + + //Delay between triggering dialogue, to stop flooding. + diagSquelch = 60; + //Dialogue 2 and 3 will repeat everytime the condition is met and the squelch time has elapsed. Designed as warnings / hint dialogues. Again, a random message will be chosen from the array. + diag2Condition = "diag_tickTime - EPOCH_task_startTime > 20"; + dialogue2[] = {"I dropped it in one of these buildings. Some.. thing was chasing me.","It is in a house nearby, I have a map that I need in it.","Search the nearby houses until you find it."}; + diag3Condition = "EPOCH_taskItem distance player < 12"; + dialogue3[] = {"Wow, you are really close now.","Keep looking, it is right near you.","Smoking hot, you are practically standing on it."}; + + //FAILED / ABANDONED + //Apply a condition to detect mission failure. e.g. '!alive _unit' if escorting a NPC. Task will bin upon player death anyway. + failedCondition = "!alive player"; + //Abandon Distance - Player moves this far from 'task trigger position' causes abandonment of mission (0 = unlimited) + abandonDist = 100; + //Time Limit - Once time limit is reached, and completed condition is not met, the mission has failed and will be disposed. 0 = No Limit. + abandonTime = 240; + //Failed Message (triggered by timeLimit or abandon distance) - Display random message from array upon task failure. + failed[] = {"You blew it.","Don't give up your day job pal..","That's you finished mate, bring on the pain."}; + //Run a command to punish failure of task (triggered by timeLimit or failure condition). + failedFSM = ""; + failedSQF = ""; + failedCall = "[] call EPOCH_callSapperMigration;"; + //Add failure task. Can be multiple tasks that are picked at random. + failedTask[] = {""}; + //Dispose of task item at failure 0 = No, 1 = Yes. Cleans up any spawned weaponholders. + cleanUp = 1; + //Upon FSM disposal call compile each piece of code. Designed to cleanup namespace(s). + cleanUpCalls[] = {""}; + //COMPLETED + //Condition met to trigger completion of task. + completeCondition = "EPOCH_taskItem distance player < 2"; + //Drop reward for player - Currently always nearby, on the floor. + reward[] = {"ItemSodaOrangeSherbet","ItemSodaPurple","ItemSodaMocha"}; + //Completed dialogues, selected randomly from each array. With pause in-between completed1 and completed2. + completed1[] = {"Well done, that was quick. Let me have it, and here's something for you.","You've found it, good job. I have something in here you can have.","Well found, you're a natural. Here, this is yours, thank you."}; + completed2[] = {"Now let's head out of town, you lead the way !","It's time to leave this area, let's go !","Do you think we should get out of this area now ?"}; + //Remind / hint to the player to get them onto the NEXT task. Displays after longer pause + reminder[] = {"It's about time we headed out of town.","We need to get away from these houses.","Let's move away from these built up areas."}; + //Trigger next task at disposal of this one. Allows tasks to be strung together. If more than one a task is selected at random. Leave blank to end mission and reset menu item at trader. + nextTask[] = {"findHouseItem"}; +}; + +class blankTaskWithDefaults{ + author = "axeman"; + title = ""; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 16; + items[] = {""}; + itemSpawn = 1; + markerType = 2; + markerRadius = 50; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = ""; + callEventBinTask = 0; + callEventCondition1 = ""; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = ""; + dialogue1[] = {""}; + diagSquelch = 60; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = 100; + abandonTime = 240; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 1; + cleanUpCalls[] = {}; + completeCondition = ""; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {""}; +}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp new file mode 100644 index 00000000..6ef3141d --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp @@ -0,0 +1,71 @@ +class traderDiagTime{ +author = "axeman"; +title = "Trader Time"; +//Simple task will skip all monitoring and run the provided code (call, fsm, sqf) only. +simpleTask = 1; +initsqf = "traderDiag_timePlease.sqf"; +initfsm = ""; +initcall = ""; +//Next task is allowed to trigger a task if required. +nextTask[] = {}; +}; + +class traderDiagNearby{ +author = "axeman"; +title = "Trader Near By Players"; +simpleTask = 1; +initsqf = "traderDiag_nearPlayers.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderDiagNews{ +author = "axeman"; +title = "Trader News"; +simpleTask = 1; +initsqf = "traderDiag_news.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderDiagName{ +author = "axeman"; +title = "Traders Name"; +simpleTask = 1; +initsqf = "traderDiag_name.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderNearVehicles{ +author = "axeman"; +title = "Trader Nearby Vehicles"; +simpleTask = 1; +initsqf = "traderDiag_nearVehicles.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderTriggerAirDrop{ +author = "axeman"; +title = "Trigger AirDrop"; +simpleTask = 1; +initsqf = "traderDiag_triggerAirDrop.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; + +class traderMissionReset{ +author = "axeman"; +title = "Reset Missions"; +simpleTask = 1; +initsqf = "traderDebug_resetMissions.sqf"; +initfsm = ""; +initcall = ""; +nextTask[] = {}; +}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp new file mode 100644 index 00000000..a07b383e --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp @@ -0,0 +1,232 @@ +class prepForDelivery{ + author = "axeman"; + title = "Prep for Delivery"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 0; + items[] = {"ItemDocumentMission"}; + itemSpawn = 3; + markerType = 0; + markerRadius = 0; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "axeDocDeliveryStart = diag_tickTime"; + callEventBinTask = 0; + callEventCondition1 = "(""ItemDocumentMission"" in magazines player)"; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = "uiNameSpace setVariable ['axeStartTraders',(player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]}]"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "true"; + dialogue1[] = {"Pick up the Document to Start."}; + diagSquelch = 60; + diag2Condition = "!(""ItemDocumentMission"" in magazines player)"; + dialogue2[] = {"Come on Buddy, Pick it up !","It's right next to you on the floor, pick it up to start."}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = 100; + abandonTime = 240; + failed[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the document. Misison Failed !"}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 1; + cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; + completeCondition = "('ItemDocumentMission' in magazines player)"; + reward[] = {}; + completed1[] = {"That's great, let's get out of here.","Good, you have the document, let's move on.","Ok, well done. We can start now."}; + completed2[] = {""}; + reminder[] = {""}; + nextTask[] = {"doDelivery"}; +}; +class doDelivery{ + author = "axeman"; + title = "Do Delivery"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = "(""ItemDocumentMission"" in magazines player)"; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 0; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = ""; + callEventBinTask = 0; + callEventCondition1 = "(axeDocDeliveryStart + 480 < diag_tickTime) && ((player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]} isEqualTo (uiNameSpace getVariable [""axeStartTraders"",[]]))"; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = "[""Hey, what are you doing here ? Get on with your task !"", 5] call Epoch_message"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "(""ItemDocumentMission"" in magazines player)"; + dialogue1[] = {"Ok, head off to another trader, you can't deliver to any nearby.","All set. Now take that document to another trader further away.","Take that message to another trader or trader city."}; + diagSquelch = 40; + diag2Condition = "!('ItemDocumentMission' in magazines player)"; + dialogue2[] = {"Don't leave that document anywhere.","If you lose that document you will fail the mission."}; + diag3Condition = "(count (player nearentities [[""C_Man_1""],42]) > 0) && (count (((player nearentities [[""C_Man_1""],42]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)"; + dialogue3[] = {"Well done, you have a trader nearby, go see him","Looks like you found another trader, well done, deliver the message.","UAV has spotted another trader nearby, go deliver the message."}; + failedCondition = ""; + abandonDist = 0; + abandonTime = 1800; + failed[] = {"Looks like you took too long buddy, Mission Over.","You need to be quicker next time, Mission Over !","Misison Failed - You took too long, better luck next time."}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; + completeCondition = "(count (player nearentities [[""C_Man_1""],6]) > 0) && (count (((player nearentities [[""C_Man_1""],6]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)"; + reward[] = {}; + completed1[] = {"Hey there pal, it looks like you have something for me ?","Great Job there. Step into my office traveller.","You made it, time to take a look at that message."}; + completed2[] = {""}; + reminder[] = {""}; + nextTask[] = {"finishDelivery"}; +}; +class finishDelivery{ + author = "axeman"; + title = "Finish Delivery"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = "(""ItemDocumentMission"" in magazines player)"; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 0; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "axeRndBadNews = floor random 100"; + callEventBinTask = 1; + callEventCondition1 = "(""ItemDocumentMission"" in magazines player)"; + callEventCondition2 = "axeRndBadNews < 6"; + callEventCondition3 = ""; + callEventCALL1 = "player removeMagazine ""ItemDocumentMission"""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = "deliveryMissionBadNews"; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "axeRndBadNews > 5"; + dialogue1[] = {"That's interesting news. Thanks for bringing this.","Great news, you did well to bring this to me."}; + diagSquelch = 60; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = 0; + abandonTime = 240; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {}; + cleanUp = 0; + cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; + completeCondition = "axeRndBadNews > 5"; + reward[] = {}; + completed1[] = {"Take your reward, you have earnt it","Here is your reward, you are a great courier.","Any time you need work, come and see me, great job."}; + completedCALL = "axeRewardWH = createVehicle[""groundWeaponHolder"",getPosATL player,[],0,""CAN_COLLIDE""];[axeRewardWH,""Pelican_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; + reminder[] = {""}; + nextTask[] = {}; +}; +class deliveryMissionBadNews{ + author = "axeman"; + title = "Delivery Gone Bad"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 4; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 50; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "[player,6] call EPOCH_callSapperMigration"; + callEventBinTask = 0; + callEventCondition1 = ""; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "true"; + dialogue1[] = {"Oh my, that's terrible, why did you bring me this news ?","No no no, why would you do this to me, this is awful news."}; + diagSquelch = 60; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = 100; + abandonTime = 240; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 1; + cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; + completeCondition = "true"; + reward[] = {""}; + completed1[] = {"You are going to pay for that, get out of my sight","Nobody does that to me, go away.","I would run buddy, I am not pleased."}; + completed2[] = {""}; + reminder[] = {""}; + nextTask[] = {}; +}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionMilitary.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionMilitary.hpp new file mode 100644 index 00000000..3e1240e7 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionMilitary.hpp @@ -0,0 +1,296 @@ +class milMissionAccepted{ + author = "axeman"; + title = "Military Crash Site"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 250; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = ""; + callEventBinTask = 0; + callEventCondition1 = ""; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "true"; + dialogue1[] = {"A militia group has stolen military aircraft from a nearby airfield.","A stolen military aircraft has just taken off from an airport nearby.","I have received word that a splinter group are stealing an aircraft."}; + diagSquelch = 30; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 480; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "true"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {"milSpawnCrashSite"}; +}; +class milSpawnCrashSite{ + author = "axeman"; + title = "Military Spawn Crash Site"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 0; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 250; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "[] spawn {milCrashPos = [position player, 1000, 2550, 0, 0, 1000, 0] call BIS_fnc_findSafePos;terminate _thisScript;};"; + callEventBinTask = 0; + callEventCondition1 = "(diag_tickTime - EPOCH_task_startTime) > 12"; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = "[player,Epoch_personalToken,selectRandom [""B_Plane_CAS_01_F"",""O_Heli_Attack_02_black_F"",""B_UAV_02_CAS_F"",""I_Plane_Fighter_03_AA_F ""],milCrashPos,objNull,false,""CAN_COLLIDE"","""","""","""","""",true] remoteExec [""EPOCH_Server_createObject"",2];"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "(diag_tickTime - EPOCH_task_startTime) > 6"; + dialogue1[] = {"As suspected, the aircraft was sabotaged and has crashed.","An inept theft attempt, the aircraft has gone down.","Something went wrong, my UAV has spotted the aircraft, it has crashed nearby."}; + diagSquelch = 15; + diag2Condition = "true"; + dialogue2[] = {}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 480; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "(diag_tickTime - EPOCH_task_startTime) > 18"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = "true"; + reminder[] = {"Wait 10, I am triangulating the position.","Hold your position and wait for the location","I am calculating the location of the crash site."}; + nextTask[] = {"milMarkCrashSite"}; +}; +class milMarkCrashSite{ + author = "axeman"; + title = "Mark Military Crash Site"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 3; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 500; + markerText = "Crash Site"; + initfsm = ""; + initsqf = ""; + initcall = "[[1,player],milCrashPos,""ELLIPSE"",""mil_dot"",""Crash Site"",""ColorRed"",[800,800], ""SolidBorder"", 42, 0.6, ""milMarkCrashSite""] remoteExec [""EPOCH_server_makeMarker"",2];"; + callEventBinTask = 0; + callEventCondition1 = "true"; + callEventCondition2 = "true"; + callEventCondition3 = "true"; + callEventCALL1 = "milWH1 = createVehicle[""groundWeaponHolder"", milCrashPos, [], 4, ""CAN_COLLIDE""];removeFromRemainsCollector [milWH1];[milWH1,""Pelican_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = "milWH2 = createVehicle[""groundWeaponHolder"", milCrashPos, [], 4, ""CAN_COLLIDE""];removeFromRemainsCollector [milWH2];[milWH2,""ToolRack_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = "milWH3 = createVehicle[""groundWeaponHolder"", milCrashPos, [], 4, ""CAN_COLLIDE""];removeFromRemainsCollector [milWH3];[milWH3,""AirDrop_Payout1""] remoteExec [""EPOCH_serverLootObject"",2];"; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "(diag_tickTime - EPOCH_task_startTime) > 6"; + dialogue1[] = {"Check your map, I have marked the site in red for your team.","Your map has been marked.","I have added a marker for your team."}; + diagSquelch = 30; + diag2Condition = "(diag_tickTime - EPOCH_task_startTime) > 31"; + dialogue2[] = {"Reports are it was last spotted in that area..","Search the area, it was seen coming down from that location.","Be sure to search the area, the marker is the last know location."}; + diag3Condition = "(diag_tickTime - EPOCH_task_startTime) > 128"; + dialogue3[] = {"Be careful, I have spotted another UAV.","An enemy UAV is scouting the location","Keep a low profile, the enemy are scouting the area."}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 1280; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "(diag_tickTime - EPOCH_task_startTime) > 60"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {"milFindCrashSite"}; +}; +class milFindCrashSite{ + author = "axeman"; + title = "Military Crash Site Hunt"; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 20; + items[] = {""}; + itemSpawn = 0; + markerType = 0; + markerRadius = 250; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = "milDoUAV = false;"; + callEventBinTask = 0; + callEventCondition1 = "count (units group player select {_x distance milCrashPos < 800}) > 0"; + callEventCondition2 = "count (units group player select {_x distance milCrashPos < 480}) > 0 && random 100 < 12"; + callEventCondition3 = ""; + callEventCALL1 = "_diag = format [""Great work the UAV has spotted %1 nearly on-site."",name ((units group player select {_x distance milCrashPos < 800}) select 0)];[_diag, 5] call Epoch_message;"; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = "[(selectRandom (units group player select {_x distance milCrashPos < 480}))] execVM ""epoch_code\compile\missions\tasks\mission_spawnUAV.sqf"";milDoUAV = true;"; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "count (units group player select {_x distance milCrashPos < 1000}) > 0"; + dialogue1[] = {"Keep going you are getting close now","You are closing in on the target.","You are nearly there. Keep it up."}; + diagSquelch = 60; + diag2Condition = "milDoUAV"; + dialogue2[] = {"Enemy UAV spotted, you've got company.","You've got another UAV in the area, keep low.","Find a spot to hide, enemy UAV incoming."}; + diag3Condition = "count (units group player select {_x distance milCrashPos < 60}) > 0"; + dialogue3[] = {"You've made it, find any loot.","Search the area, there will be loot around","There should be plenty to scavange."}; + failedCondition = ""; + abandonDist = -1; + abandonTime = 4800; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 0; + cleanUpCalls[] = {}; + completeCondition = "(diag_tickTime - EPOCH_task_startTime) > 4600 || count (units group player select {_x distance milWH1 < 60}) > 0"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = ""; + reminder[] = {""}; + nextTask[] = {"milEndCrashSite"}; +}; + +class milEndCrashSite{ + author = "axeman"; + title = ""; + desc = ""; + img = ""; + simpleTask = 0; + triggerCondition = ""; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 16; + items[] = {""}; + itemSpawn = 1; + markerType = 0; + markerRadius = 50; + markerText = ""; + initfsm = ""; + initsqf = ""; + initcall = ""; + callEventBinTask = 0; + callEventCondition1 = ""; + callEventCondition2 = ""; + callEventCondition3 = ""; + callEventCALL1 = ""; + callEventFSM1 = ""; + callEventSQF1 = ""; + callEventTask1 = ""; + callEventCALL2 = ""; + callEventFSM2 = ""; + callEventSQF2 = ""; + callEventTask2 = ""; + callEventCALL3 = ""; + callEventFSM3 = ""; + callEventSQF3 = ""; + callEventTask3 = ""; + diag1Condition = "true"; + dialogue1[] = {"Well done, that was a good find","You are an official scavenger now, congratulations.","Your loot is welcome at my store any time."}; + diagSquelch = 60; + diag2Condition = ""; + dialogue2[] = {""}; + diag3Condition = ""; + dialogue3[] = {""}; + failedCondition = ""; + abandonDist = 100; + abandonTime = 240; + failed[] = {""}; + failedFSM = ""; + failedSQF = ""; + failedCall = ""; + failedTask[] = {""}; + cleanUp = 1; + cleanUpCalls[] = {}; + completeCondition = "true"; + reward[] = {""}; + completed1[] = {""}; + completed2[] = {""}; + completedCALL = "[player,1,""milMarkCrashSite""] remoteExec [""EPOCH_server_removeMarker"",2];"; + reminder[] = {""}; + nextTask[] = {""}; +}; diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp new file mode 100644 index 00000000..f9a73e26 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp @@ -0,0 +1,166 @@ +class uavMissionAccepted{ + author = "axeman"; + title = "UAV Mission Accepted"; + simpleTask = 0; + taskLimit = 3; + taskCheckTime = 3; + triggerDelay = 2; + items[] = {"B_UavTerminal"}; + itemSpawn = 3; + markerType = 0; + markerRadius = 0; + callEventBinTask = 0; + diag1Condition = "true"; + dialogue1[] = {"The UAV terminal is at your feet, Equip it !","Pick up the terminal and equip yourself with it.","Grab the UAV terminal and put it in your GPS slot."}; + diagSquelch = 30; + diag2Condition = "!('B_UavTerminal' in assignedItems player)"; + dialogue2[] = {"Hurry it up, pick up and equip the terminal.","Come on, Equip yourself with the terminal.","We don't have all day, get that terminal equipped."}; + abandonDist = 100; + abandonTime = 240; + failed[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the terminal. Misison Failed !"}; + cleanUp = 0; + completeCondition = "'B_UavTerminal' in assignedItems player"; + completed1[] = {"That's great, you have 30 seconds to find a safe position.","Find a hidden spot to operate from, take off in 30 seconds.","Find yourself a concealed position to work from, taking off in half a minute."}; + nextTask[] = {"doUAVSpawn"}; +}; +class doUAVSpawn{ + author = "axeman"; + title = "UAV Spawn"; + simpleTask = 0; + taskLimit = 3; + taskCheckTime = 8; + triggerDelay = 30; + itemSpawn = 0; + markerType = 0; + markerRadius = 0; + initcall = "axeUAV = objNull"; + callEventBinTask = 0; + callEventCondition1 = "(diag_tickTime - EPOCH_task_startTime) > 6"; + callEventCALL1 = "_targetPos = (getPosATL player) findEmptyPosition [25,250,""I_UAV_01_F""];axeUAV = createVehicle[""I_UAV_01_F"", _targetPos, [], 10, ""CAN_COLLIDE""];_driver = (group player) createUnit[""I_UAV_AI"", position axeUAV, [], 0, ""CAN_COLLIDE""];_driver moveInAny axeUAV;"; + diag1Condition = "true"; + dialogue1[] = {"UAV is ready, get prepared !","Here it comes, connecting you now. 10 seconds..","Nice spot, connecting you to the UAV !"}; + diagSquelch = 60; + failedCondition = "!('B_UavTerminal' in assignedItems player)"; + abandonDist = -1; + abandonTime = 1200; + failed[] = {"Lost it already.. Mission Over","Not a willing pilot eh ? Try again later.","Equipment Lost.. Mission Failed !"}; + cleanUp = 0; + completeCondition = "!(isNull axeUAV)"; + nextTask[] = {"doUAVAttach"}; +}; +class doUAVAttach{ + author = "axeman"; + title = "UAV Spawn"; + simpleTask = 0; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 6; + itemSpawn = 0; + markerType = 0; + markerRadius = 0; + initcall = "player connectTerminalToUAV axeUAV;player action [""SwitchToUAVDriver"", axeUAV];addToRemainsCollector[axeUAV];"; + callEventBinTask = 0; + diag1Condition = "true"; + dialogue1[] = {"Woohoo, here we go.. Get it in the air.","Get it in the air, no time to waste","You are a natural kid. Let's fly."}; + diagSquelch = 60; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; + abandonDist = -1; + abandonTime = 1200; + failed[] = {"Lost it already.. Mission Over","Not a natural pilot. Try again later.","Mission Failed !"}; + cleanUp = 0; + completeCondition = "(getPosATL axeUAV select 2) > 10"; + completedCALL = "if(SunOrMoon < 1)then{player action [""lightOn"", axeUAV];};"; + nextTask[] = {"takeOffUAV"}; +}; +class takeOffUAV{ + author = "axeman"; + title = "Pilot the UAV"; + simpleTask = 0; + taskLimit = 3; + taskCheckTime = 8; + triggerDelay = 6; + itemSpawn = 0; + markerType = 0; + markerRadius = 0; + initcall = "axeUAVRndMission = floor random 2;"; + callEventBinTask = 1; + callEventCondition1 = "(diag_tickTime - EPOCH_task_startTime > 30) && axeUAVRndMission == 0"; + callEventCondition2 = "(diag_tickTime - EPOCH_task_startTime > 30) && axeUAVRndMission == 1"; + callEventTask1 = "uavMission1"; + callEventTask2 = "uavMission2"; + diag1Condition = "alive axeUAV"; + dialogue1[] = {"Great start.. Lets take this thing for a ride.","We're off, get some practice, I am finding you a target.","Get clear of this area, I am calculating your target."}; + diagSquelch = 60; + diag2Condition = "alive axeUAV"; + dialogue2[] = {"Keep it up, you are doing a great job.","Try and find some targets on your way.","Don't get shot down now !"}; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; + abandonDist = -1; + abandonTime = 1280; + failed[] = {"Oh dear, that didn't go well..","Try again later.","Misison Failed !"}; + cleanUp = 0; + completeCondition = "false"; + completedCALL = "player connectTerminalToUAV objNull;"; + nextTask[] = {}; +}; +class uavMission1{ + author = "axeman"; + title = "Trader House Recon"; + simpleTask = 0; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 8; + items[] = {""}; + itemSpawn = 0; + markerType = 2; + markerRadius = 180; + markerText = "Trader House Recon"; + initcall = "[] spawn {uavMission1Obj = selectRandom (nearestObjects [axeUAV,[""HOUSE""],2500]);EPOCH_taskMarkerPos = getPosATL uavMission1Obj;};"; + callEventBinTask = 0; + diag1Condition = "true"; + dialogue1[] = {"I need some recon on a nearby house","We need intelligence on a potential trader location.","Help us gather intel on a trader house !"}; + diagSquelch = 60; + diag2Condition = "EPOCH_taskMarkerPos distance axeUAV > 450"; + dialogue2[] = {"I have marked your map, it will be nearby.","Check you map, there is a marker near a safehouse","Search your map for the landing zone, near a traders safehouse."}; + diag3Condition = "EPOCH_taskMarkerPos distance axeUAV < 450"; + dialogue3[] = {"Land it nearby and switch off the engine.","You need to land by the house, quietly.","Drop the UAV in the marker, then keep quiet."}; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; + abandonDist = -1; + abandonTime = 2200; + failed[] = {"Oh dear, Mission Over !","Mission Failed !"}; + cleanUp = 1; + completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; + reward[] = {"ItemGoldBar","ItemGoldBar"}; + completed1[] = {"Great work, here's your reward."}; + completedCALL = "player connectTerminalToUAV objNull;[(driver axeUAV)] joinSilent grpNull;"; +}; +class uavMission2{ + author = "axeman"; + title = "Deliver UAV To Trader"; + simpleTask = 0; + taskLimit = 3; + taskCheckTime = 16; + triggerDelay = 8; + itemSpawn = 0; + markerType = 2; + markerRadius = 220; + markerText = "UAV Trader"; + initcall = "[] spawn {EPOCH_taskUAVTrader = selectRandom (player nearentities [[""C_Man_1""],10500] select {_x getVariable [""AI_SLOT"",-1] > -1 && player distance _x > 50});EPOCH_taskMarkerPos = getPosATL EPOCH_taskUAVTrader;};"; + callEventBinTask = 0; + diag1Condition = "true"; + dialogue1[] = {"I need this UAV delivering to my buddy","Recon a rogue trader, land this near his location.","Land this UAV near the target trader."}; + diagSquelch = 60; + diag2Condition = "EPOCH_taskMarkerPos distance axeUAV > 450"; + dialogue2[] = {"Check your map for his location, you will need to land nearby.","I have marked your map with his location.","Fly to the location marked on your map, then land."}; + diag3Condition = "EPOCH_taskMarkerPos distance axeUAV < 450"; + dialogue3[] = {"Get this thing down and the engine off.","Land in the zone and switch your engine off quickly.","Find a landing spot in the area and keep quiet."}; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; + abandonDist = -1; + abandonTime = 2600; + failed[] = {"Oh dear, Mission Over !","Mission Failed !"}; + cleanUp = 1; + cleanUpCalls[] = {"player connectTerminalToUAV objNull"}; + completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; + reward[] = {"ItemGoldBar","ItemGoldBar"}; + completed1[] = {"Great work, here's your reward."}; + completedCALL = "player connectTerminalToUAV objNull;[(driver axeUAV)] joinSilent grpNull;"; +}; diff --git a/Sources/epoch_config/Configs/CfgMissionsTasks.hpp b/Sources/epoch_config/Configs/CfgMissionsTasks.hpp new file mode 100644 index 00000000..f8fa803c --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissionsTasks.hpp @@ -0,0 +1,20 @@ +class inGameTasks { + + //Preset custom vars for use in task conditions - Count must match + //At task start the varNames variables will be added as missionNameSpace variables using the corresponding varData. + varName[] = {"_milBuildings","_testVar"}; + varData[] = {{"Cargo_HQ_base_F","Cargo_Tower_base_F","Cargo_Patrol_base_F"},"""TestVal"""}; + + //Filter out building classes from spawn areas. Some buildings just aren't suitable. NB. A garrison (buildingPos) point is required when spawning items in a building. + filterBuilds[] = {"Land_i_Addon_03_V1_F","Land_Offices_01_V1_F"}; + + //Path to task files (sqf,fsm etc.) + file = "epoch_code\compile\missions\tasks"; + //Path to main task control fsm - NB. Requires manually setting in mission accept sqf. + fsmpath = "epoch_code\system"; + +#include "CfgMissions\CfgTraderDiags.hpp" +#include "CfgMissions\CfgmissionDelivery.hpp" +#include "CfgMissions\CfgmissionUav.hpp" +#include "CfgMissions\CfgmissionMilitary.hpp" +}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgObjectInteractions.hpp b/Sources/epoch_config/Configs/CfgObjectInteractions.hpp new file mode 100644 index 00000000..cb5fdf28 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgObjectInteractions.hpp @@ -0,0 +1,275 @@ +class CfgObjectInteractions { + class Default { + interactMode = 0; + distance = 0; + toxicChance = 0; + bleedChance = 0; + bloodpChance = 0; + fatigueChance = 0; + bleedAmount = 0; + bloodpAmount = 0; + soundEffect[] = {}; + soundEffectGlobal = 0; + animationEffect[] = {}; + animationEffectGlobal = 0; + canSee = "false"; + ppEffect = 0; + aliveState = 0; // 0 = alive or dead, 1 = dead, 2 = alive. + interactAttributes[] = {}; + }; + class Land_MPS_EPOCH : Default {}; + class container_epoch : Default {}; + + // Base Building Start + class PlotPole_EPOCH : Default { + interactMode = 1; + }; + class Tipi_EPOCH : Default { + interactMode = 4; + }; + class Tipi_SIM_EPOCH : Default { + interactMode = 1; + }; + class StorageShelf_EPOCH : Default { + interactMode = 4; + }; + class WorkBench_EPOCH : Default { + interactMode = 4; + }; + class Foundation_EPOCH : Default { + interactMode = 1; + }; + class WoodFoundation_EPOCH : Default { + interactMode = 1; + }; + // Base Building stop + + class Sheep_random_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Soiled",1} + }; + }; + class Goat_random_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Soiled",1} + }; + }; + class Cock_random_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Soiled",1} + }; + }; + class Hen_random_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Soiled",1} + }; + }; + class Rabbit_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Soiled",1} + }; + }; + class Fin_random_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Karma",-100}, + {"Soiled",1} + }; + }; + class Alsatian_Random_EPOCH : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Karma",-100}, + {"Soiled",1} + }; + }; + class Epoch_Sapper_F : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Toxicity",20,1}, + {"Soiled",20,1} + }; + }; + class Epoch_SapperB_F : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Toxicity",20,1}, + {"Soiled",20,1} + }; + }; + + class I_UAV_01_F : Default { + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Energy",20,1} + }; + }; + class Epoch_Female_F : Default { + interactMode = 2; + }; + class Epoch_Male_F : Default { + interactMode = 2; + }; + class C_man_1 : Default { + interactMode = 2; + }; + class SapperHead_SIM_EPOCH : Default { + interactMode = 0; + interactAttributes[] = { + {"Soiled",1} + }; + }; + class SapperCorpse_SIM_EPOCH : Default { + interactMode = 0; + interactAttributes[] = { + {"Soiled",1} + }; + }; + + class Snake_random_EPOCH : Default { + interactMode = 3; + distance = 3; + toxicChance = 0.2; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"snake_bite0"}; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect = 0; + aliveState = 0; + interactAttributes[] = { + {"Toxicity",20,1}, + {"Soiled",1} + }; + }; + class Snake2_random_EPOCH : Default { + interactMode = 3; + distance = 3; + toxicChance = 0.1; + bloodpChance = 1; + fatigueChance = 0.5; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {"snake_bite0"}; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect = 0; + aliveState = 0; + interactAttributes[] = { + {"Toxicity",10,1}, + {"Soiled",1} + }; + }; + class GreatWhite_F : Default { + interactMode = 3; + distance = 6; + toxicChance = 0; + bleedChance = 1; + bloodpChance = 1; + fatigueChance = 1; + bleedAmount = 100; + bloodpAmount = 3; + canSee = "true"; + ppEffect = 0; + aliveState = 1; + interactAttributes[] = {}; + }; + class SmokeShellCustom : Default { + distance = 6; + toxicChance = 1; + bleedChance = 0; + bloodpChance = 1; + fatigueChance = 1; + bleedAmount = 0; + bloodpAmount = 3; + canSee = "true"; + ppEffect = 0; + }; + class Epoch_Cloak_F : Default { + distance = 30; + toxicChance = 0; + bloodpChance = 0.9; + fatigueChance = 0.5; + bleedAmount = 66; + bloodpAmount = 3; + soundEffect[] = {"cultist_nearby"}; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect = 1; + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Toxicity",20,1}, + {"Soiled",20,1} + }; + }; + class EPOCH_RyanZombie_1 : Default { + distance = 3; + toxicChance = 0.1; + bloodpChance = 0.9; + fatigueChance = 0.4; + bleedAmount = 30; + bloodpAmount = 3; + soundEffect[] = {{"ryanzombies\sounds\attack1.ogg",400}, {"ryanzombies\sounds\attack2.ogg",400}, {"ryanzombies\sounds\attack3.ogg",400}, {"ryanzombies\sounds\attack4.ogg",400}, {"ryanzombies\sounds\attack5.ogg",400}}; + soundEffectGlobal = 1; + animationEffect[] = {"AwopPercMstpSgthWnonDnon_throw"}; + animationEffectGlobal = 1; + canSee = "!(lineIntersects[eyePos _unit, aimPos _target, _unit, _target])"; + ppEffect = 0; + interactMode = 3; + aliveState = 1; + interactAttributes[] = { + {"Toxicity",5,1}, + {"Soiled",10,1} + }; + }; + class EPOCH_RyanZombie_2 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5 : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_C : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_Sp : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_B : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_W : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_M : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_1_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_2_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_3_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_4_S : EPOCH_RyanZombie_1 {}; + class EPOCH_RyanZombie_5_S : EPOCH_RyanZombie_1 {}; + +}; diff --git a/Sources/epoch_config/Configs/CfgPricing.hpp b/Sources/epoch_config/Configs/CfgPricing.hpp index b86b1b75..9be63df5 100644 --- a/Sources/epoch_config/Configs/CfgPricing.hpp +++ b/Sources/epoch_config/Configs/CfgPricing.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgPricing.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgPricing.hpp */ class CfgPricing @@ -785,7 +785,7 @@ class CfgPricing class smallbackpack_green_epoch {price = 22;}; class smallbackpack_teal_epoch {price = 22;}; class smallbackpack_pink_epoch {price = 22;}; - + class I_UAV_01_backpack_F {price = 22;}; // Marksman DLC class U_O_FullGhillie_lsh { price = 7; }; class U_O_FullGhillie_sard { price = 7; }; @@ -1033,6 +1033,7 @@ class CfgPricing class O_Heli_Transport_04_box_EPOCH {price = 2500;}; class O_Heli_Transport_04_covered_EPOCH {price = 2500;}; class B_Heli_Transport_03_unarmed_EPOCH {price = 2500;}; + class I_UAV_01_F {price = 50;}; class jetski_epoch {price = 500;}; class ebike_epoch {price = 1500;}; @@ -1092,6 +1093,21 @@ class CfgPricing class CUP_B_Ural_Empty_CDF {price = 1000;}; class CUP_C_DC3_CIV {price = 2400;}; + // APEX + class C_Boat_Transport_02_F {price = 1200;}; + class C_Scooter_Transport_01_F {price = 1200;}; + class C_Offroad_02_unarmed_F {price = 3500;}; + class I_C_Offroad_02_unarmed_F {price = 3500;}; + class B_T_LSV_01_unarmed_F {price = 4400;}; + class O_LSV_02_unarmed_F {price = 4300;}; + class O_T_LSV_02_unarmed_F {price = 4600;}; + class C_Plane_Civil_01_F {price = 5000;}; + class C_Plane_Civil_01_racing_F {price = 5000;}; + class B_CTRG_LSV_01_light_F {price = 4400;}; + class B_LSV_01_unarmed_F {price = 4400;}; + class B_T_VTOL_01_infantry_F {price = 10000;}; + class B_T_VTOL_01_vehicle_F {price = 10000;}; + //Mission Items class B_UavTerminal {price = 10;}; class O_UavTerminal {price = 10;}; diff --git a/Sources/epoch_config/Configs/CfgRemoteExec.hpp b/Sources/epoch_config/Configs/CfgRemoteExec.hpp index e780ee73..66e055f3 100644 --- a/Sources/epoch_config/Configs/CfgRemoteExec.hpp +++ b/Sources/epoch_config/Configs/CfgRemoteExec.hpp @@ -1,16 +1,16 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: Andrew Gregory Description: - RemoteExec whitelist for Epoch sandbox gamemode. This also blacklists default A3 remoteExec commands. + RemoteExec whitelist for Epoch Survival gamemode. This also blacklists default A3 remoteExec commands. Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgRemoteExec.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgRemoteExec.hpp */ class CfgRemoteExec @@ -84,6 +84,10 @@ class CfgRemoteExec class EPOCH_server_handle_switchMove { allowedTargets=2; jip = 0; + }; + class EPOCH_client_bitePlayer { + allowedTargets=1; + jip = 0; }; class EPOCH_server_upgradeGroup { allowedTargets=2; @@ -197,6 +201,39 @@ class CfgRemoteExec allowedTargets=2; jip = 0; }; + class EPOCH_server_triggerAntagonist { + allowedTargets=2; + jip = 0; + }; + class EPOCH_server_deadPlayerDetonate { + allowedTargets=2; + jip = 0; + }; + class epoch_server_playersetvariable { + allowedTargets=2; + jip = 0; + }; + class EPOCH_spawn_vehicle { + allowedTargets=2; + jip = 0; + }; + class EPOCH_Server_missionComms { + allowedTargets=2; + jip = 0; + }; + class EPOCH_serverLootObject { + allowedTargets=2; + jip = 0; + }; + class EPOCH_server_makeMarker { + allowedTargets=2; + jip = 0; + }; + class EPOCH_server_removeMarker { + allowedTargets=2; + jip = 0; + }; + }; class Commands {mode=0;}; }; diff --git a/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp b/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp new file mode 100644 index 00000000..43cbb7c4 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSay3Dhandler.hpp @@ -0,0 +1,64 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Custom Epoch config for say3d broadcsting to nearby players. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSounds.hpp +*/ +class CfgSay3Dhandler { + class snake_bite0 { + distance = 100; + }; + class cultist_nearby { + distance = 100; + }; + class dog_bark { + distance = 750; + }; + class dog_cry { + distance = 600; + }; + class hed_cluck0 { + distance = 600; + }; + class hed_cluck1 { + distance = 600; + }; + class hed_cluck2 { + distance = 600; + }; + class cultist_talk { + distance = 30; + }; + class cultist_laugh { + distance = 30; + }; + class cloak_death { + distance = 30; + }; + class drone_alert0 { + distance = 400; + }; + class sapper_alert0 { + distance = 400; + }; + class sapper_groan0 { + distance = 400; + }; + class sapper_groan1 { + distance = 400; + }; + class sapper_groan2 { + distance = 400; + }; + class sapper_explode { + distance = 1000; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgSnapChecks.hpp b/Sources/epoch_config/Configs/CfgSnapChecks.hpp index d699191d..7da4a2c7 100644 --- a/Sources/epoch_config/Configs/CfgSnapChecks.hpp +++ b/Sources/epoch_config/Configs/CfgSnapChecks.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgSnapChecks.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSnapChecks.hpp */ class CfgSnapChecks { @@ -18,16 +18,16 @@ class CfgSnapChecks { nails[] = { {{1.6,0,-0.6},{1.6,0,-0.75}}, {{-1.6,0,-0.6},{-1.6,0,-0.75}}, - {{1.6,0,-0.0307557},{1.8625,0,-0.0307557}}, - {{-1.6,0,-0.0307557},{-1.8625,0,-0.0307557}} + {{0,0,-0.0307557},{1.8625,0,-0.0307557}}, + {{0,0,-0.0307557},{-1.8625,0,-0.0307557}} }; }; class WoodLargeWall_EPOCH { nails[] = { {{2.46932,0,0.120775},{2.46932,0,-0.190775}}, {{-2.46932,0,0.120775},{-2.46932,0,-0.190775}}, - {{2.46932,0,1.5},{2.76932,0,1.5}}, - {{-2.46932,0,1.5},{-2.76932,0,1.5}} + {{0,0,1.5},{2.76932,0,1.5}}, + {{0,0,1.5},{-2.76932,0,1.5}} }; }; class WoodWall1_EPOCH : WoodLargeWall_EPOCH {}; @@ -43,10 +43,10 @@ class CfgSnapChecks { class CinderWallHalf_EPOCH : WoodLargeWall_EPOCH {}; class WoodFloor_Epoch { nails[] = { - {{2.5555,0,0.15},{2.8555,0,0.15}}, - {{0,-2.5555,0.15},{0,2.8555,0.15}}, - {{-2.5555,0,0.15},{-2.8555,0,0.15}}, - {{0,-2.5555,0.15},{0,-2.8555,0.15}}, + {{0,0,0.15},{2.8555,0,0.15}}, + {{0,0,0.15},{0,2.8555,0.15}}, + {{0,0,0.15},{-2.8555,0,0.15}}, + {{0,0,0.15},{0,-2.8555,0.15}}, {{2.5555,0,0.15},{2.5555,0,-0.15}}, {{-2.5555,0,0.15},{-2.5555,0,-0.15}}, diff --git a/Sources/epoch_config/Configs/CfgSounds.hpp b/Sources/epoch_config/Configs/CfgSounds.hpp new file mode 100644 index 00000000..b9143977 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSounds.hpp @@ -0,0 +1,67 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + CfgSounds + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSounds.hpp +*/ +class CfgSounds +{ + class dog_bark + { + sound[] = { "@A3\Sounds_F\ambient\animals\dog1", 0.6, 1.0 }; + titles[] = {}; + }; + class dog_cry + { + sound[] = { "@A3\Sounds_F\ambient\animals\dog4", 0.6, 1.0 }; + titles[] = {}; + }; + class hed_cluck0 + { + sound[] = { "@A3\Sounds_F\ambient\animals\hen1", 0.3, 1.0 }; + titles[] = {}; + }; + class hed_cluck1 + { + sound[] = { "@A3\Sounds_F\ambient\animals\hen2", 0.3, 1.0 }; + titles[] = {}; + }; + class hed_cluck2 + { + sound[] = { "@A3\Sounds_F\ambient\animals\hen3", 0.3, 1.0 }; + titles[] = {}; + }; + class cultist_talk + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_banter1", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_death + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_death", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_laugh + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_laugh", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_nearby + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_nearby", 0.7, 1.0 }; + titles[] = {}; + }; + class cultist_taunt + { + sound[] = { "@x\addons\a3_epoch_assets\sounds\cloak\cultist_taunt", 0.7, 1.0 }; + titles[] = {}; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp b/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp new file mode 100644 index 00000000..52137536 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSwitchMovehandler.hpp @@ -0,0 +1,28 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Custom Epoch config for say3d broadcsting to nearby players. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgSounds.hpp +*/ +class CfgSwitchMovehandler { + class AovrPercMrunSrasWrflDf { + distance = 1000; + }; + class epoch_unarmed_jump { + distance = 1000; + }; + class AwopPercMstpSgthWnonDnon_throw { + distance = 1000; + }; + class AmovPercMstpSnonWnonDnon_SaluteOut { + distance = 1000; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgTraderMissions.hpp b/Sources/epoch_config/Configs/CfgTraderMissions.hpp index ca99d0d4..fdeb8b27 100644 --- a/Sources/epoch_config/Configs/CfgTraderMissions.hpp +++ b/Sources/epoch_config/Configs/CfgTraderMissions.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgTraderMissions.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgTraderMissions.hpp */ class MissionList{ diff --git a/Sources/epoch_config/Configs/cfgCrafting.hpp b/Sources/epoch_config/Configs/cfgCrafting.hpp index 0f151193..db1fc630 100644 --- a/Sources/epoch_config/Configs/cfgCrafting.hpp +++ b/Sources/epoch_config/Configs/cfgCrafting.hpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/Configs/CfgCrafting.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgCrafting.hpp USAGE: nearby[] = @@ -665,6 +665,22 @@ class CfgCrafting previewScale = 0.4; previewVector = 2; }; + class DogCarcass_EPOCH : Part + { + usedIn[] = { "CookedDog_EPOCH" }; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2.1; + }; + class CookedDog_EPOCH : Item + { + usedIn[] = {}; + nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}}; + recipe[] = { "DogCarcass_EPOCH" }; + previewPosition[] = {0.796141,1,0.27}; + previewScale = 0.4; + previewVector = 2; + }; class SheepCarcass_EPOCH : Part { usedIn[] = { "CookedSheep_EPOCH" }; diff --git a/Sources/epoch_config/build.hpp b/Sources/epoch_config/build.hpp index a5bcef9e..5f31ef30 100644 --- a/Sources/epoch_config/build.hpp +++ b/Sources/epoch_config/build.hpp @@ -1 +1 @@ -build=440; +build=560; diff --git a/Sources/epoch_config/sandbox_config.hpp b/Sources/epoch_config/sandbox_config.hpp index f15da185..9e7a13c0 100644 --- a/Sources/epoch_config/sandbox_config.hpp +++ b/Sources/epoch_config/sandbox_config.hpp @@ -1,5 +1,5 @@ /* - Epoch Mod Sandbox Survival Gamemode + Epoch Mod Survival Gamemode Author: Epoch Mod Team - EpochMod.com @@ -7,13 +7,13 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_config/config.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/config.hpp */ author = "Epoch Mod Team"; class Header { - gameType = Sandbox; + gameType = Survival; minPlayers = 1; maxPlayers = 100; }; @@ -31,7 +31,7 @@ OnLoadMissionTime = False; onLoadName = "Epoch Mod"; disabledAI = true; scriptedPlayer = 1; -disableChannels[]={0,1,2,6}; +disableChannels[]={{0,true,true},{1,false,true},{2,true,true},{6,true,true}}; // allow text only on side chat enableItemsDropping = 0; briefing = 0; debriefing = 0; @@ -53,9 +53,14 @@ wreckRemovalMaxTime = 360; disableRandomization[] = {"All"}; #include "Configs\CfgTraderMissions.hpp" +#include "Configs\CfgMissions.hpp" +#include "Configs\CfgMissionsTasks.hpp" #include "Configs\cfgCrafting.hpp" #include "Configs\cfgPricing.hpp" +#include "Configs\CfgDynamicHUD.hpp" + #include "Configs\CfgEpochClient.hpp" + #include "Configs\CfgMasterLoop.hpp" #include "Configs\CfgBaseBuilding.hpp" #include "Configs\CfgSnapChecks.hpp" @@ -63,6 +68,13 @@ disableRandomization[] = {"All"}; #include "Configs\CfgActionMenu\CfgActionMenu_core.hpp" #include "Configs\CfgEpochConfiguration.hpp" #include "Configs\CfgClientFunctions.hpp" +#include "Configs\CfgObjectInteractions.hpp" +#include "Configs\CfgItemInteractions.hpp" +#include "Configs\CfgSay3Dhandler.hpp" +#include "Configs\CfgSwitchMovehandler.hpp" + +// A3 specific configs +#include "Configs\CfgSounds.hpp" #include "Configs\CfgFunctions.hpp" #include "Configs\CfgRemoteExec.hpp" diff --git a/Sources/epoch_server/build.hpp b/Sources/epoch_server/build.hpp index a5bcef9e..5f31ef30 100644 --- a/Sources/epoch_server/build.hpp +++ b/Sources/epoch_server/build.hpp @@ -1 +1 @@ -build=440; +build=560; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf index 8daa955f..da505aa2 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_sapperObjs.sqf */ private["_safeUnits"]; params [["_bomb",objNull], "_player", ["_token","",[""]], "_unit", ["_killUnit",false]]; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf index 23b9d030..11480643 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf @@ -10,21 +10,23 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_say3D.sqf */ private["_range", "_nearBy", "_sound"]; -params ["_player",["_target",objNull],["_soundIndex",-1], ["_token","",[""]]]; +params [["_player",objNull,[objNull]],["_target",objNull],["_sound","",[""]], ["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; -if (isNull _target) exitWith {}; +if (isNull _target) then {_target = _player}; -_sound = EPOCH_sounds param [_soundIndex,-1]; -if !(_sound isEqualTo -1) then { - _range = getNumber(configFile >> "CfgSay3Dhandler" >> _sound >> "distance"); - _nearBy = _target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]; - { - if (isPlayer _x) then { - [_target,_sound] remoteExec ['say3D',_x]; - } - }forEach (_nearBy - [_player]); //_this select 0 == the caller, play the sound already locally! +_say3dsoundsConfig = 'CfgSay3Dhandler' call EPOCH_returnConfig; +_selectedSound = (_say3dsoundsConfig >> _sound); +if (isClass _selectedSound) then { + // get nearby players based on range + _range = getNumber(_selectedSound >> "distance"); + _nearBy = (_target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]) select {isPlayer _x}; + // send sound to everyone except caller. + _targets = _nearBy - [_player]; + if !(_targets isEqualTo []) then { + [_target, _sound] remoteExec ['say3D',_targets]; + }; }; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf index f107293f..4b54a599 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf @@ -10,29 +10,29 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_handle_switchMove.sqf + + Usage: + [_player,"moveName","token",_target] call EPOCH_server_handle_switchMove; + or + [_player,"moveName","token"] call EPOCH_server_handle_switchMove; */ private["_range", "_move", "_nearBy"]; -params ["_target","_moveCase",["_token","",[""]]]; -if !([_target, _token] call EPOCH_server_getPToken) exitWith{}; -_range = 0; -_move = ""; -// TODO configize +params [["_player",objNull,[objNull]],["_move","",[""]],["_token","",[""]],["_target",objNull]]; -switch (_moveCase) do { - case 1: { - _range = 1000; - _move = "AovrPercMrunSrasWrflDf"; - }; - case 2: { - _range = 1000; - _move = "epoch_unarmed_jump"; +if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; +if (_move isEqualTo "") exitWith {}; +if (isNull _target) then {_target = _player}; + +_switchMovehandlerConfig = 'CfgSwitchMovehandler' call EPOCH_returnConfig; +_selectedMove = (_switchMovehandlerConfig >> _move); +if (isClass _selectedMove) then { + // get nearby players based on range + _range = getNumber(_selectedMove >> "distance"); + _nearBy = (_target nearEntities [["Epoch_Male_F","Epoch_Female_F","LandVehicle","Ship","Air","Tank"], _range]) select {isPlayer _x}; + // send move to everyone except caller. + _targets = _nearBy - [_player]; + if !(_targets isEqualTo []) then { + [_target, _move] remoteExec ['switchMove',_targets]; }; }; - -if (_range > 0 && _move != "") then { - _nearBy = _target nearEntities [["Epoch_Male_F","Epoch_Female_F"], _range]; - { - [_target, _move] remoteExec ['switchMove',_x]; - }forEach (_nearBy - [_target]); //_target == the caller, already plays the animation locally! -}; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf new file mode 100644 index 00000000..4ccfe374 --- /dev/null +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf @@ -0,0 +1,24 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Trigger an antagonist on a client. Option to add antagonist object to target as a variable. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf +*/ +params ["_target","_antagonistClass","_doVariable","_player","_token"]; +diag_log format["Epoch: ADMIN: Attempting antagonist (%3) trigger from %1 for %2.", getPlayerUID _player, _target, _antagonistClass]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; + +if(!isNull _target)then{ +diag_log format["Epoch: ADMIN: Calling antagonist (%3) trigger from %1 for %2.", getPlayerUID _player, _target, _antagonistClass]; + +[_antagonistClass, _target, _doVariable] remoteExec ["EPOCH_unitSpawn",_target]; +//if(!isNull _player)then{hideObjectGlobal _player;};//Do elsewhere, allow revival +}; diff --git a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf index b145d6cb..597b4bad 100644 --- a/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf +++ b/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerEvent.sqf */ params ["_target", "_type"]; if (!isNull _target) then { @@ -37,5 +37,8 @@ if (!isNull _target) then { case "PHANTOM": { "PHANTOM" remoteExec ['EPOCH_unitSpawnIncrease',_target]; }; + case "Zombie": { + ["EPOCH_RyanZombie_1",12] remoteExec ['EPOCH_unitSpawnIncrease',_target]; + }; }; }; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf index 3382aca8..9ad4fe21 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf @@ -10,24 +10,25 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_saveBuilding.sqf */ private ["_class","_worldspace","_objHiveKey","_animPhases","_VAL","_return","_objSlot"]; _return = false; if !(isNull _this) then { _objSlot = _this getVariable["BUILD_SLOT", -1]; if (_objSlot != -1) then{ - _this setDamage 0; - _class = typeOf _this; - _worldspace = [(getposATL _this call EPOCH_precisionPos), vectordir _this, vectorup _this]; + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _this setDamage 0; + _class = typeOf _this; + _worldspace = [(getposATL _this call EPOCH_precisionPos), vectordir _this, vectorup _this]; _objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _objSlot]; _animPhases = []; { _animPhases pushBack (_this animationPhase _x) - } foreach (getArray(configFile >> "CfgVehicles" >> _class >> "persistAnimations")); + } foreach (getArray(_cfgBaseBuilding >> _class >> "persistAnimations")); _VAL = [_class, _worldspace, _this getVariable["EPOCH_secureStorage", "-1"], _this getVariable["BUILD_OWNER", "-1"], _this getVariable["TEXTURE_SLOT", 0], _animPhases]; ["Building", _objHiveKey, EPOCH_expiresBuilding, _VAL] call EPOCH_fnc_server_hiveSETEX; - _return = true; + _return = true; }; }; _return diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf index 1bff3168..a4a58287 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_changeOwner.sqf */ private ["_result","_newOwner"]; params ["_object","_newOwnerObj"]; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf index fcb8aae7..70155baf 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf @@ -10,12 +10,13 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf */ _maxTTL = parseNumber EPOCH_expiresBuilding; -_config = 'CfgEpochClient' call EPOCH_returnConfig; -_buildingJammerRange = getNumber(_config >> "buildingJammerRange"); +_cfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_buildingJammerRange = getNumber(_cfgEpochClient >> "buildingJammerRange"); if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; _VAL = ["", [], "", "", 0, []]; @@ -73,17 +74,17 @@ for "_i" from 0 to _this do { if (isClass (configFile >> "CfgVehicles" >> _class) && (_damage < 1) && !(_class isKindOf 'Constructions_lockedstatic_F')) then { _baseObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; - - _baseObj setposATL _location; _baseObj setVectorDirAndUp _worldspace; + _baseObj setposATL _location; + // spawn additional object for trap - _ammoClass = (configFile >> "CfgVehicles" >> _class >> "ammoClass"); + _ammoClass = (_cfgBaseBuilding >> _class >> "ammoClass"); if(isText _ammoClass) then { _ammoClass = getText _ammoClass; _ammoObj = createVehicle [_ammoClass, [0,0,0], [], 0, "CAN_COLLIDE"]; - _ammoObj setposATL _location; _ammoObj setVectorDirAndUp _worldspace; + _ammoObj setposATL _location; _baseObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj]; }; @@ -98,7 +99,7 @@ for "_i" from 0 to _this do { { _baseObj animate [_x, _anims param [_forEachIndex,0], true] - } foreach(getArray(configFile >> "CfgVehicles" >> _class >> "persistAnimations")); + } foreach(getArray(_cfgBaseBuilding >> _class >> "persistAnimations")); }; // Handle Jammers and create marker if EPOCH_SHOW_JAMMERS set true. @@ -123,7 +124,7 @@ for "_i" from 0 to _this do { if (_textureSlot != 0) then { // get texture path from index - _color = getArray (configFile >> "CfgVehicles" >> _class >> "availableTextures"); + _color = getArray (_cfgBaseBuilding >> _class >> "availableTextures"); if !(_color isEqualTo []) then { _baseObj setObjectTextureGlobal [0, (_color select _textureSlot)]; _baseObj setVariable ["TEXTURE_SLOT", _textureSlot, true]; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf index c4192878..c865ee2d 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf Example: // Client RE @@ -25,15 +25,15 @@ Returns: NOTHING */ -private ["_playerUID","_counter","_objSlot","_buildingJammerRange","_current_crypto","_cIndex","_vars","_storSlot","_playerCryptoLimit","_config"]; +private ["_playerUID","_counter","_objSlot","_buildingJammerRange","_current_crypto","_cIndex","_vars","_storSlot","_playerCryptoLimit","_cfgEpochClient"]; params [["_object",objNull],"_player","_maintCount",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; if (isNull _object) exitWith{}; if (_player distance _object > 20) exitWith{}; -_config = 'CfgEpochClient' call EPOCH_returnConfig; -_buildingJammerRange = getNumber(_config >> "buildingJammerRange"); +_cfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig; +_buildingJammerRange = getNumber(_cfgEpochClient >> "buildingJammerRange"); if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; _playerUID = getPlayerUID _player; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf index bcdfe3cc..790b6dfe 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_paintBUILD.sqf */ -private["_color", "_class", "_currentTextureSlot", "_slot", "_worldspace", "_objHiveKey", "_VAL", "_return", "_playerUID", "_objSlot"]; +private["_cfgBaseBuilding","_color", "_class", "_currentTextureSlot", "_slot", "_worldspace", "_objHiveKey", "_VAL", "_return", "_playerUID", "_objSlot"]; params [["_object",objNull],"_textureSlot","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; @@ -28,7 +28,8 @@ if (_objSlot != -1) then { if (_textureSlot != _currentTextureSlot) then { _class = typeOf _object; - _color = getArray(configFile >> "CfgVehicles" >> _class >> "availableTextures"); + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _color = getArray(_cfgBaseBuilding >> _class >> "availableTextures"); if !(_color isEqualTo[]) then { _object setObjectTextureGlobal[0, (_color select _textureSlot)]; _object setVariable["TEXTURE_SLOT", _textureSlot, true]; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf index 3f69e399..8e90e520 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf */ -private["_vehSlot", "_gwh", "_wepsItemsCargo", "_magsAmmoCargo", "_objTypes", "_objQty", "_magazine", "_weapon", "_suppressor", "_laser", "_optics", "_arrCount", "_magazineName", "_magazineSize", "_qty", "_objType", "_inventory", "_posWH", "_nearbyWH", "_removeParts", "_isTemporary", "_storageSlot"]; +private["_cfgBaseBuilding","_vehSlot", "_gwh", "_wepsItemsCargo", "_magsAmmoCargo", "_objTypes", "_objQty", "_magazine", "_weapon", "_suppressor", "_laser", "_optics", "_arrCount", "_magazineName", "_magazineSize", "_qty", "_objType", "_inventory", "_posWH", "_nearbyWH", "_removeParts", "_isTemporary", "_storageSlot"]; params ["_building","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; @@ -21,8 +21,8 @@ if (_player distance _building > 20) exitWith{}; // TODO add group check here since this should only be removed by group or owner of pole _objType = typeOf _building; - -_isTemporary = getNumber(configFile >> "CfgVehicles" >> _objType >> "isTemporary"); +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_isTemporary = getNumber(_cfgBaseBuilding >> _objType >> "isTemporary"); // check that object has building or storage slot _vehSlot = _building getVariable["BUILD_SLOT", -1]; @@ -30,7 +30,7 @@ _storageSlot = _building getVariable["STORAGE_SLOT", "ABORT"]; if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ - _removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType >> "removeParts"); + _removeParts = getArray(_cfgBaseBuilding >> _objType >> "removeParts"); if !(_removeParts isEqualTo []) then { _posWH = getPosATL _player; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf index 01053d6d..808f1af9 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf */ -private["_objSlot", "_findnextslot", "_worldspace", "_objHiveKey", "_VAL", "_config", "_slot", "_storageObj", "_pos", "_buildClass", "_newVehicle", "_textureSlot", "_staticClass", "_playerUID", "_oemType"]; +private["_staticClassConfig","_objSlot", "_findnextslot", "_worldspace", "_objHiveKey", "_VAL", "_cfgBaseBuilding", "_slot", "_storageObj", "_pos", "_buildClass", "_newVehicle", "_textureSlot", "_staticClass", "_playerUID", "_oemType"]; params ["_vehicle", "_player", ["_token","",[""]]]; if (isNull _vehicle) exitWith{}; @@ -23,12 +23,11 @@ _playerUID = getPlayerUID _player; if (!isNull ropeAttachedTo _vehicle) exitWith{}; _oemType = typeOf _vehicle; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +_staticClassConfig = (_cfgBaseBuilding >> _oemType >> "staticClass"); +if (isText _staticClassConfig) then { -_config = (configFile >> "CfgVehicles" >> _oemType >> "staticClass"); -if (isText _config) then { - - _staticClass = getText(_config); - + _staticClass = getText(_staticClassConfig); if (_staticClass isKindOf "Buildable_Storage" || _staticClass isKindOf "Constructions_lockedstatic_F") then{ if !(EPOCH_StorageSlots isEqualTo[]) then { @@ -38,14 +37,10 @@ if (isText _config) then { // Secure and insecure storage _vehiclePos = getposATL _vehicle; - _vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle]; - deleteVehicle _vehicle; - _storageObj = createVehicle[_staticClass, [0,0,0], [], 0, "CAN_COLLIDE"]; - _storageObj setposATL _vehiclePos; - _storageObj setVectorDirAndUp _vectorDirAndUp; + _storageObj = [_staticClass,_vehicle] call EPOCH_swapBuilding; - if (getNumber(configFile >> "CfgVehicles" >> _staticClass >> "isSecureStorage") == 1) then{ + if (getNumber(_cfgBaseBuilding >> _staticClass >> "isSecureStorage") == 1) then{ _storageObj setVariable["EPOCH_Locked", false, true]; }; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf index 76dd0e00..b9cd636d 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf @@ -10,27 +10,23 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simToStatic.sqf */ -private ["_worldspace","_newObj","_class","_objSlot","_config","_lastPosition","_currentPosition","_entities"]; +private ["_newObj","_class","_objSlot","_cfgBaseBuilding","_lastPosition","_currentPosition","_entities"]; _entities = allMissionObjects "Constructions_modular_F"; { _lastPosition = _x getVariable["LAST_POS", []]; _currentPosition = getposATL _x; if (_lastPosition isEqualTo _currentPosition) then { - _config = (configFile >> "CfgVehicles" >> (typeOf _x) >> "staticClass"); - if (isText(_config)) then { - _class = getText(_config); + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _staticClassConfig = (_cfgBaseBuilding >> (typeOf _x) >> "staticClass"); + if (isText(_staticClassConfig)) then { + _class = getText(_staticClassConfig); _objSlot = _x getVariable["BUILD_SLOT", -1]; if (_objSlot != -1) then { - _worldspace = [_currentPosition,(vectordir _x),(vectorup _x)]; - deleteVehicle _x; - _newObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + _newObj = [_class,_x] call EPOCH_swapBuilding; _newObj setVariable ["BUILD_SLOT",_objSlot,true]; _newObj call EPOCH_server_buildingInit; - - _newObj setposATL (_worldspace select 0); - _newObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; }; }; }; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf index 7aad4355..06f5c804 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf */ -private["_cfgClass", "_worldspace", "_newObj", "_return", "_class", "_oemType", "_config", "_object", "_objSlot", "_damage", "_color", "_textureSlot"]; +private["_classConfig","_cfgClass", "_newObj", "_return", "_class", "_oemType", "_cfgBaseBuilding", "_object", "_objSlot", "_damage", "_color", "_textureSlot"]; params [["_object",objNull,[objNull]],["_static",false,[false]]]; _return = _object; _objSlot = _object getVariable ["BUILD_SLOT", -1]; @@ -23,26 +23,26 @@ if (_objSlot != -1) then { _cfgClass = "simulClass"; }; _oemType = typeOf _object; - - _config = (configFile >> "CfgVehicles" >> _oemType >> _cfgClass); - if (isText _config) then { - _class = getText(_config); + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _classConfig = (_cfgBaseBuilding >> _oemType >> _cfgClass); + if (isText _classConfig) then { + _class = getText(_classConfig); if (_oemType != _class) then { _textureSlot = _object getVariable["TEXTURE_SLOT", 0]; _damage = damage _object; - _worldspace = [getposATL _object,vectordir _object,vectorup _object]; - deleteVehicle _object; + //_worldspace = [getposATL _object,vectordir _object,vectorup _object]; + //_newObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + _newObj = [_class,_object] call EPOCH_swapBuilding; - _newObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; _newObj setVariable ["BUILD_SLOT",_objSlot,true]; _newObj call EPOCH_server_buildingInit; if (_textureSlot != 0) then { // get texture path from index - _color = getArray(configFile >> "CfgVehicles" >> _class >> "availableTextures"); + _color = getArray(_cfgBaseBuilding >> _class >> "availableTextures"); if !(_color isEqualTo[]) then { _newObj setObjectTextureGlobal[0, (_color select _textureSlot)]; _newObj setVariable["TEXTURE_SLOT", _textureSlot, true]; @@ -50,16 +50,16 @@ if (_objSlot != -1) then { }; // spawn additional object for trap - _ammoClass = (configFile >> "CfgVehicles" >> _class >> "ammoClass"); + _ammoClass = (_cfgBaseBuilding >> _class >> "ammoClass"); if (isText _ammoClass) then { _ammoClass = getText _ammoClass; _ammoObj = createVehicle [_ammoClass, [0,0,0], [], 0, "CAN_COLLIDE"]; - _ammoObj setposATL (_worldspace select 0); - _ammoObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; + //_ammoObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; + //_ammoObj setposATL (_worldspace select 0); + _ammoObj attachTo [_newObj,[0,0,0]]; _newObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj]; }; - _newObj setposATL (_worldspace select 0); - _newObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; + _newObj setDamage _damage; _return = _newObj; }; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf index 61478a42..6edbd6f3 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf @@ -4,29 +4,29 @@ Contributors: Description: - Building - Unsupported building check + Building - Unsupported building check (unused ATM) Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_unsuppported.sqf */ -private["_worldspace", "_newObj", "_class", "_objSlot", "_config", "_isSupported", "_lastPosition", "_currentPosition", "_objectPos"]; +private["_simulClassConfig","_worldspace", "_newObj", "_class", "_objSlot", "_cfgBaseBuilding", "_isSupported", "_lastPosition", "_currentPosition", "_objectPos"]; if !(isNil "EPOCH_unsupportedCheckRunning") exitWith{ diag_log "UnsupportedCheck: Already running aborted"}; EPOCH_unsupportedCheckRunning = true; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + // Check unsupported _start = diag_tickTime; _simulatedCount = 0; _stableCount = 0; { if (!isNull _x) then { - - _config = (configFile >> "CfgVehicles" >> (typeOf _x) >> "simulClass"); - if (isText(_config)) then { - + _simulClassConfig = (_cfgBaseBuilding >> (typeOf _x) >> "simulClass"); + if (isText(_simulClassConfig)) then { _objectPos = getPosASL _x; _isSupported = isTouchingGround _x; if (!_isSupported) then { @@ -35,18 +35,14 @@ _stableCount = 0; }; }; if (!_isSupported) then { - _class = getText(_config); + _class = getText(_simulClassConfig); _objSlot = _x getVariable["BUILD_SLOT", -1]; if (_objSlot != -1) then { - _vDir = vectordir _x; - _vUP = vectorup _x; _playerUID = _x getVariable["BUILD_OWNER", "-1"]; _slot = _x getVariable["EPOCH_secureStorage", "-1"]; - deleteVehicle _x; - _newObj = createVehicle[_class, _objectPos, [], 0, "CAN_COLLIDE"]; + // _newObj = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + _newObj = [_class,_x] call EPOCH_swapBuilding; _newObj setVariable["BUILD_SLOT", _objSlot, true]; - _newObj setposASL _objectPos; - _newObj setVectorDirAndUp[_vDir, _vUP]; _newObj setVariable["BUILD_OWNER", _playerUID, true]; _newObj setVariable["EPOCH_secureStorage", _slot]; _newObj setVelocity[0, 0, -1]; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf index d1883ad5..5af9fc9c 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf @@ -10,54 +10,34 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_bases/EPOCH_server_upgradeBUILD.sqf */ -private["_worldspace", "_class", "_newObj", "_objHiveKey", "_VAL", "_return", "_upgrade", "_objSlot", "_objType"]; +private ["_cfgBaseBuilding","_class","_newObj","_upgrade","_objSlot","_objType","_upgrades"]; params ["_object","_player",["_index",0],["_token","",[""]]]; if (isNull _object) exitWith{}; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; _objSlot = _object getVariable["BUILD_SLOT", -1]; +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; if (_objSlot != -1) then { - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - - _upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding"); + _upgrades = getArray(_cfgBaseBuilding >> (typeOf _object) >> "upgradeBuilding"); if !(_upgrades isEqualTo []) then { - _upgrade = _upgrades param [_index,[]]; - - _objectPos = getposATL _object; - _worldspace = [(_objectPos call EPOCH_precisionPos), vectordir _object, vectorup _object]; - - deleteVehicle _object; _class = _upgrade select 0; - - _newObj = createVehicle [_class, _objectPos, [], 0, "CAN_COLLIDE"]; + _newObj = [_class,_object] call EPOCH_swapBuilding; _newObj setVariable ["BUILD_SLOT",_objSlot,true]; _newObj call EPOCH_server_buildingInit; - _newObj setposATL _objectPos; - _newObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; - _newObj call EPOCH_saveBuilding; }; } else { _objType = typeOf _object; - if (getNumber(configFile >> "CfgVehicles" >> _objType >> "isTemporary") == 1) then{ - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - - _upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding"); + if (getNumber(_cfgBaseBuilding >> _objType >> "isTemporary") == 1) then{ + _upgrades = getArray(_cfgBaseBuilding >> (typeOf _object) >> "upgradeBuilding"); if !(_upgrades isEqualTo []) then { - _upgrade = _upgrades param [_index,[]]; - - _worldspace = [getposATL _object, vectordir _object, vectorup _object]; - deleteVehicle _object; _class = _upgrade select 0; - - _newObj = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"]; - _newObj setposATL(_worldspace select 0); - _newObj setVectorDirAndUp[(_worldspace select 1), (_worldspace select 2)]; + _newObj = [_class,_object] call EPOCH_swapBuilding; }; }; }; diff --git a/Sources/epoch_server/compile/epoch_bases/EPOCH_swapBuilding.sqf b/Sources/epoch_server/compile/epoch_bases/EPOCH_swapBuilding.sqf new file mode 100644 index 00000000..744f79e6 --- /dev/null +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_swapBuilding.sqf @@ -0,0 +1,24 @@ +// _newObj = [_class,_object] call EPOCH_swapBuilding; +private ["_objectPos","_newObj"]; +params [["_class",""],["_object",objNull],["_method",0]]; +_newObj = objNull; +if (!isNull _object && !(_class isEqualTo "")) then { + _objectPos = getPosWorld _object; + _newObj = createVehicle [_class, ASLtoAGL _objectPos, [], 0, "CAN_COLLIDE"]; + if (!isNull _newObj) then { + _object hideObjectGlobal true; + + switch (_method) do { + case 0: { + _newObj setVectorDirAndUp [vectordir _object, vectorup _object]; + _newObj setPosWorld _objectPos; + }; + case 1: { + _newObj attachTo [_object,[0,0,0]]; + }; + }; + + deleteVehicle _object; + }; +}; +_newObj diff --git a/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf b/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf index cd4f23f8..54c83542 100644 --- a/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf +++ b/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_createGroup.sqf Return: diff --git a/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf b/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf index 44929bfd..46e3af33 100644 --- a/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf +++ b/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_deleteGroup.sqf */ private ["_groupID","_return"]; params ["_player",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf b/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf index 3bb51c92..562e44a9 100644 --- a/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf +++ b/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_invitePlayer.sqf */ params ["_playerUID","_var1","_var2","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; diff --git a/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf b/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf index 61c1a4d8..cfb40500 100644 --- a/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf +++ b/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_updatePlayerGroup.sqf */ private ["_groupID","_selectedPlayerUID","_addOrRemove","_modOrMember","_modOrMemberRevert","_response","_contentArray","_modArray","_memberArray","_selectedPlayerName","_group","_removePlayerArray","_modOrMemberArray","_found"]; diff --git a/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf b/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf index d20a7db9..c161a543 100644 --- a/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf +++ b/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_group/EPOCH_server_upgradeGroup.sqf */ private ["_playerCryptoLimit","_current_crypto","_groupMemberPUID","_return","_newGroupSize","_upgradePrice","_contentArray","_found","_cIndex","_vars","_response"]; params ["_groupID","_player",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf index adb39a5d..5c725e2f 100644 --- a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf +++ b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_destroyTrash.sqf */ private["_target", "_eventArray", "_triggerType", "_nearPlayers", "_posWH", "_item", "_config", "_object", "_player", "_payout", "_type"]; params ["_object","_type","_player",["_token","",[""]]]; @@ -35,6 +35,8 @@ if (!(_object isKindOf "All")) then { if (isClass _config) then { if (random 1 < getNumber(_config >> "chance")) then { [_item, _payout] call EPOCH_serverLootObject; + _errorMsg = "You found something!"; + [_errorMsg, 5] remoteExec ['Epoch_message',_player]; }; }; diff --git a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf index 512118f8..ea0ba80a 100644 --- a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf +++ b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_knockDownTree.sqf */ private["_posWH", "_item", "_nearbyWH", "_payout", "_object", "_type", "_player"]; params ["_object","_type","_player",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf index 492467ac..331460bd 100644 --- a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf +++ b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootAnimal.sqf */ private["_item", "_class", "_pos", "_objectClass"]; params ["_object","_player",["_token","",[""]]]; @@ -19,17 +19,21 @@ if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; if !(isNull _object) then { _pos = getPosATL _object; _objectClass = typeOf _object; - + _classOverride = getText (configFile >> "CfgVehicles" >> _objectClass >> "epochLootClass"); + if (_classOverride != "") then { + _objectClass = _classOverride; + }; deleteVehicle _object; - _item = createVehicle["groundWeaponHolder", [0,0,0], [], 0.0, "CAN_COLLIDE"]; _item setPosATL _pos; - _class = "SeaFood"; _config = configFile >> "CfgMainTable" >> _objectClass; if (isClass(_config)) then { _class = _objectClass; }; - [_item, _class] call EPOCH_serverLootObject; + [_item, _class, true] call EPOCH_serverLootObject; + + _errorMsg = "You found something!"; + [_errorMsg, 5] remoteExec ['Epoch_message',_player]; }; true diff --git a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf index 947e507d..563558c0 100644 --- a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf +++ b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_lootContainer.sqf */ private ["_class","_pos","_dir","_object","_whConfig","_type","_lootClasses","_player","_maxLoot","_triggerType","_eventArray","_animated","_config"]; params ["_object","_player",["_token","",[""]]]; @@ -45,8 +45,12 @@ if !(_object in EPOCH_cleanupQueue) then { }; [_object, _type] call EPOCH_serverLootObject; + _errorMsg = "You found something!"; + [_errorMsg, 5] remoteExec ['Epoch_message',_player]; } else { [_object, "Food"] call EPOCH_serverLootObject; + _errorMsg = "You found Food!"; + [_errorMsg, 5] remoteExec ['Epoch_message',_player]; }; if ((random 1) <= EPOCH_antagonistChanceLoot) then{ diff --git a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf index 9db77c86..4ffdd3d8 100644 --- a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf +++ b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_mineRocks.sqf */ private["_posWH", "_item", "_nearbyWH", "_rock"]; params ["_object","_index","_player",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf index 993fd20b..015d0a5f 100644 --- a/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf +++ b/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_looting/EPOCH_server_spawnBoatLoot.sqf */ private ["_item","_marker"]; { diff --git a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf index adf85075..5f410290 100644 --- a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf +++ b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf @@ -1,7 +1,7 @@ /* - Author: Aaron Clark - EpochMod.com + Author: Andrew Gregory - EpochMod.com - Contributors: + Contributors: Aaron Clark Description: Creates air drop crate @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_airDropCrate.sqf */ private ["_pos","_axeCrate","_axeChute","_crateSmoke","_axeLight"]; params ["_object","_player",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf index 9d445df6..0c332737 100644 --- a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf +++ b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf @@ -1,7 +1,7 @@ /* - Author: Aaron Clark - EpochMod.com + Author: Andrew Gregory - EpochMod.com - Contributors: + Contributors: Aaron Clark Description: Creates helicopter air drop @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createAirDrop.sqf */ private ["_playerOwner","_objType","_obj","_grp","_unitPos","_driver","_unit"]; params ["_player",["_token","",[""]],"_pos"]; diff --git a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf index 61da45db..6be1a7c2 100644 --- a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf +++ b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf @@ -1,82 +1,201 @@ /* - Author: Aaron Clark - EpochMod.com + Author: Andrew Gregory - EpochMod.com - Contributors: + Contributors: Aaron Clark Description: - Server side spawing of shipwreck loots + Server side spawing of mission objects Licence: Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_createObject.sqf */ -private ["_grp","_driver","_gunner","_commander","_crew","_missionVehList","_obj"]; -params ["_player",["_token","",[""]],"_objType","_clearCargo","_pos",["_objSpc","CAN_COLLIDE"],"_driverType","_gunnerType","_commanderType","_crewType"]; +private ["_grp","_driver","_gunner","_commander","_crew","_missionVehList","_obj","_cfgPricing","_objClass","_vehicles","_backpacks","_weapons","_items","_magazines","_vehAllowed"]; +params ["_player",["_token","",[""]],["_objArr",[]],["_pos",[]],["_wepHolder",objNull],["_clearCargo",true],["_objSpc","CAN_COLLIDE"],["_driverType",""],["_gunnerType",""],["_commanderType",""],["_crewType",""],["_doDamage",false]]; -if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; +if !([_player,_token]call EPOCH_server_getPToken) exitWith {}; +if (typeName _objArr != "ARRAY")then{_objArr = [_objArr];}; +if (count _objArr < 1) exitWith {}; -if (count _this != 11) exitWith {diag_log format ["Epoch: Debug: %1 exit with %2",__FILE__,_this]}; +diag_log format["Epoch: Attempt Create Object: %1 for %2",_objArr, name _player]; -_missionVehList = ["O_UAV_01_F","B_UAV_01_F","I_Boat_Armed_01_minigun_F","B_Heli_Transport_01_F",""]; -if!(_objType in _missionVehList)exitWith{}; +_cfgPricing = 'CfgPricing' call EPOCH_returnConfig; +_allowedVehicleListName = ["allowedVehiclesList","allowedVehiclesList_CUP"] select EPOCH_modCUPVehiclesEnabled; +_allowedVehiclesList = getArray(configFile >> "CfgEpoch" >> worldName >> _allowedVehicleListName); +//diag_log format ["DEBUG: Allowed Vehs: %1",_allowedVehiclesList]; +_vehicles = []; +_backpacks = []; +_weapons = []; +_items = []; +_magazines = []; -if !(_pos isEqualTo []) then { - _pos = (getPosATL _player) findEmptyPosition [1,250,_objType]; - if (count _pos < 1) then { - _pos = getPosATL _player; +if (_pos isEqualTo []) then { + _pos = (getPosATL _player); +}; + +if(count _pos < 3)then{ +_pos set [2,0]; +}; + + +//Sort Object Array +{ + + //Weapons / Items + if(isClass (configFile >> "CfgWeapons" >> _x))then{ + + diag_log format["Epoch: Server_CreateObject: %1 Weapon / Item Found",_x]; + + if("ItemCore" in ([configFile >> "CfgWeapons" >> _x, true] call BIS_fnc_returnParents))then{ + _items pushBack _x; + }else{ + _weapons pushBack _x; + }; + + }; + + //Magazines + if(isClass (configFile >> "CfgMagazines" >> _x))then{ + + diag_log format["Epoch: Server_CreateObject: %1 Magazine Found",_x]; + + if("ItemCore" in ([configFile >> "CfgMagazines" >> _x, true] call BIS_fnc_returnParents))then{ + _items pushBack _x; + }else{ + _magazines pushBack _x; + }; + + }; + + //BackPacks / Vehicles + if(isClass (configFile >> "CfgVehicles" >> _x))then{ + if("Bag_Base" in ([configFile >> "CfgVehicles" >> _x, true] call BIS_fnc_returnParents))then{ + _backpacks pushBack _x; + }else{ + + _vehAllowed = true; + + //If not destroying vehcile then check if allowed + if!(_doDamage)then{ + _veh = _x; + _vehAllowed = false; + { + if (_veh in _x)then{_vehAllowed = true;}; + } forEach _allowedVehiclesList; + }; + + + if(_vehAllowed)then{ + //If not destroying (mission object) then find safe position + if!(_doDamage)then{ + if(_x isKindOf "CAR" || _x isKindOf "AIR")then{ + _pos = [position _player, 0, 250, 6, 0, 1000, 0] call BIS_fnc_findSafePos; + _pos = _pos findEmptyPosition [1,75,_x]; + }; + + if(_x isKindOf "SHIP")then{ + _pos = [position _player, 0, EPOCH_dynamicVehicleArea, 10, 1, 1000, 0] call BIS_fnc_findSafePos; + _pos = _pos findEmptyPosition [1,75,_x]; + }; + }; + + _vehicles pushBack [_x,_pos]; + }; + }; }; + +}forEach _objArr; + +//Weapons, ammo, items, backpacks +if(count _weapons > 0 || count _items > 0 || count _magazines > 0 || count _backpacks > 0)then{ + +if(isNull _wepHolder)then{ +_wepHolder = createVehicle["groundWeaponHolder", _pos, [], 0.0, "CAN_COLLIDE"]; }; -//_doOwner = _this select 10; -_obj = createVehicle [_objType, _pos, [], 0, _objSpc]; -_obj call EPOCH_server_setVToken; -addToRemainsCollector[_obj]; -_obj disableTIEquipment true; -_obj allowdamage false; -_obj setPosATL _pos; -_obj setFuel 1; -//if (_doOwner) then {_obj setOwner (owner _player)}; + //Weapons + if(count _weapons > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Weapon Spawn",_x]; + _wepHolder addWeaponCargoGlobal [_x,1]; + } forEach _weapons; + }; + + //Items + if(count _items > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Item Spawn",_x]; + _wepHolder addItemCargoGlobal [_x,1]; + } forEach _items; + }; + + //Magazines + if(count _magazines > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Magazine Spawn",_x]; + _wepHolder addMagazineCargoGlobal [_x,1]; + } forEach _magazines; + }; + + //Backpacks + if(count _backpacks > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Backpack Spawn",_x]; + _wepHolder addBackPackCargoGlobal [_x,1]; + }forEach _backpacks; + }; -if (_clearCargo) then { - clearWeaponCargoGlobal _obj; - clearItemCargoGlobal _obj; - clearMagazineCargoGlobal _obj; - clearBackpackCargoGlobal _obj; }; -if (_driverType != "" || _gunnerType != "" ||_commanderType != "") then { - _grp = createGroup RESISTANCE; -}; +if(count _vehicles > 0)then{ + { + diag_log format["Epoch: Server_CreateObject: %1 Vehicle Spawn",_x]; + //Need to create slot to createVehicle a persistent Epoch vehicle. + //_obj = [_x select 0, _x select 1, random 360, true, (EPOCH_storedVehicleCount + 1), _player, "CAN_COLLIDE", !_clearCargo, false] call EPOCH_spawn_vehicle; + + _obj = createVehicle[(_x select 0), (_x select 1), [], 15, "CAN_COLLIDE"]; + + _obj allowdamage false; -if (_driverType != "") then { - _driver = _grp createUnit[_driverType, position _obj, [], 1, "CAN_COLLIDE"]; - _driver assignAsDriver _obj; - _driver moveInDriver _obj; - //if (_doOwner) then {_driver setOwner (owner _player)}; -}; + if (_driverType != "" || _gunnerType != "" || _commanderType != "") then { + _grp = createGroup RESISTANCE; + }; -if (_gunnerType != "") then { - _gunner = _grp createUnit[_gunnerType, position _obj, [], 1, "CAN_COLLIDE"]; - _gunner assignAsGunner _obj; - _gunner moveInGunner _obj; - //if (_doOwner) then {_gunner setOwner (owner _player)}; -}; + if (_driverType != "") then { + _driver = _grp createUnit[_driverType, position _obj, [], 1, "CAN_COLLIDE"]; + _driver assignAsDriver _obj; + _driver moveInDriver _obj; + //if (_doOwner) then {_driver setOwner (owner _player)}; + }; -if (_commanderType != "") then { - _commander = _grp createUnit[_commanderType, position _obj, [], 1, "CAN_COLLIDE"]; - _commander assignAsCommander _obj; - _commander moveInCommander _obj; - //if (_doOwner) then {_commander setOwner (owner _player)}; -}; + if (_gunnerType != "") then { + _gunner = _grp createUnit[_gunnerType, position _obj, [], 1, "CAN_COLLIDE"]; + _gunner assignAsGunner _obj; + _gunner moveInGunner _obj; + //if (_doOwner) then {_gunner setOwner (owner _player)}; + }; -if (_crewType != "") then { - _crew = _grp createUnit[_crewType, position _obj, [], 1, "CAN_COLLIDE"]; - _crew assignAsCargo _obj; - _crew moveInCargo _obj; - //if (_doOwner) then {_crew setOwner (owner _player)}; + if (_commanderType != "") then { + _commander = _grp createUnit[_commanderType, position _obj, [], 1, "CAN_COLLIDE"]; + _commander assignAsCommander _obj; + _commander moveInCommander _obj; + //if (_doOwner) then {_commander setOwner (owner _player)}; + }; + + if (_crewType != "") then { + _crew = _grp createUnit[_crewType, position _obj, [], 1, "CAN_COLLIDE"]; + _crew assignAsCargo _obj; + _crew moveInCargo _obj; + //if (_doOwner) then {_crew setOwner (owner _player)}; + }; + _obj allowdamage true; + + if(_doDamage)then{_obj setDamage 1;}; + + }forEach _vehicles; + + }; -_obj allowdamage true; -diag_log format["Epoch: Spawned Object %1(%5) for %3(%4) at %2",_objType,_pos,name _player,owner _player,owner _obj]; diff --git a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf index 7fcbf0cd..9cdae134 100644 --- a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf +++ b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_fillContainer.sqf */ private["_player","_container","_clearFirst","_pos","_chance","_weps","_mags","_items"]; params ["_player",["_token","",[""]],["_container",objNull,[objNull]],["_clearFirst",false],["_chance",25]]; diff --git a/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf new file mode 100644 index 00000000..cb44bb47 --- /dev/null +++ b/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf @@ -0,0 +1,30 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Init and pass vars to mission / task control fsm. fsm will dispose if not being used, this function will restart it as required. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_missions/EPOCH_Server_missionComms.sqf +*/ +params["_plyr","_token",["_cmd",-1],["_tmpVar", nil],{"_missionIndex",-1],["_item",objNull],["_pos"],[]]; + +if !([_plyr, _token] call EPOCH_server_getPToken) exitWith{}; + +if(isNil "missionControlHandle")then{ +missionControlHandle = [] execFSM "x\addons\a3_epoch_server\system\mission_control.fsm"; +diag_log format ["MISSION CONTROL INIT: %1",missionControlHandle]; + + //Catch first instant if fsm slow to start - may not be necessary. + ["_clientCmd",[_plyr, _cmd, _missionIndex,_item,_pos]] spawn{ + waitUntil {!(isNil "missionControlHandle")}; + missionControlHandle setFSMVariable [_this select 0, _this select 1]; + }; +}else{ +missionControlHandle setFSMVariable ["_clientCmd",[_plyr, _cmd, _missionIndex,_item,_pos]]; +}; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf index a2f83006..4c092ee4 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_savePlayer.sqf */ params ["_player","",["_token","",[""]]]; if([_player,_token] call EPOCH_server_getPToken)then{ diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf index 001d5753..bbe26f9a 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf */ private["_arr", "_dead", "_isMale", "_medical", "_apperance", "_class", "_vars", "_hitpoints", "_deadPlayer", "_response", "_playerUID", "_playerObj"]; params [["_playerObj",objNull]]; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf index 06f53d76..30e9cfc3 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf */ private ["_triggerType","_veh","_bankBalance","_bankData","_response","_playerUID","_pos","_cIndex","_vars","_current_crypto"]; params ["_playerObj","_killer","_playerName",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayerDetonate.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayerDetonate.sqf new file mode 100644 index 00000000..ed11124c --- /dev/null +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayerDetonate.sqf @@ -0,0 +1,22 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: Aaron Clark + + Description: + Detonate a boss sapper bomb at player position. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_playerDeathOptions.sqf +*/ +params ["_player", "_token"]; +diag_log format["Epoch: ADMIN: Attempting player detonate on %1.", getPlayerUID _player]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; + +_pos = getPosATL _player; +_bomb = createVehicle["SapperB_Charge_Ammo", _pos, [], 0, "CAN_COLLIDE"]; +_bomb setDamage 1; +hideObjectGlobal _player; \ No newline at end of file diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf index 94e4fb6f..435aa0f2 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_equippedItem.sqf */ private["_channelID", "_selectedChannel"]; params ["_class","_status","_player"]; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf index 46075438..c3f2d87a 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf @@ -1,7 +1,7 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: He-Man Description: Player Login @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf */ private ["_arr","_uniform","_class","_vest","_vars","_canBeRevived","_dir","_location","_group","_apperance","_goggles","_headgear","_backpack","_weaponsAndItems","_linkedItems","_normalMagazines","_itemsInContainers","_weaponsInContainers","_wMags","_wMagsArray","_equipped","_weapon","_type","_attachments","_currWeap","_found","_playerGroupArray","_playerGroup","_response","_reject","_fnc_addItemToX","_worldspace","_prevInstance","_medical","_server_vars","_hitpoints","_deadPlayer","_alreadyDead","_newPlyr","_playerUID","_serverSettingsConfig","_player","_instanceID","_playerNetID"]; @@ -137,7 +137,7 @@ if (_this isEqualType []) then { _player setPosATL _location; - _newPlyr = _group createUnit[_class, _location, [], 0, "CAN_COLLIDE"]; + _newPlyr = _group createUnit[_class, _location, [], 0, "CAN_COLLIDE"]; // diag_log format["DEBUG: _newPlyr %1 %2 %3",_newPlyr, _location, getPosATL _newPlyr]; if !(isNull _newPlyr) then { @@ -195,7 +195,7 @@ if (_this isEqualType []) then { // Load Apperance END // Load inventory + defaults START - if (count _weaponsAndItems >= 2) then { + if (count _weaponsAndItems >= 3) then { _equipped = _weaponsAndItems select 2; { _weapon = _x deleteAt 0; @@ -208,7 +208,7 @@ if (_this isEqualType []) then { // magazines if (_x isEqualType []) then{ _wMags = true; - _wMagsArray = _x; + _wMagsArray pushback _x; } else { // attachments if (_x != "") then{ @@ -216,12 +216,14 @@ if (_this isEqualType []) then { }; }; } forEach _x; + if (_wMags) then { + { + _newPlyr addMagazine _x; + } foreach _wMagsArray; + }; // add weapon if equiped if (_weapon in _equipped) then { _equipped = _equipped - [_weapon]; - if (_wMags) then { - _newPlyr addMagazine _wMagsArray; - }; if (_weapon != "") then { _newPlyr addWeapon _weapon; }; @@ -239,18 +241,13 @@ if (_this isEqualType []) then { { _newPlyr removeSecondaryWeaponItem _x; } forEach (secondaryWeaponItems _newPlyr); - { _newPlyr addSecondaryWeaponItem _x } forEach _attachments; }; }; - } else { - // overflow need to add these items to storage + }else{ { _newPlyr addItem _x; } forEach _attachments; - if (_wMags) then { - _newPlyr addMagazine _wMagsArray; - }; }; } forEach(_weaponsAndItems select 1); _currWeap = _weaponsAndItems select 0; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf index 9dfd742d..75fb8b14 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf @@ -10,11 +10,10 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_onPlayerDisconnect.sqf */ private ["_return"]; params ["_player","_id","_uid","_name"]; - _return = false; if (!isNull _player) then { if (_player getVariable["SETUP", false]) then { @@ -27,4 +26,6 @@ if (!isNull _player) then { deleteVehicle _player; }; }; +_uid call EPOCH_server_disconnect; +['Disconnected', [_uid, _name]] call EPOCH_fnc_server_hiveLog; _return diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_playerSetVariable.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_playerSetVariable.sqf new file mode 100644 index 00000000..e69c9e71 --- /dev/null +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_playerSetVariable.sqf @@ -0,0 +1,18 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Call setVariable on specific client. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_playerSetVariable.sqf +*/ +params ["_player","_token","_obj", "_var", "_value", "_local"]; +if !([_player,_token]call EPOCH_server_getPToken)exitWith{}; +diag_log format["Epoch: ADMIN: Attempting Set variable [%2,%3,%4] on %1.", _obj, _var, _value,_local]; +[_obj, _var,_value,_local] remoteExec ['EPOCH_fnc_playerSetVariable', _obj]; \ No newline at end of file diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf index 34c46837..c4fceee6 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_respawnPlayer.sqf */ private["_defaultUniform", "_class", "_vest", "_dir", "_location", "_playerObj"]; params ["_playerObj",["_token","",[""]],"_isMale"]; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf index 5ff795d9..7385e5c6 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf @@ -1,7 +1,7 @@ /* Author: Aaron Clark - EpochMod.com - Contributors: + Contributors: He-Man Description: Player Revive @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_revivePlayer.sqf */ private["_player", "_playerUID", "_items", "_class", "_dir", "_location", "_type", "_weapon", "_attachments", "_currWeap", "_itemSlot", "_itemqtys", "_goggles", "_headgear", "_vest", "_backpack", "_uniform", "_weapons", "_magazinesAmmo", "_itemsplayer", "_weaponsplayer", "_group", "_primaryWeapon", "_secondaryWeapon", "_attachment", "_equipped", "_wMags", "_playerGroup", "_droppedWeapons", "_newPlyr", "_token", "_owner", "_reviver"]; params ["_player","_reviver",["_token","",[""]]]; @@ -19,6 +19,24 @@ if !([_reviver, _token] call EPOCH_server_getPToken) exitWith{}; if (isNull _player) exitWith{}; if (_player distance _reviver > 20) exitWith{}; +_fnc_addItemToX = { + private ["_itemSlot","_itemqtys","_newPlyr"]; + _newPlyr = _this select 0; + { + _itemSlot = _forEachIndex; + _itemqtys = _x select 1; + { + for "_i" from 1 to (_itemqtys select _forEachIndex) do { + switch _itemSlot do { + case 0: { _newPlyr addItemToUniform _x }; + case 1: { _newPlyr addItemToVest _x }; + case 2: { _newPlyr addItemToBackpack _x }; + }; + }; + } forEach(_x select 0); + } forEach (_this select 1); +}; + if (!local _player) then { _playerUID = getPlayerUID _player; if (!isNil "_playerUID" && !alive _player) then { @@ -52,7 +70,10 @@ if (!local _player) then { _primaryWeapon = ""; _secondaryWeapon = ""; + _wh = nearestObjects[_player, ["WeaponHolderSimulated"], 12]; +/* _droppedWeapons = []; + reverse _wh; { { _droppedWeapons pushBack _x; @@ -63,8 +84,30 @@ if (!local _player) then { }; } forEach (weaponsItemsCargo _x); - } forEach nearestObjects[_player, ["WeaponHolderSimulated"], 12]; + } foreach _wh; +*/ + _droppedPrimary = []; + _droppedSecondary = []; + _droppedWeapons = []; + _deleteprimary = []; + _deletesecondary = []; + reverse _wh; + { + _currwh = _x; + { + _type = getNumber(configfile >> "cfgweapons" >> (_x select 0) >> "type"); + switch _type do { + case 1: {_droppedPrimary = _x; _primaryWeapon = _x select 0; _deleteprimary = [_currwh]}; + case 4: {_droppedSecondary = _x; _secondaryWeapon = _x select 0;_deletesecondary = [_currwh]}; + }; + } forEach (weaponsItemsCargo _x); + } foreach _wh; + { + if (!isnull _x) then {deletevehicle _x}; + } foreach (_deleteprimary+_deletesecondary); + if !(_droppedPrimary isequalto []) then {_droppedWeapons pushback _droppedPrimary}; + if !(_droppedSecondary isequalto []) then {_droppedWeapons pushback _droppedSecondary}; // diag_log ["DEBUG: _droppedWeapons %1", _droppedWeapons]; _itemsplayer = [getItemCargo(uniformContainer _player), getItemCargo(vestContainer _player), getItemCargo(backpackContainer _player)]; @@ -133,36 +176,38 @@ if (!local _player) then { }; // Weapons - if (count _weapons >= 2) then { - + if (count _weapons >= 3) then { _equipped = _weapons select 2; { - _weapon = _x select 0; + _weapon = _x deleteAt 0; _type = getNumber(configfile >> "cfgweapons" >> _weapon >> "type"); - _attachments = []; + _wMags = false; + _wMagsArray = []; // suppressor, laser, optics - for "_a" from 1 to 3 do { - _attachment = _x select _a; - if (_attachment != "") then { - _attachments pushBack _attachment; + { + // magazines + if (_x isEqualType []) then{ + _wMags = true; + _wMagsArray pushback _x; + } else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; + }; }; + } forEach _x; + if (_wMags) then { + { + _newPlyr addMagazine _x; + } foreach _wMagsArray; }; - _wMags = (count _x) == 5; - // add weapon if equiped - if (_weapon in _equipped) then { _equipped = _equipped - [_weapon]; - - if (_wMags) then { - _newPlyr addMagazine(_x select 4); - }; - if (_weapon != "") then { _newPlyr addWeapon _weapon; }; - switch _type do { case 1: { // primary removeAllPrimaryWeaponItems _newPlyr; @@ -180,22 +225,14 @@ if (!local _player) then { { _newPlyr addSecondaryWeaponItem _x }forEach _attachments; }; }; - } else { + }else{ { _newPlyr addItem _x; }forEach _attachments; - - if (_wMags) then { - _newPlyr addMagazine(_x select 4); - }; }; - } forEach (_weapons select 1); - - _currWeap = (_weapons select 0); - +// _currWeap = (_weapons select 0); }; - // Linked items { if (_x in ["Binocular","Rangefinder"]) then { @@ -205,46 +242,15 @@ if (!local _player) then { }; }forEach _items; - // add items to containers - { - _itemSlot = _forEachIndex; - _itemqtys = _x select 1; - { - for "_i" from 1 to (_itemqtys select _forEachIndex) do { - switch _itemSlot do { - case 0: { _newPlyr addItemToUniform _x }; - case 1: { _newPlyr addItemToVest _x }; - case 2: { _newPlyr addItemToBackpack _x }; - }; - //diag_log format["DEBUG additemtoVest: %1", _x]; - }; - - }forEach (_x select 0); - }forEach _itemsplayer; + [_newPlyr, _itemsplayer] call _fnc_addItemToX; // add weapons to containers - { - _itemSlot = _forEachIndex; - _itemqtys = _x select 1; - { - for "_i" from 1 to (_itemqtys select _forEachIndex) do { - switch _itemSlot do { - case 0: { _newPlyr addItemToUniform _x }; - case 1: { _newPlyr addItemToVest _x }; - case 2: { _newPlyr addItemToBackpack _x }; - }; - //diag_log format["DEBUG additemtoVest: %1", _x]; - }; - - }forEach (_x select 0); - }forEach _weaponsplayer; + [_newPlyr, _weaponsplayer] call _fnc_addItemToX; // Add magazines - { - _newPlyr addMagazine _x; - //diag_log format["DEBUG addMagazine: %1", _x]; - }forEach _magazinesAmmo; + {_newPlyr addMagazine _x;}forEach _magazinesAmmo; + // Load inventory + defaults END // Final Push _token = _newPlyr call EPOCH_server_setPToken; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf index 3e48f483..84caaf00 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf */ private["_return", "_pos", "_medical", "_playerUID", "_weapons", "_vars", "_itemsplayer", "_weaponsplayer", "_appearance", "_player", "_dmg", "_allowSave", "_cIndex", "_Svars", "_current_crypto", "_group", "_revive", "_vehiclePlyr","_server_vars"]; params ["_player", "_vars"]; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf index efbdf467..52b6c2f9 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_storeCrypto.sqf */ private["_bankBalance", "_bankBalanceBefore", "_current_crypto", "_transferBankBalance", "_transferBankBalanceBefore", "_return", "_transferBankData", "_transferTargetUID", "_transferResponse", "_transferAmountIn", "_transferAmountOut", "_transferBalance", "_transferTarget", "_cIndex", "_vars", "_bankData", "_tradeArray", "_playerUID", "_response"]; params ["_player","_tradeArray",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf index 2f5c902b..1e855625 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_unpackBackpack.sqf */ private ["_wHPos","_wH","_nearByHolder"]; params ["_item","_player",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf index cf4b89cc..c3c32ab3 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_localCleanup.sqf Example: _object(s) call EPOCH_localCleanup; @@ -43,3 +43,4 @@ if !(_this isEqualType []) then { }]; }; }forEach _this; +addToRemainsCollector _this; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf index 29a45eea..dce2e32d 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_precisionPos.sqf */ private["_low"]; _low = _this apply {_x - (_x % 1)}; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf index 698de8f6..7a3bb1f9 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_returnConfig.sqf */ private["_return", "_config"]; _return = (configfile >> _this); diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf index f953ed5a..ce92226c 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_serverCommand.sqf */ params ["_command","_param1","_param2","_param3"]; switch (_command) do { diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf index f7a9bdfe..20f283db 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf @@ -10,10 +10,10 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_serverLootObject.sqf */ private["_randomItemArray", "_quan", "_randomLootClass", "_randomItem", "_lootPaid", "_mags", "_lootItemWeightedArray", "_lootItemArray", "_weightedItemArray", "_exit", "_maxPayout", "_lootTable", "_lootTableArray", "_weightedArray"]; -params ["_object","_type"]; +params ["_object","_type",["_forceSpawn",false]]; _debug = true; _pricingConfig = 'CfgPricing' call EPOCH_returnConfig; _lootTableClass = ["CfgLootTable","CfgLootTable_CUP"] select EPOCH_modCUPWeaponsEnabled; @@ -44,7 +44,7 @@ if !(isNull _object) then{ while {_loop} do { switch _type do { case "item": { - if (isClass (_pricingConfig >> _randomItem)) then { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { _object additemCargoGlobal [_randomItem, _quan]; } else { if (_debug) then {diag_log format["DEBUG: suppress spawn of %1 does not have price.",_randomItem]}; @@ -52,7 +52,7 @@ if !(isNull _object) then{ _loop = false; }; case "magazine": { - if (isClass (_pricingConfig >> _randomItem)) then { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { if (_randomizeMagazineAmmoCount) then { // spawn a single Magazine with a random ammo count _magazineSize = getNumber (configFile >> "CfgMagazines" >> _randomItem >> "count"); @@ -67,7 +67,7 @@ if !(isNull _object) then{ _loop = false; }; case "backpack": { - if (isClass (_pricingConfig >> _randomItem)) then { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { _object addBackpackCargoGlobal [_randomItem, _quan]; } else { if (_debug) then {diag_log format["DEBUG: suppress spawn of %1 does not have price.",_randomItem]}; @@ -75,7 +75,7 @@ if !(isNull _object) then{ _loop = false; }; case "weapon": { - if (isClass (_pricingConfig >> _randomItem)) then { + if (isClass (_pricingConfig >> _randomItem) || _forceSpawn) then { _object addWeaponCargoGlobal [_randomItem, _quan]; // only spawn mags that have prices _mags = getArray (configFile >> "CfgWeapons" >> _randomItem >> "magazines") select {isClass (_pricingConfig >> _x)}; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf index 4cdcd95d..8f2af882 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf @@ -10,6 +10,6 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_buildingInit.sqf */ _this addMPEventHandler["MPKilled", { _this call EPOCH_server_save_killedBuilding; }]; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf index 38825415..36579043 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_createTeleport.sqf */ private ["_class","_debug1","_lightLocation","_light","_deSimulate","_pos","_dir","_ep","_useWorldPos","_pos1","_markerName","_loadBaseTemplateConfig","_pro2","_veh2","_enterClass","_exitClass","_pro1","_veh1","_debugLocation","_debug","_protection","_config","_loadBaseTemplateConfig"]; @@ -86,14 +86,13 @@ _config = configFile >> "CfgEpoch"; _ep allowDamage false; if (_dir isEqualType []) then{ - _ep setposATL _pos; _ep setVectorDirAndUp _dir; + _ep setposATL _pos; } else { _ep setDir _dir; _ep setposATL _pos; }; - if (_deSimulate) then{ _ep enableSimulationGlobal false; }; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf new file mode 100644 index 00000000..3ff8053c --- /dev/null +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf @@ -0,0 +1,66 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Create map marker for everyone, group or individual. + + Parameter(s): + _this select 0: ARRAY - [Target Type 0-Player 1-Group Members 2-All players 3-Multiple custom players, Object(s) - Player, Group, Array of Players or markerName for option 3] + _this select 1-9: STRING(S) - Marker parameters. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_makeMarker.sqf +*/ +params ["_trgt","_mPos",["_mShape","ICON"],["_mType","mil_dot"],["_mText",""],["_mColor","ColorBlack"],["_mSize",[0.7,0.7]],"_mBrush","_mDir","_mAlpha",["_mrkrName",""]]; +private ["_trgtType","_trgtObj"]; +diag_log format["Epoch: ADMIN: Creating marker at %1 called by %2.", _mPos, _trgt]; +if(count _trgt < 2)exitWith{}; +_trgtType = _trgt select 0; +_trgtObj = _trgt select 1; +if(_mrkrName == "")then{_mrkrName = str(_trgtObj) + str(diag_tickTime);}; + +switch _trgtType do { + + case 0: { + if(isPlayer _trgtObj)then{ + [_trgtObj,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_trgtObj]; + }; + }; + + case 1: { + if!(isNull _trgtObj)then{ + { + [_x,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_x]; + }foreach (units group _trgtObj); + }; + }; + + case 2: { + if(_trgtObj == "")then{_trgtObj=diag_tickTime;}; + _mrkr = createMarker [_mrkrName, _mPos]; + _mrkr setMarkerShape _mShape; + _mrkr setMarkerType _mType; + if!(_mText == "")then{_mrkr setMarkerText _mText;}; + _mrkr setMarkerColor _mColor; + _mrkr setMarkerSize _mSize; + if!(isNil "_mBrush")then{_mrkr setMarkerBrush _mBrush;}; + if!(isNil "_mDir")then{_mrkr setMarkerDir _mDir;}; + if!(isNil "_mAlpha")then{_mrkr setMarkerAlpha _mAlpha;}; + }; + + case 3: { + if(isArray _trgtObj && count _trgtObj > 0)then{ + { + [_x,_mPos,_mShape,_mType,_mColor,_mSize,_mBrush,_mDir,_mText,_mAlpha,_mrkrName] remoteExec ['EPOCH_makeMarker',_x]; + }foreach _trgtObj; + }; + }; + + + default {diag_log format["Epoch: ADMIN: Marker failed at %1 called by %2.", _mPos, _trgt];}; +}; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf new file mode 100644 index 00000000..09573f70 --- /dev/null +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf @@ -0,0 +1,54 @@ +/* + Author: Andrew Gregory - EpochMod.com + + Contributors: + + Description: + Delete map marker. + + Parameter(s): + _this select 0: OBJECT (Player) / ARRAY - Players. + _this select 1: INTEGER - 0 - Player Only, 1 - Player Group, 2 - Everyone, 3 - Custom Array of players. + _this select 2: STRING - Marker Name + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_removeMarker.sqf +*/ +params [["_trgtObj",[]],["_trgtType",0],["_mrkrName",""]]; +diag_log format["Epoch: ADMIN: Deleting marker %1 | %2.", _mrkrName, _trgtObj]; + + +switch _trgtType do { + + case 0: { + if(isPlayer _trgtObj)then{ + [_mrkrName] remoteExec ['EPOCH_removeMarker',_trgtObj]; + }; + }; + + case 1: { + if!(isNull _trgtObj)then{ + { + [_mrkrName] remoteExec ['EPOCH_removeMarker',_x]; + }foreach (units group _trgtObj); + }; + }; + + case 2: { + deleteMarker _mrkrName; + }; + + case 3: { + if(isArray _trgtObj && count _trgtObj > 0)then{ + { + [_mrkrName] remoteExec ['EPOCH_removeMarker',_x]; + }foreach _trgtObj; + }; + }; + + + default {diag_log format["Epoch: ADMIN: Marker delete failed at %1 called by %2.", _mPos, _trgt];}; +}; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf index b6223b2f..2bd6eef0 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf @@ -10,6 +10,6 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_storageInit.sqf */ _this addMPEventHandler["MPKilled", { _this call EPOCH_server_save_killedStorage }]; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf index 9a9fd463..c2f5def6 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_teleportPlayer.sqf */ private ["_tp"]; params ["_player","_teleporter",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf index 4daa3eb4..cc541df0 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_traderKilled.sqf */ private ["_marker","_slot","_objHiveKey"]; params ["_trader","_player"]; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf index 9bc13901..7ae5605b 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_server_vehicleInit.sqf */ _this addMPEventHandler["MPKilled", { _this call EPOCH_server_save_killedVehicle }]; _this addMPEventHandler["MPHit", { EPOCH_saveVehQueue pushBackUnique (_this select 0) }]; diff --git a/Sources/epoch_server/compile/epoch_server/EPOCH_weightedArray.sqf b/Sources/epoch_server/compile/epoch_server/EPOCH_weightedArray.sqf index 29d7b0ed..3cbc00f0 100644 --- a/Sources/epoch_server/compile/epoch_server/EPOCH_weightedArray.sqf +++ b/Sources/epoch_server/compile/epoch_server/EPOCH_weightedArray.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_server/EPOCH_weightedArray.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_server/EPOCH_weightedArray.sqf */ private["_return","_lootTableArray","_weightedArray"]; params ["_keyName","_configName","_arrayName"]; @@ -20,16 +20,22 @@ if(_return isEqualTo[]) then { _weightedArray = []; { if(_x isEqualType []) then { - _lootTableArray pushBack(_x select 0); - for "_i" from 1 to(_x select 1) do { - _weightedArray pushBack _forEachIndex; + _x params ["_tname","_tqty"]; + if (!(_tname isEqualTo "Zombie") || (_tname isEqualTo "Zombie") && EPOCH_mod_Ryanzombies_Enabled) then { + _lootTableArray pushBack _tname; + for "_i" from 1 to _tqty do { + _weightedArray pushBack _forEachIndex; + }; }; } else { - _lootTableArray pushBack _x; - _weightedArray pushBack _forEachIndex; + if (!(_x isEqualTo "Zombie") || (_x isEqualTo "Zombie") && EPOCH_mod_Ryanzombies_Enabled) then { + _lootTableArray pushBack _x; + _weightedArray pushBack _forEachIndex; + }; }; }forEach getArray(configFile >> _configName >> _keyName >> _arrayName); _return = [_lootTableArray,_weightedArray]; missionNamespace setVariable[format["EPOCH_LT_%1_%2_%3",_configName,_keyName,_arrayName],_return]; + diag_log format["EPOCH_LT_%1_%2_%3 = %4",_configName,_keyName,_arrayName,_return]; }; _return diff --git a/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf b/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf index 5eb1940e..aebd706b 100644 --- a/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf +++ b/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf */ private ["_arr","_currentStock","_limit","_toBeRemoved","_marker","_staticTrader","_agent","_class","_pos","_randomAIUniform","_dir","_objHiveKey","_response","_schedule","_home","_work","_traderSlotIndex","_staticTradersArray","_staticTradersArrCount","_aiTables","_serverSettingsConfig","_storedVehicleLimit"]; params [["_maxTraderLimit",0]]; @@ -73,6 +73,18 @@ for "_i" from 0 to _maxTraderLimit do { if (_x isKindOf "Air" || _x isKindOf "Ship" || _x isKindOf "LandVehicle" || _x isKindOf "Tank") then { if (EPOCH_storedVehicleCount <= _storedVehicleLimit) then { EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + _currentStock; + + // Count how many of this vehicle are in stock at any trader. + if !(_x in EPOCH_traderStoredVehicles) then { + EPOCH_traderStoredVehicles pushBack _x; + EPOCH_traderStoredVehiclesCnt pushBack _currentStock; + } else { + _indexStock = EPOCH_traderStoredVehicles find _x; + if (_indexStock != -1) then { + _existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock; + EPOCH_traderStoredVehiclesCnt set [_indexStock, (_existingStock + _currentStock)]; + }; + }; } else { _toBeRemoved pushBack _forEachIndex; }; @@ -142,7 +154,7 @@ for "_i" from 0 to _maxTraderLimit do { _agent addEventHandler ["Killed", { _this call EPOCH_server_traderKilled; }]; if !(EPOCH_forceStaticTraders) then { - [_agent, _home, _work] execFSM "\x\addons\a3_epoch_server\system\Trader_brain.fsm"; + [_agent, _home, _work] execFSM "\epoch_server\system\Trader_brain.fsm"; }; _agent setVariable ["AI_SLOT", _i, true]; @@ -177,6 +189,18 @@ for "_i" from 0 to _maxTraderLimit do { if (_x isKindOf "Air" || _x isKindOf "Ship" || _x isKindOf "LandVehicle" || _x isKindOf "Tank") then { if (EPOCH_storedVehicleCount <= _storedVehicleLimit) then { EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + _currentStock; + + // Count how many of this vehicle are in stock at any trader. + if !(_x in EPOCH_traderStoredVehicles) then { + EPOCH_traderStoredVehicles pushBack _x; + EPOCH_traderStoredVehiclesCnt pushBack _currentStock; + } else { + _indexStock = EPOCH_traderStoredVehicles find _x; + if (_indexStock != -1) then { + _existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock; + EPOCH_traderStoredVehiclesCnt set [_indexStock, (_existingStock + _currentStock)]; + }; + }; } else { _toBeRemoved pushBack _forEachIndex; }; diff --git a/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf b/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf index 286c39f7..37882762 100644 --- a/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf +++ b/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf @@ -10,84 +10,66 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_traders/EPOCH_server_spawnTraders.sqf */ -private ["_home","_work","_pos","_marker","_buildingPositions","_startTime","_endTime","_schedule","_agent","_slot","_objHiveKey","_buildingWork","_homeBuildingPositions","_acceptableBlds","_buildings","_randomAIUniform","_randomAIClass","_building","_position","_aiTables","_spawnCount","_usedBuildings"]; - -// TODO: configize -_aiTables = ["U_OG_leader", "U_C_Poloshirt_stripped", "U_C_Poloshirt_blue", "U_C_Poloshirt_burgundy", "U_C_Poloshirt_tricolour", "U_C_Poloshirt_salmon", "U_C_Poloshirt_redwhite", "U_C_Poor_1", "U_C_WorkerCoveralls", "U_C_Journalist", "U_C_Scientist", "U_OrestesBody"]; - +private ["_pos","_marker","_buildingWork","_home","_work","_startTime","_endTime","_schedule","_agent","_slot","_objHiveKey","_buildingHome","_buildings","_randomAIUniform","_aiClass","_homes","_position","_spawnCount","_config","_aiTables","_acceptableBlds","_traderHomes","_usedBuildings","_checkBuilding"]; _spawnCount = count EPOCH_TraderSlots; - -//diag_log format["DEBUG: Tradercount EPOCH_TraderSlots: %1", _spawnCount]; - +_config = (configFile >> "CfgEpoch" >> worldName); +_aiTables = getArray(_config >> "traderUniforms"); +_acceptableBlds = getArray(_config >> "traderBlds"); +_traderHomes = getArray(_config >> "traderHomes"); _usedBuildings = []; +_checkBuilding = { + private ["_return"]; + params ["_building","_aiClass"]; + _return = !(_building in _usedBuildings); + if !(_return) exitWith {_return}; + _return = !((_building buildingPos -1) isEqualTo []); + if !(_return) exitWith {_return}; + _return = (_building nearEntities [_aiClass, 50]) isEqualTo []; + _return +}; for "_i" from 1 to _spawnCount do { - _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 20, 0, 4000, 0] call BIS_fnc_findSafePos; - // only proceed if two params otherwise BIS_fnc_findSafePos failed and may spawn in air if (count _position == 2) then { _randomAIUniform = selectRandom _aiTables; - _randomAIClass = "C_man_1"; // static for now - - _building = nearestBuilding _position; - if !(_building in _usedBuildings) then { - _home = getPosATL _building; - _pos = _home; - _usedBuildings pushBack _building; - - _homeBuildingPositions = _building buildingPos -1; - if !(_homeBuildingPositions isEqualTo []) then { - _home = selectRandom _homeBuildingPositions; - }; - _acceptableBlds = getArray(configFile >> "CfgEpoch" >> worldName >> "traderBlds"); - - _buildings = nearestObjects[_home, _acceptableBlds, 500]; + _aiClass = "C_man_1"; + _homes = (nearestObjects[_position, _traderHomes, 500]) select {[_x,_aiClass] call _checkBuilding}; + if !(_homes isEqualTo []) then { + _buildingHome = selectRandom _homes; + _usedBuildings pushBack _buildingHome; + _buildings = (nearestObjects[_buildingHome, _acceptableBlds, 500]) select {[_x,_aiClass] call _checkBuilding}; if !(_buildings isEqualTo []) then { - _buildingWork = selectRandom _buildings; - if !(_buildingWork in _usedBuildings) then { - _usedBuildings pushBack _buildingWork; - _work = getPosATL _buildingWork; - - _buildingPositions = _buildingWork buildingPos -1; - if !(_buildingPositions isEqualTo []) then { - _work = selectRandom _buildingPositions; - }; - - _startTime = floor(random 16); - _endTime = _startTime + 8; - _schedule = [_startTime, _endTime]; - if (daytime > (_schedule select 0) && daytime < (_schedule select 1)) then { - _pos = _work; - }; - - if (_pos nearEntities[_randomAIClass, 50] isEqualTo []) then { - - _agent = createAgent[_randomAIClass, _pos, [], 0, "CAN_COLLIDE"]; - addToRemainsCollector[_agent]; - _agent addUniform _randomAIUniform; - _slot = EPOCH_TraderSlots deleteAt 0; - _agent setVariable["AI_SLOT", _slot, true]; - _agent setVariable["AI_ITEMS", EPOCH_starterTraderItems, true]; - _objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot]; - - ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, EPOCH_starterTraderItems] call EPOCH_fnc_server_hiveSETEX; - _agent addEventHandler["Killed", { _this call EPOCH_server_traderKilled; }]; - - if !(EPOCH_forceStaticTraders) then { - [_agent, _home, [_work, _schedule]] execFSM "\x\addons\a3_epoch_server\system\Trader_brain.fsm"; - }; - - ["AI", _objHiveKey, [_randomAIClass, _home, [_work, _schedule]]] call EPOCH_fnc_server_hiveSET; - if (EPOCH_SHOW_TRADERS) then { - _marker = createMarker[str(_agent), (_pos)]; - _marker setMarkerShape "ICON"; - _marker setMarkerType "mil_dot"; - _marker setMarkerColor "ColorKhaki"; - _agent setVariable["MARKER_REF", _marker]; - }; - }; + _usedBuildings pushBack _buildingWork; + _home = selectRandom (_buildingHome buildingPos -1); + _work = selectRandom (_buildingWork buildingPos -1); + _startTime = floor(random 16); + _endTime = _startTime + 8; + _schedule = [_startTime, _endTime]; + _pos = _home; + if (daytime > _startTime && daytime < _endTime) then { + _pos = _work; + }; + _agent = createAgent[_aiClass, _pos, [], 0, "CAN_COLLIDE"]; + addToRemainsCollector[_agent]; + _agent addUniform _randomAIUniform; + _slot = EPOCH_TraderSlots deleteAt 0; + _agent setVariable["AI_SLOT", _slot, true]; + _agent setVariable["AI_ITEMS", EPOCH_starterTraderItems, true]; + _objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot]; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, EPOCH_starterTraderItems] call EPOCH_fnc_server_hiveSETEX; + _agent addEventHandler["Killed", { _this call EPOCH_server_traderKilled; }]; + if !(EPOCH_forceStaticTraders) then { + [_agent, _home, [_work, _schedule]] execFSM "\epoch_server\system\Trader_brain.fsm"; + }; + ["AI", _objHiveKey, [_aiClass, _home, [_work, _schedule]]] call EPOCH_fnc_server_hiveSET; + if (EPOCH_SHOW_TRADERS) then { + _marker = createMarker[str(_agent), (_pos)]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerColor "ColorKhaki"; + _agent setVariable["MARKER_REF", _marker]; }; }; }; diff --git a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf new file mode 100644 index 00000000..373e3203 --- /dev/null +++ b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf @@ -0,0 +1,44 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Mod - Server side effect crypto main function + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_effectCrypto.sqf + + Example: + [_player,100] call EPOCH_server_effectCrypto; // adds 100 + [_player,-100] call EPOCH_server_effectCrypto; // removes 100 + + Parameter(s): + _this select 0: OBJECT - player + _this select 1: NUMBER - amount to add to existing crypto + Returns: + MIXED +*/ +private ["_cIndex","_vars","_current_crypto"]; +params [["_player",objNull,[objNull]],["_crypto",0,[0]]]; +if (!isNull _player && isPlayer _player) then { + // get index of custom variable + _cIndex = EPOCH_customVars find "Crypto"; + // get custom variables + _vars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar]; + // select current value + _current_crypto = _vars select _cIndex; + // get min and max limits for selected custom variable + (EPOCH_customVarLimits select _cIndex) params ["_playerCryptoLimitMax","_playerCryptoLimitMin"]; + // add input number to existing variable while keeping it within min and max range. + _current_crypto = ((_current_crypto + _crypto) min _playerCryptoLimitMax) max _playerCryptoLimitMin; + // send final value back to the player + _current_crypto remoteExec ['EPOCH_effectCrypto',_player]; + // set final variable + _vars set[_cIndex, _current_crypto]; + // save modified custom variables array + _player setVariable["VARS", _vars]; +}; diff --git a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf index 7350567c..36cf0845 100644 --- a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf +++ b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeNPCTrade.sqf */ private ["_vehicleSold","_vehHiveKey","_VAL","_makeTradeIn","_vehSlot","_playerNetID","_vehicle","_vehicles","_tradeTotal","_current_crypto","_tradeQtyTotal","_currQty","_qtyIndex","_itemWorth","_item","_itemQty","_position","_foundSmoke","_objOwner","_tmpposition","_lockOwner","_helipad","_helipads","_smoke","_vehicleBought","_playerGroup","_vehObj","_final_location","_group","_wp","_wHPos","_wH","_nearByHolder","_itemTax","_tax","_objHiveKey","_playerCryptoLimit","_config","_cIndex","_vars","_current_cryptoRaw","_aiItems","_itemClasses","_itemQtys","_returnIn","_returnOut","_slot"]; params ["_trader","_itemsIn","_itemsOut","_player",["_token","",[""]]]; @@ -223,7 +223,10 @@ if (_slot != -1) then { _current_crypto = _current_crypto - _itemWorth; _tradeQtyTotal = _tradeQtyTotal + _itemQty; } else { - diag_log "DEBUG: no slots found to spawn vehicle"; + // diag_log "DEBUG: no slots found to spawn vehicle"; + // [_errorMsg, 5] call Epoch_message; + _errorMsg = "Failed to purchase vehicle."; + [_errorMsg, 5] remoteExec ['Epoch_message',_player]; }; }; } else { diff --git a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf index beb43e11..42d9cdb8 100644 --- a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf +++ b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf */ private ["_current_crypto1","_overFlowItems","_playerCryptoLimit","_tradeOffer2","_tradeOffer1","_trade1","_trade2","_cIndex","_player1_vars","_player2_vars","_current_crypto2","_tradeCryptoOffer1","_tradeCryptoOffer2"]; params ["_player1", "_player2","_array","_tradeOffer",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf index 031efecb..46e9a9db 100644 --- a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf +++ b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_takeCrypto.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_makeTrade.sqf */ private ["_cIndex","_vars","_current_crypto","_change","_player","_object","_player1","_player2","_getCrypto"]; params ["_player",["_token","",[""]],"_object"]; diff --git a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf index 933201b8..57606e29 100644 --- a/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf +++ b/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_trading/EPOCH_server_tradeRequest.sqf */ private ["_tradeKey"]; params ["_target","_source",["_token","",[""]]]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf index c68cc2f2..734946fa 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_fill_inventory.sqf */ params ["_vehicle","_type","_class","_qty"]; if (!isNull _vehicle) then { diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf index 556454b4..a30434f6 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf */ -private ["_inventory","_location","_dir","_textures","_colors","_textureSelectionIndex","_selections","_count","_color","_config","_objTypes","_objQty","_wMags","_wMagsArray","_attachments","_magazineSizeMax","_magazineName","_magazineSize","_qty","_objType","_marker","_class_raw","_damage","_class","_worldspace","_wsCount","_vehicle","_arr","_storageSlotIndex","_vehHiveKey","_response","_diag"]; +private ["_inventory","_location","_dir","_textures","_colors","_textureSelectionIndex","_selections","_count","_color","_cfgBaseBuilding","_objTypes","_objQty","_wMags","_wMagsArray","_attachments","_magazineSizeMax","_magazineName","_magazineSize","_qty","_objType","_marker","_class_raw","_damage","_class","_worldspace","_wsCount","_vehicle","_arr","_storageSlotIndex","_vehHiveKey","_response","_diag"]; params [["_maxStorageLimit",0]]; _diag = diag_tickTime; @@ -65,11 +65,11 @@ for "_i" from 1 to _maxStorageLimit do { _location set [2, 0]; }; - _vehicle = createVehicle[_class, _location, [], 0, "CAN_COLLIDE"]; + _vehicle = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"]; if (_dir isEqualType []) then { - _vehicle setposATL _location; _vehicle setVectorDirAndUp _dir; + _vehicle setposATL _location; } else { _vehicle setDir _dir; _vehicle setposATL _location; @@ -86,10 +86,11 @@ for "_i" from 1 to _maxStorageLimit do { if (count _arr >= 5) then { _color = _arr select 4; - _config = configFile >> "CfgVehicles" >> _class >> "availableColors"; - if (isArray _config) then { - _colors = getArray(_config); - _textureSelectionIndex = configFile >> "CfgVehicles" >> _class >> "textureSelectionIndex"; + _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; + _availableColorsConfig = _cfgBaseBuilding >> _class >> "availableColors"; + if (isArray _availableColorsConfig) then { + _colors = getArray(_availableColorsConfig); + _textureSelectionIndex = _cfgBaseBuilding >> _class >> "textureSelectionIndex"; _selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] }; _count = (count _colors)-1; { diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf index 4a61d320..b418b101 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf @@ -10,9 +10,9 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf */ -private ["_location","_class","_dmg","_actualHitpoints","_hitpoints","_textures","_color","_colors","_textureSelectionIndex","_selections","_count","_objTypes","_objQty","_wMags","_wMagsArray","_attachments","_magazineSizeMax","_magazineName","_magazineSize","_qty","_objType","_marker","_found","_vehicle","_allHitpoints","_config","_worldspace","_damage","_arr","_arrNum","_vehicleSlotIndex","_vehHiveKey","_response","_immuneVehicleSpawnTime","_diag","_dataFormat","_dataFormatCount","_allVehicles","_serverSettingsConfig","_simulationHandler","_immuneVehicleSpawn"]; +private ["_availableColorsConfig","_location","_class","_dmg","_actualHitpoints","_hitpoints","_textures","_color","_colors","_textureSelectionIndex","_selections","_count","_objTypes","_objQty","_wMags","_wMagsArray","_attachments","_magazineSizeMax","_magazineName","_magazineSize","_qty","_objType","_marker","_found","_vehicle","_allHitpoints","_cfgEpochVehicles","_worldspace","_damage","_arr","_arrNum","_vehicleSlotIndex","_vehHiveKey","_response","_diag","_dataFormat","_dataFormatCount","_allVehicles","_serverSettingsConfig"]; params [["_maxVehicleLimit",0]]; _diag = diag_tickTime; @@ -20,10 +20,9 @@ _dataFormat = ["", [], 0, [], 0, [], [], 0]; _dataFormatCount = count _dataFormat; EPOCH_VehicleSlots = []; _allVehicles = []; +_vehicleDamages = []; _serverSettingsConfig = configFile >> "CfgEpochServer"; -_simulationHandler = [_serverSettingsConfig, "simulationHandler", false] call EPOCH_fnc_returnConfigEntry; -_immuneVehicleSpawn = [_serverSettingsConfig, "immuneVehicleSpawn", false] call EPOCH_fnc_returnConfigEntry; for "_i" from 1 to _maxVehicleLimit do { _vehicleSlotIndex = EPOCH_VehicleSlots pushBack str(_i); @@ -56,209 +55,203 @@ for "_i" from 1 to _maxVehicleLimit do { _location = (_location select 0) vectorAdd (_location select 1); }; - EPOCH_VehicleSlots deleteAt _vehicleSlotIndex; - // temp for changes in class names _found = ["O_Heli_Transport_04_F","O_Heli_Transport_04_bench_F","O_Heli_Transport_04_box_F","O_Heli_Transport_04_covered_F","B_Heli_Transport_03_unarmed_F","O_Truck_03_covered_F"] find _class; if (_found != -1) then { _class = ["O_Heli_Transport_04_EPOCH","O_Heli_Transport_04_bench_EPOCH","O_Heli_Transport_04_box_EPOCH","O_Heli_Transport_04_covered_EPOCH","B_Heli_Transport_03_unarmed_EPOCH","O_Truck_03_covered_EPOCH"] select _found; }; - _vehicle = createVehicle [_class, _location, [], 0, "CAN_COLLIDE"]; - _allVehicles pushBack _vehicle; - _vehicle call EPOCH_server_setVToken; - _vehicle setVectorDirAndUp _worldspace; - _vehicle setposATL _location; - _vehicle setDamage _damage; - - _allHitpoints = getAllHitPointsDamage _vehicle; - if !(_allHitpoints isEqualTo []) then{ - _actualHitpoints = _allHitpoints select 0; - _hitpoints = _arr select 3; - if ((count _actualHitpoints) == (count _hitpoints)) then{ - { - _dmg = _hitpoints param [_forEachIndex,0]; - if (_x in ["HitFuel", "HitEngine"]) then { - _dmg = _dmg min 0.9; - }; - _vehicle setHitIndex [_forEachIndex, _dmg]; - } forEach _actualHitpoints; - }; - }; - - if (_immuneVehicleSpawn) then{ + // spawn vehicle at temp location. + _vehicle = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"]; + if !(isNull _vehicle) then { + // make vehicle immune from damage. _vehicle allowDamage false; - }; - - _vehicle setFuel (_arr select 4); - - _vehicle call EPOCH_server_vehicleInit; - - _config = configFile >> "CfgVehicles" >> _class >> "availableColors"; - if (isArray(_config)) then { - _color = _arr select 7; - _colors = getArray(_config); - _textureSelectionIndex = configFile >> "CfgVehicles" >> _class >> "textureSelectionIndex"; - _selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] }; - _count = (count _colors) - 1; - { - _textures = _colors select 0; - if (_count >= _forEachIndex) then { - _textures = _colors select _forEachIndex; - }; - _vehicle setObjectTextureGlobal [_x, _textures select _color]; - } forEach _selections; - _vehicle setVariable ["VEHICLE_TEXTURE", _color]; - }; - - clearWeaponCargoGlobal _vehicle; - clearMagazineCargoGlobal _vehicle; - clearBackpackCargoGlobal _vehicle; - clearItemCargoGlobal _vehicle; - - _vehicle disableTIEquipment true; - - _vehicle lock true; - - _vehicle setVariable ["VEHICLE_SLOT", str(_i), true]; - - //diag_log format ["FILLING: _vehicle %1 pos: %2", _vehicle, (getPosATL _vehicle)]; - { - _objType = _forEachIndex; - - _objTypes = _x; - _objQty = []; - - if (_objType in [1, 2, 3]) then { - _objTypes = _x select 0; - _objQty = _x select 1; + // store spawned vehicles in array to make one call to remains handler + _allVehicles pushBack _vehicle; + // remove selected slot from array and set on vehicle + EPOCH_VehicleSlots deleteAt _vehicleSlotIndex; + _vehicle setVariable ["VEHICLE_SLOT", str(_i), true]; + // set server side token and init vehicle event handlers. + _vehicle call EPOCH_server_setVToken; + _vehicle call EPOCH_server_vehicleInit; + // set final direction and postion of vehicle + _vehicle setVectorDirAndUp _worldspace; + _vehicle setposATL _location; + // push damage to temp array to apply damage after some delay + _vehicleDamages pushBack [_vehicle,_damage,(_arr select 3)]; + // set fuel level + _vehicle setFuel (_arr select 4); + // apply persistent textures + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _class >> "availableColors"); + if (isArray(_availableColorsConfig)) then { + _color = _arr select 7; + _colors = getArray(_availableColorsConfig); + _textureSelectionIndex = (_cfgEpochVehicles >> _class >> "textureSelectionIndex"); + _selections = if (isArray(_textureSelectionIndex)) then { getArray(_textureSelectionIndex) } else { [0] }; + _count = (count _colors) - 1; + { + _textures = _colors select 0; + if (_count >= _forEachIndex) then { + _textures = _colors select _forEachIndex; + }; + _vehicle setObjectTextureGlobal [_x, _textures select _color]; + } forEach _selections; + _vehicle setVariable ["VEHICLE_TEXTURE", _color]; }; - + // disable thermal imaging equipment + _vehicle disableTIEquipment true; + // lock all vehicles + _vehicle lock true; + // load vehicle inventory + clearWeaponCargoGlobal _vehicle; + clearMagazineCargoGlobal _vehicle; + clearBackpackCargoGlobal _vehicle; + clearItemCargoGlobal _vehicle; { - switch _objType do { - // Weapon cargo - case 0: { - if (_x isEqualType []) then { - if ((count _x) >= 4) then { - - _vehicle addWeaponCargoGlobal[_x deleteAt 0, 1]; - - _attachments = []; - _wMags = false; - _wMagsArray = []; - // suppressor, laser, optics, magazines(array), bipods - { - // magazines - if (_x isEqualType []) then{ - _wMags = true; - _wMagsArray = _x; - } - else { - // attachments - if (_x != "") then{ - _attachments pushBack _x; + _objType = _forEachIndex; + _objTypes = _x; + _objQty = []; + if (_objType in [1, 2, 3]) then { + _objTypes = _x select 0; + _objQty = _x select 1; + }; + { + switch _objType do { + // Weapon cargo + case 0: { + if (_x isEqualType []) then { + if ((count _x) >= 4) then { + _vehicle addWeaponCargoGlobal[_x deleteAt 0, 1]; + _attachments = []; + _wMags = false; + _wMagsArray = []; + // suppressor, laser, optics, magazines(array), bipods + { + // magazines + if (_x isEqualType []) then{ + _wMags = true; + _wMagsArray = _x; + } else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; + }; + }; + } forEach _x; + // add all attachments to vehicle + // TODO replace with adding attachments directly to gun (Arma feature dependant) + { + _vehicle addItemCargoGlobal[_x, 1]; + } forEach _attachments; + if (_wMags) then{ + if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{ + _vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; }; }; - } forEach _x; - - // add all attachments to vehicle - // TODO replace with adding attachments directly to gun (Arma feature dependant) - { - _vehicle addItemCargoGlobal[_x, 1]; - } forEach _attachments; - - if (_wMags) then{ - if (_wMagsArray isEqualType [] && (count _wMagsArray) >= 2) then{ - _vehicle addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; - }; }; - + }; + }; + // Magazine cargo + case 1: { + _magazineName = _x; + _magazineSize = _objQty select _forEachIndex; + if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then { + _magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count"); + // Add full magazines cargo + _vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax]; + // Add last non full magazine + if ((_magazineSize % _magazineSizeMax) > 0) then { + _vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)]; + }; + }; + }; + // Backpack cargo + case 2: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _vehicle addBackpackCargoGlobal [_x, _qty]; + }; + }; + // Item cargo + case 3: { + if (_x isEqualType "STRING") then { + _qty = _objQty select _forEachIndex; + _vehicle addItemCargoGlobal [_x, _qty]; }; }; }; - // Magazine cargo - case 1: { - _magazineName = _x; - _magazineSize = _objQty select _forEachIndex; - - if ((_magazineName isEqualType "STRING") && (_magazineSize isEqualType 0)) then { - _magazineSizeMax = getNumber (configFile >> "CfgMagazines" >> _magazineName >> "count"); - - // Add full magazines cargo - _vehicle addMagazineAmmoCargo [_magazineName, floor (_magazineSize / _magazineSizeMax), _magazineSizeMax]; - - // Add last non full magazine - if ((_magazineSize % _magazineSizeMax) > 0) then { - _vehicle addMagazineAmmoCargo [_magazineName, 1, floor (_magazineSize % _magazineSizeMax)]; - }; - }; - }; - // Backpack cargo - case 2: { - if (_x isEqualType "STRING") then { - _qty = _objQty select _forEachIndex; - _vehicle addBackpackCargoGlobal [_x, _qty]; - }; - }; - // Item cargo - case 3: { - if (_x isEqualType "STRING") then { - _qty = _objQty select _forEachIndex; - _vehicle addItemCargoGlobal [_x, _qty]; - }; - }; - }; - } forEach _objTypes; - } forEach (_arr select 5); - - // remove and add back magazines works for armed trucks but not helis ATM - {_vehicle removeMagazineGlobal _x}count (magazines _vehicle); - {_vehicle addMagazine _x}count (_arr select 6); - - // turrets - /* - _mags = _vehicle magazinesTurret [0]; - { - _object removeMagazinesTurret [_x, [0]]; - } forEach _mags; - - _mags = _vehicle magazinesTurret [-1]; - { - _object removeMagazinesTurret [_x, [-1]]; - } forEach _mags; - */ - - if (EPOCH_DEBUG_VEH) then { - _marker = createMarker [str(_location) , _location]; - _marker setMarkerShape "ICON"; - _marker setMarkerType "mil_dot"; - _marker setMarkerText _class; - _marker setMarkerColor "ColorGreen"; + } forEach _objTypes; + } forEach (_arr select 5); + // remove and add back magazines works for armed trucks but not helis ATM + {_vehicle removeMagazineGlobal _x}count (magazines _vehicle); + {_vehicle addMagazine _x}count (_arr select 6); + // turrets + /* + _mags = _vehicle magazinesTurret [0]; + { + _object removeMagazinesTurret [_x, [0]]; + } forEach _mags; + _mags = _vehicle magazinesTurret [-1]; + { + _object removeMagazinesTurret [_x, [-1]]; + } forEach _mags; + */ + if (EPOCH_DEBUG_VEH) then { + _marker = createMarker [str(_location) , _location]; + _marker setMarkerShape "ICON"; + _marker setMarkerType "mil_dot"; + _marker setMarkerText _class; + _marker setMarkerColor "ColorGreen"; + }; + } else { + diag_log format["DEBUG: vehicle object Null: class: %1, loc: %2, slot: %3",_class, _location,str(_i)]; }; - - if (_simulationHandler) then{ - _vehicle enableSimulationGlobal false; - }; - - - + } else { + diag_log format["DEBUG: invalid vehicle position array %1",_location]; }; + } else { + diag_log format["DEBUG: vehicle destroyed already (%2) or invalid vehicle class: %1",_class, _damage]; + }; + } else { + diag_log format["DEBUG: invalid vehicle data count: %1 != %2",_arrNum,_dataFormatCount]; + }; + } else { + diag_log format["DEBUG: invalid vehicle data: %1",_response]; + }; +}; + +// re-enable damage and apply to vehicles after we wait some time. +[_vehicleDamages,([_serverSettingsConfig, "immuneVehicleSpawnTime", 120] call EPOCH_fnc_returnConfigEntry),([_serverSettingsConfig, "simulationHandler", true] call EPOCH_fnc_returnConfigEntry)] spawn { + params [["_vehicleDamages",[]],["_immuneTime",120],["_simulationHandler",true]]; + // wait for some time to let all vehicles settle. + sleep _immuneTime; + // set final damages + { + _x params ["_vehicle","_damage","_hitpoints"]; + _vehicle allowDamage true; + _vehicle setDamage _damage; + _allHitpoints = getAllHitPointsDamage _vehicle; + if !(_allHitpoints isEqualTo []) then{ + _actualHitpoints = _allHitpoints select 0; + if ((count _actualHitpoints) == (count _hitpoints)) then{ + { + _dmg = _hitpoints param [_forEachIndex,0]; + if (_x in ["HitFuel", "HitEngine"]) then { + _dmg = _dmg min 0.9; + }; + _vehicle setHitIndex [_forEachIndex, _dmg]; + } forEach _actualHitpoints; }; }; - }; + // vehicle simulation handler + if (_simulationHandler) then{ + _vehicle enableSimulationGlobal false; + }; + } forEach _vehicleDamages; }; - -// re-enable damage to vehicles after we wait -if (_immuneVehicleSpawn) then{ - _immuneVehicleSpawnTime = [_serverSettingsConfig, "immuneVehicleSpawnTime", 120] call EPOCH_fnc_returnConfigEntry; - [_allVehicles,_immuneVehicleSpawnTime] spawn{ - sleep (_this select 1); - {_x allowDamage true} count (_this select 0); - }; -}; - +// add all spawned vehicles to remains collector. addToRemainsCollector _allVehicles; - diag_log format ["Epoch: Vehicle SPAWN TIMER %1, LOADED %2 VEHICLES", diag_tickTime - _diag, count _allVehicles]; true diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf index bd7e41eb..1d0b80b4 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_fillVehicle.sqf */ params ["_vehicle","_value","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf index e35f58d7..5cf08ce2 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf */ params ["_unit","_lockStatus","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; @@ -28,7 +28,8 @@ _fnc_unlock = { _this setVariable ["EPOCH_Locked", false, true]; }; -if (getNumber(configFile >> "CfgVehicles" >> _type >> "isSecureStorage") == 1) then{ +_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; +if (getNumber(_cfgBaseBuilding >> _type >> "isSecureStorage") == 1) then{ _owners = _unit getVariable["STORAGE_OWNERS", []]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf index 41359fd8..77671b50 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf */ private ["_lockOwner","_lockedOwner","_response","_playerUID","_playerGroup","_vehSlot","_vehLockHiveKey","_isLocked","_driver","_crew","_logic"]; params ["_vehicle","_value","_player",["_token","",[""]]]; @@ -54,7 +54,7 @@ _crew = []; _logic = if !(_crew isEqualTo []) then { if (_player in _crew) then { // allow unlock if player is the driver or is inside the vehicle with out a driver. - (_player isEqualTo _driver || isNull(_driver)) + (_player isEqualTo _driver || isNull(_driver) || _lockedOwner == _lockOwner || !alive _driver) } else { // allow only if player is already the owner as they are not inside the occupied vehicle. (_lockedOwner == _lockOwner) diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf index 0bb85b8b..24335df8 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packJack.sqf */ params ["_unit","_player",["_token","",[""]]]; if !([_player, _token] call EPOCH_server_getPToken) exitWith{}; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf index 137448d5..fd579893 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf */ private ["_wepsItemsCargo","_magsAmmoCargo","_objTypes","_objQty","_wMags","_wMagsArray","_attachments","_arrCount","_magazineName","_magazineSize","_qty","_objType","_posWH","_inventory","_gwh","_returnItems","_owners","_class"]; params ["_unit","_player",["_token","",[""]]]; @@ -50,7 +50,6 @@ if (_class isKindOf 'Constructions_lockedstatic_F') then { _gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"]; _gwh setPosATL _posWH; - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; _returnItems = getArray(_config >> _class >> "returnOnPack"); { diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf index a7090d8a..549c954c 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_repairVehicle.sqf */ params ["_vehicle","_value","_player",["_token","",[""]]]; if (isNull _vehicle) exitWith{}; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf index 461ee0c7..5fdfe354 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedBuilding.sqf */ private ["_vehSlot","_vehHiveKey","_ammoObj"]; params ["_building","_killer"]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf index b263bbe0..7f39ddd4 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedStorage.sqf */ private ["_vehSlot","_vehHiveKey"]; params ["_storage","_killer"]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf index 23102752..ba560865 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_killedVehicle.sqf */ private ["_vehSlot","_vehHiveKey"]; params ["_vehicle","_killer"]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf index 3428e339..e6ddca33 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_storage.sqf */ private ["_wepsItemsCargo","_magsAmmoCargo","_cargoIndex","_vehHiveKey","_damage","_vehiclePos","_magsAmmoCargoMinimized","_inventory","_colorSlot","_storageOwners","_locked","_worldspace","_VAL","_class","_vehSlot"]; params [["_vehicle",objNull]]; @@ -35,6 +35,18 @@ if (!isNull _vehicle) then { if (isNil "_magsAmmoCargo") then { _magsAmmoCargo = []; }; + + { + _cargo = _x select 1; + _magsAmmoCargox = magazinesAmmoCargo _cargo; + { + _magsAmmoCargo pushback _x; + } foreach _magsAmmoCargox; + _wepsItemsCargox = weaponsItemsCargo _cargo; + { + _wepsItemsCargo pushback _x; + } foreach _wepsItemsCargox; + } foreach everycontainer _vehicle; // minimize magazine ammo cargo _magsAmmoCargoMinimized = [[],[]]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf index 3a40019a..9ca086c9 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicle.sqf */ private ["_wepsItemsCargo","_magsAmmoCargo","_cargoIndex","_vehHiveKey","_hitpoints","_magsAmmoCargoMinimized","_inventory","_colorSlot","_VAL","_vehSlot"]; params [["_vehicle",objNull]]; @@ -34,6 +34,18 @@ if (!isNull _vehicle) then { if (isNil "_magsAmmoCargo") then { _magsAmmoCargo = []; }; + + { + _cargo = _x select 1; + _magsAmmoCargox = magazinesAmmoCargo _cargo; + { + _magsAmmoCargo pushback _x; + } foreach _magsAmmoCargox; + _wepsItemsCargox = weaponsItemsCargo _cargo; + { + _wepsItemsCargo pushback _x; + } foreach _wepsItemsCargox; + } foreach everycontainer _vehicle; // minimize magazine ammo cargo _magsAmmoCargoMinimized = [[],[]]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf index b53e4d48..3b72b96c 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_save_vehicles.sqf */ private ["_vehSlot","_storSlot","_objSlot"]; params [["_objects",[]]]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf index d8e04355..2957198c 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf @@ -10,24 +10,22 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicle.sqf */ -private ["_maxDamage","_textures","_textureSelectionIndex","_selections","_colors","_color","_count","_vehLockHiveKey","_marker","_config","_vehObj"]; +private ["_maxDamage","_textures","_textureSelectionIndex","_selections","_colors","_color","_count","_vehLockHiveKey","_marker","_cfgEpochVehicles","_vehObj"]; params ["_vehClass","_position","_direction","_locked","_slot",["_lockOwner",""],["_can_collide","CAN_COLLIDE"],["_spawnLoot",false],["_spawnDamaged",true]]; if !(isClass (configFile >> "CfgVehicles" >> _vehClass)) exitWith {objNull}; _vehObj = createVehicle[_vehClass, _position, [], 0, _can_collide]; if !(isNull _vehObj) then{ _vehObj call EPOCH_server_setVToken; - // Set Direction and position if (_direction isEqualType []) then{ + _vehObj setVectorDirAndUp _direction; _vehObj setposATL _position; - _vehObj setVectorDirAndUp _direction; } else { _vehObj setdir _direction; _vehObj setposATL _position; }; - // Normalize vehicle inventory clearWeaponCargoGlobal _vehObj; clearMagazineCargoGlobal _vehObj; @@ -52,13 +50,13 @@ if !(isNull _vehObj) then{ }; // get colors from config - _config = (configFile >> "CfgVehicles" >> _vehClass >> "availableColors"); + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _vehClass >> "availableColors"); + if (isArray(_availableColorsConfig)) then{ - if (isArray(_config)) then{ - - _textureSelectionIndex = configFile >> "CfgVehicles" >> _vehClass >> "textureSelectionIndex"; + _textureSelectionIndex = (_cfgEpochVehicles >> _vehClass >> "textureSelectionIndex"); _selections = if (isArray(_textureSelectionIndex)) then{ getArray(_textureSelectionIndex) } else { [0] }; - _colors = getArray(_config); + _colors = getArray(_availableColorsConfig); _textures = _colors select 0; _color = floor(random(count _textures)); _count = (count _colors) - 1; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf index b1901184..734e1f73 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_spawn_vehicles.sqf */ private ["_vehClass","_velimit","_vehicleCount","_limit","_cityPos","_range","_nearBy","_find","_position","_direction","_getRandomPos","_newPosition","_road","_selectedCity","_roads","_isShip","_collide","_marker","_vehObj","_slot","_vehCount","_preferedPos","_allowedVehiclesList","_spawnPositionSizeDefaults","_serverMapConfig","_spawnPositionSize","_allowedTypes","_allCitys","_allCitysDync","_spawnCount"]; params [["_allowedVehiclesList",[]]]; @@ -57,7 +57,7 @@ _allCitysDync = []; } forEach _allCitys; _position = [0,0,0]; -_spawnCount = (count EPOCH_VehicleSlots - EPOCH_storedVehicleCount) - 1; +_spawnCount = (count EPOCH_VehicleSlots - EPOCH_storedVehicleCount); // diag_log format["DEBUG: count EPOCH_VehicleSlots: %1 EPOCH_storedVehicleCount: %2 _spawnCount %3", (count EPOCH_VehicleSlots), EPOCH_storedVehicleCount, _spawnCount,_allowedVehiclesList]; // diag_log format["DEBUG: _allowedVehiclesList: %1 ", _allowedVehiclesList]; diff --git a/Sources/epoch_server/config.cpp b/Sources/epoch_server/config.cpp index 9128d65a..acc0a46f 100644 --- a/Sources/epoch_server/config.cpp +++ b/Sources/epoch_server/config.cpp @@ -20,7 +20,7 @@ class cfgFunctions tag = "EPOCH"; class Epoch_Server { - file = "\x\addons\a3_epoch_server\init"; + file = "\epoch_server\init"; class init { preInit = 1; @@ -38,7 +38,7 @@ class CfgServerFunctions class A3E { tag = "EPOCH"; - file = "\x\addons\a3_epoch_server\compile"; + file = "\epoch_server\compile"; class epoch_group { class server_upgradeGroup {}; class server_updatePlayerGroup {}; @@ -47,6 +47,7 @@ class CfgServerFunctions class server_invitePlayer {}; }; class epoch_bases { + class swapBuilding {}; class saveBuilding {}; class server_loadBuildings {}; class server_saveBuilding {}; @@ -71,19 +72,21 @@ class CfgServerFunctions class server_savePlayer {}; class server_loadPlayer {}; class server_checkPlayer {}; - // class server_respawnPlayer {}; class server_onPlayerDisconnect {}; class server_deadPlayer {}; class server_revivePlayer {}; class server_storeCrypto {}; class server_equippedItem {}; class server_unpackBackpack {}; + class server_deadPlayerDetonate{}; + class server_playerSetVariable{}; }; class epoch_traders { class server_loadTraders {}; class server_spawnTraders {}; }; class epoch_trading { + class server_effectCrypto {}; class server_makeTrade {}; class server_tradeRequest {}; class server_makeNPCTrade {}; @@ -120,24 +123,28 @@ class CfgServerFunctions class server_teleportPlayer {}; class returnConfig {}; class serverCommand {}; + class server_makeMarker {}; + class server_removeMarker {}; }; class epoch_missions { class Server_createObject {}; class server_airDropCrate {}; class server_fillContainer {}; class Server_createAirDrop {}; + class Server_missionComms{}; }; class epoch_antagonists { class server_triggerEvent {}; class server_handle_say3D {}; class server_handle_switchMove {}; class server_handle_sapperObjs {}; + class server_triggerAntagonist{}; }; }; }; class CfgServerVersion { - client = "0.3.8.0"; - config = "0.3.8.0"; + client = "0.3.9.0"; + config = "0.3.9.0"; hive = "0.5.1.7"; }; diff --git a/Sources/epoch_server/init/fn_init.sqf b/Sources/epoch_server/init/fn_init.sqf index 5ac635fc..ebbe484e 100644 --- a/Sources/epoch_server/init/fn_init.sqf +++ b/Sources/epoch_server/init/fn_init.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/init/fn_init.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/fn_init.sqf */ if !(isNil "Epoch_SStart1") exitWith { false }; Epoch_SStart1 = true; diff --git a/Sources/epoch_server/init/fn_postinit.sqf b/Sources/epoch_server/init/fn_postinit.sqf index 4749f152..6090b436 100644 --- a/Sources/epoch_server/init/fn_postinit.sqf +++ b/Sources/epoch_server/init/fn_postinit.sqf @@ -10,13 +10,13 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/init/fn_postinit.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/fn_postinit.sqf */ if (isNil "Epoch_SStart") then { Epoch_SStart = true; [] spawn { call compile preprocessFileLineNumbers "epoch_code\init\both_init.sqf"; - call compile preprocessFileLineNumbers "\x\addons\a3_epoch_server\init\server_init.sqf"; + call compile preprocessFileLineNumbers "\epoch_server\init\server_init.sqf"; }; }; diff --git a/Sources/epoch_server/init/server_init.sqf b/Sources/epoch_server/init/server_init.sqf index ca5d2f12..964cf6a3 100644 --- a/Sources/epoch_server/init/server_init.sqf +++ b/Sources/epoch_server/init/server_init.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/init/server_init.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/server_init.sqf */ _startTime = diag_tickTime; missionNamespace setVariable ['Epoch_ServerVersion', getText(configFile >> "CfgMods" >> "Epoch" >> "version"), true]; @@ -52,9 +52,8 @@ if (isNil "_instanceID") exitWith{ "Epoch: InstanceID missing!" call _abortAndError; }; -EPOCH_modCUPWeaponsEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_WheeledVehicles_Core" >> "requiredVersion") > 0); -EPOCH_modCUPVehiclesEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_Weapons_WeaponsCore" >> "requiredVersion") > 0); - +EPOCH_modCUPWeaponsEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_Weapons_WeaponsCore" >> "requiredVersion") > 0); +EPOCH_modCUPVehiclesEnabled = (getNumber (configFile >> "CfgPatches" >> "CUP_WheeledVehicles_Core" >> "requiredVersion") > 0); if (EPOCH_modCUPWeaponsEnabled) then { diag_log "Epoch: CUP Weapons detected"; }; @@ -63,27 +62,24 @@ if (EPOCH_modCUPVehiclesEnabled) then { }; diag_log "Epoch: Init Variables"; -call compile preprocessFileLineNumbers "\x\addons\a3_epoch_server\init\server_variables.sqf"; -call compile preprocessFileLineNumbers "\x\addons\a3_epoch_server\init\server_securityfunctions.sqf"; +call compile preprocessFileLineNumbers "\epoch_server\init\server_variables.sqf"; +call compile preprocessFileLineNumbers "\epoch_server\init\server_securityfunctions.sqf"; ["I", _instanceID, "86400", ["CONTINUE"]] call EPOCH_fnc_server_hiveSETEX; diag_log format["Epoch: Start Hive, Instance ID: '%1'", _instanceID]; diag_log "Epoch: Init Connect/Disconnect handlers"; -addMissionEventHandler ["HandleDisconnect", { _this call EPOCH_server_onPlayerDisconnect }]; -["EPOCH_onPlayerConnected", "onPlayerConnected", { - "epochserver" callExtension format["001|%1", _uid]; - diag_log format["playerConnected:%1:%2", _uid, _name]; - ['Connected', [_uid, _name]] call EPOCH_fnc_server_hiveLog; +onPlayerConnected {}; // seems this is needed or addMissionEventHandler "PlayerConnected" does not work. as of A3 1.60 +addMissionEventHandler ["PlayerConnected", { + params ["_id","_uid","_name","_jip","_owner"]; + // TODO: diabled STEAMAPI - Vac ban check needs reworked. + // "epochserver" callExtension format["001|%1", _uid]; + // diag_log format["playerConnected:%1", _this]; ["PlayerData", _uid, EPOCH_expiresPlayer, [_name]] call EPOCH_fnc_server_hiveSETEX; -}] call BIS_fnc_addStackedEventHandler; - -["EPOCH_onPlayerDisconnected", "onPlayerDisconnected", { - diag_log format["playerDisconnected:%1:%2", _uid, _name]; - ['Disconnected', [_uid, _name]] call EPOCH_fnc_server_hiveLog; - _uid call EPOCH_server_disconnect; -}] call BIS_fnc_addStackedEventHandler; + ['Connected', [_uid, _name]] call EPOCH_fnc_server_hiveLog; +}]; +addMissionEventHandler ["HandleDisconnect", {_this call EPOCH_server_onPlayerDisconnect}]; diag_log "Epoch: Setup Side Settings"; //set side status @@ -144,6 +140,8 @@ _allowedVehicleListName = ["allowedVehiclesList","allowedVehiclesList_CUP"] sele _allowedVehiclesList = getArray(configFile >> "CfgEpoch" >> worldName >> _allowedVehicleListName); _vehicleSlotLimit = 0; {_vehicleSlotLimit = _vehicleSlotLimit + (_x select 1)} forEach _allowedVehiclesList; +_ReservedSlots = 50; +_vehicleSlotLimit = _vehicleSlotLimit + _ReservedSlots; _vehicleSlotLimit call EPOCH_load_vehicles; diag_log "Epoch: Spawning vehicles"; @@ -151,6 +149,14 @@ _allowedVehiclesListArray = []; { _x params ["_vehClass","_velimit"]; _vehicleCount = {typeOf _x == _vehClass} count vehicles; + + // Load how many of this vehicle are in stock at any trader. + _indexStock = EPOCH_traderStoredVehicles find _vehClass; + if (_indexStock != -1) then { + _existingStock = EPOCH_traderStoredVehiclesCnt select _indexStock; + _vehicleCount = _vehicleCount + _existingStock; + }; + for "_i" from 1 to (_velimit-_vehicleCount) do { _allowedVehiclesListArray pushBack _vehClass; }; @@ -163,7 +169,7 @@ EPOCH_StorageSlotsLimit call EPOCH_load_storage; diag_log "Epoch: Loading static loot"; call EPOCH_server_spawnBoatLoot; -[] execFSM "\x\addons\a3_epoch_server\system\server_monitor.fsm"; +[] execFSM "\epoch_server\system\server_monitor.fsm"; // Setting Server Date and Time _dateChanged = false; diff --git a/Sources/epoch_server/init/server_securityfunctions.sqf b/Sources/epoch_server/init/server_securityfunctions.sqf index de59eb35..e070a7e6 100644 --- a/Sources/epoch_server/init/server_securityfunctions.sqf +++ b/Sources/epoch_server/init/server_securityfunctions.sqf @@ -10,8 +10,10 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/init/server_securityfunctions.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/server_securityfunctions.sqf */ +private ["_code","_functionName","_remoteExecClientStr","_onLoad","_onUnload","_skn_blockedSpawnMenuUID","_temp","_skn_adminMenuOwner","_case","_skn_adminMenuHigh","_skn_adminMenuLow","_config","_debugClass","_cfg_systemDebug","_skn_systemDebug1","_skn_systemDebug2","_skn_systemDebug3","_skn_systemDebug4","_skn_systemDebug5","_cfg_remoteExecClient","_remoteExecClient_NAMES","_cfg_limits","_skn_playerCryptoLimit","_cfg_learning","_skn_trustedUsers","_str_learningModeCheck","_cfg_quality","_skn_perfMode","_skn_viewDistance","_skn_viewDistanceObects","_skn_terrainGrid","_cfg_blacklistConfig","_skn_badDisplaysArray","_skn_badAnimations","_cfg_variablesConfig","_skn_badVarCheckArray","_skn_nilVarCheckArray","_skn_commandMenuArray","_skn_addEHConfig","_skn_displayAddEHChecks","_skn_addEHArray","_serverSettingsConfig","_skn_enableAntihack","_skn_check_addons","_checkFiles","_skn_check_files","_whitelistPatches","_skn_whitelist_cfgPatches","_skn_adminsOwner","_skn_adminsHigh","_skn_adminsLow","_banReasons","_skn_banReason","_antihack_banDuration","_epoch_banReasons","_kickReasons","_epoch_kickReason","_epoch_kickReasons","_ownerSettings","_skn_adminMenuOwnerSetting","_adminSettings","_skn_adminMenuHighSetting","_lowSettings","_skn_adminMenuLowSetting","_skn_adminMenuMenuKey","_skn_adminMenuInfrontTeleport","_skn_adminMenuBanReasons","_skn_adminMenuCryproCfg","_skn_cfgPatchesCfg","_skn_PVSPrefix","_rndVAR_Count","_skn_rndVA","_skn_PVC_INDEX","_skn_AH_rndVarVehicle","_skn_AH_rndVarPlayer","_skn_AH_rndVarAHInitCheck","_skn_AH_Init","_skn_AH_Code","_skn_AH_Code_CA","_skn_AH_Code_CB","_skn_AH_Ban","_skn_AH_rndVar","_skn_doKickBan","_skn_server_getRealTime","_skn_pv_hackerLog","_skn_pv_adminLog","_skn_server_adminLog","_skn_doAdminRequest","_skn_doAdminLog","_skn_doTokenAuth","_skn_antiTeleportPVC","_skn_Admin_Code","_skn_Admin_Init","_skn_adminRequest_PVC","_skn_adminLog_PVC","_skn_adminLog","_skn_AdminKeyDown","_skn_AdminMenu_Init","_skn_getCtrl","_skn_fnc_Spec","_skn_Update_AdminButtons","_skn_mainMenuCfg","_skn_FillMainMenu","_skn_FillPlayerMenu","_skn_switchMainMenu","_skn_dbClickMainMenu","_skn_spawnMenu","_skn_spawnSpawnMenu","_skn_removespawnMenu","_skn_fillSpawnMenu","_skn_hackerLog","_skn_switchTable","_skn_customBanreason","_skn_flipVehicle","_skn_freeCam","_skn_delete","_skn_deleteMenu","_skn_deleteNow","_skn_doBan","_skn_mapTeleport","_skn_old_esp","_skn_hideAdmin","_skn_old_espMap","_skn_infrontTP","_skn_esp","_skn_godMode","_skn_repairVehicle","_skn_spawnLoot","_skn_mapLootArray","_skn_tg_Spec","_skn_tg_sortOrder","_skn_tg_toggle","_skn_tg_BanPlayer","_skn_tg_delete","_skn_tg_mapTeleport","_skn_tg_spawnTyp","_skn_tg_limitSpawn","_skn_tg_old_espMap","_skn_tg_old_esp","_skn_tg_hideAdmin","_skn_tg_infrontTP","_skn_tg_godMode","_skn_tg_map_player","_skn_tg_map_corpse","_skn_tg_map_loot","_skn_tg_map_vehicle","_skn_tg_map_ai","_skn_tg_map_basebuilding","_skn_t1","_skn_t2","_skn_t3","_skn_t4","_skn_t5","_skn_AH_rndVarAHInitCheckToken","_stringInArray","_displaysArray","_displays","_escapeQuotes","_cfg_displayArray","_skn_adminUIDArray","_skn_adminNAMEArray","_skn_tempuid","_skn_spawnPointCenter","_centerDistance","_sknBanANDSleep","_sknBanANDSleepQuick","_sknPatches","_skn_addonCheckCode","_skn_fileCheckCode","_sknAddActionCheck","_skn_code_ban","_skn_code_init","_skn_code_antihack","_skn_admincode","_skn_admininit"]; + _config = (configFile >> "CfgSecConf"); if (isClass _config) then {diag_log "Loading config..."}; @@ -70,12 +72,22 @@ _checkFiles = [ ["epoch_code\compile\interface_event_handlers\EPOCH_KeyDown.sqf", "EPOCH_KeyDown"] ]; _skn_check_files = [_serverSettingsConfig, "antihack_checkFiles", _checkFiles] call EPOCH_fnc_returnConfigEntry; -_whitelistPatches = ["A3Data","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Language_F_MP_Mark","A3_LanguageMissions_F_MP_Mark","Map_VR","A3_Map_VR_Scenes","CUP_A10_Data","CUP_Afghan_Data","CUP_Air2_Data","CUP_Air3_Data","CUP_Air_Data","CUP_Air_d_baf_Data","CUP_Air_e_Data","CUP_Air_pmc_Data","CUP_CA_animals2","CA_animals2","CUP_Animations_Data","CUP_Animations_Config","CUP_Bohemia_Data","CUP_Bootcamp_acr_Data","CUP_Buildings2_Data","CUP_Buildings2_Ind_Cementworks_Data","CUP_Buildings_Data","CUP_Ca_acr_Data","CUP_CA_Config","CAData","CUP_Ca_e_Data","CUP_Ca_pmc_Data","CUP_Characters2_Data","CUP_Chernarus_Data","CUP_Chernarus_Summer_Data","CUP_Cti_buildings_Data","CUP_CA_Data","CUP_CAData_ParticleEffects","CAData_ParticleEffects","CUP_Data_baf_Data","CUP_dbe1_data","CUP_Desert2_Data","CUP_Desert2_Objects","Desert2_Objects","CUP_Desert_Data","CUP_Desert_e_Data","CUP_Hotfix_Data","CUP_L39_Data","CUP_CALanguage","CALanguage","CUP_CALanguage_ACR","CALanguage_ACR","CUP_CALanguage_missions","CALanguage_missions","CUP_CALanguage_missions_e","CALanguage_missions_e","CUP_Misc3_Data","CUP_CAMisc","CUP_Misc_Data","CAMisc","CUP_Misc_acr_Data","CUP_Misc_e_Data","CUP_CA_MPA","CA_MPA","CUP_CA_Plants2_Clutter","CA_Plants2_Clutter","CUP_CAPlants","CAPlants","CUP_CA_Plants_E_Clutter","CA_Plants_E_Clutter","CUP_Provinggrounds_pmc_Data","CUP_CARoads2","CARoads2","CUP_CARoads2Dam","CARoads2Dam","CUP_CARoads","CARoads","CUP_CARoads_E","CARoads_E","CUP_CARoads_PMC","CARoads_PMC","CUP_CARocks2","CARocks2","CUP_CARocks","CARocks","CUP_CARocks_E","CARocks_E","CUP_Sara_Data","CUP_Saralite_Data","CUP_Shapur_baf_Data","CUP_CASigns","CASigns","CUP_CASigns_E","CASigns_E","CUP_Sounds_Data","CUP_Sounds_Config","CASounds","CUP_Sounds_e_Data","CUP_Structures_Data","CUP_pond_test","pond_test","CUP_Structures_e_Data","CUP_Structures_pmc_Data","CUP_Takistan_Data","CUP_Tracked2_Data","CUP_Tracked_Data","CUP_Tracked_e_Data","CUP_CAFonts","CAFonts","CUP_Utes_Data","CUP_Water2_Data","CUP_Water_Data","CUP_Weapons2_Data","CUP_Weapons_Data","CUP_Weapons_e_Data","CUP_Weapons_pmc_Data","CUP_Wheeled2_Data","CUP_Wheeled_Data","CUP_Wheeled_e_Data","CUP_Zargabad_Data","CUP_A1AlwaysDummy","CAVideo2_PMC","CA_AnimsHotfix","CA_CutSceneAnims","CAIntroAnims","CAUSMCD","CAVoice","CAweapons3_aks74pso","CAWeapons3_ammocrates","CAweapons3_ksvk","CAweapons3_m107","CAweapons3_m16a4_acg_gl","CAweapons3_m16a4_acg","CAweapons3_m16a4_gl","CAweapons3_m16a4","CAWeapons3","CTI_buildingsBmp2_hq","CTI_buildingsM113_hq","DSHkM_Mini","M2HD_Mini","MK19_Tripod","Warfare","WarfareBuildings_Stinger_Twice_static","WarfareBuildings_T72_RACS","WarfareBuildings_TOW_Tripod","CUP_AiA_compat","AiA_A1AlwaysDummy","AiA_Afghan_Config","AiA_Afghan_Data","AiA_BaseConfig_F","AiA_Bohemia_Config","AiA_Bohemia_Data","AiA_Bootcamp_acr_Config","AiA_Bootcamp_acr_Data","AiA_Buildings_Config","AiA_Buildings_Data","AiA_Buildings2_Config","AiA_Buildings2_Data","AiA_Buildings2_Ind_Cementworks_Config","AiA_Buildings2_Ind_Cementworks_Data","AiA_Ca_acr_Config","AiA_Ca_acr_Data","AiA_CA_Config","AiA_CA_Config_Data_ParticleEffects","AiA_CA_Data","AiA_Ca_e_Config","AiA_Ca_e_Data","AiA_Ca_pmc_Config","AiA_Ca_pmc_Data","AiA_CBA_A2_xeh_Dummy","AiA_CBA_OA_xeh_Dummy","AiA_cba_xeh_a2_Dummy","AiA_cba_xeh_oa_Dummy","AiA_Chernarus_Config","AiA_Chernarus_Data","AiA_Chernarus_Summer_Config","AiA_Chernarus_Summer_Data","AiA_Core","AiA_Cti_buildings_Config","AiA_Cti_buildings_Data","AiA_Data_baf_Config","AiA_Data_baf_Data","AiA_Desert_Config","AiA_Desert_Data","AiA_Desert_e_Config","AiA_Desert_e_Data","AiA_Desert2_Config","AiA_Desert2_Data","AiA_Hotfix_Config","AiA_Hotfix_Data","AiA_Language_acr_Config","AiA_Language_acr_Data","AiA_Language_baf_Config","AiA_Language_baf_Data","AiA_Language_e_Config","AiA_Language_e_Data","AiA_Language_pmc_Config","AiA_Language_pmc_Data","AiA_Languagemissions_acr_Config","AiA_Languagemissions_acr_Data","AiA_Languagemissions_baf_Config","AiA_Languagemissions_baf_Data","AiA_Languagemissions_pmc_Config","AiA_Languagemissions_pmc_Data","AiA_Misc_acr_Config","AiA_Misc_acr_Data","AiA_Misc_Config","AiA_Misc_Data","AiA_Misc_e_Config","AiA_Misc_e_Data","AiA_Misc2_Config","AiA_Misc2_Data","AiA_Misc3_Config","AiA_Misc3_Data","AiA_Models_DBE1_Config","AiA_Models_DBE1_Data","AiA_Plants_Config","AiA_Plants_Data","AiA_Plants_e_Config","AiA_Plants_e_Data","AiA_Plants_e2_Config","AiA_Plants_e2_Data","AiA_Plants_pmc_Config","AiA_Plants_pmc_Data","AiA_Plants2_Bush_Config","AiA_Plants2_Bush_Data","AiA_Plants2_Clutter_Config","AiA_Plants2_Clutter_Data","AiA_Plants2_Misc_Config","AiA_Plants2_Misc_Data","AiA_Plants2_Plant_Config","AiA_Plants2_Plant_Data","AiA_Plants2_Tree_Config","AiA_Plants2_Tree_Data","AiA_Provinggrounds_pmc_Config","AiA_Provinggrounds_pmc_Data","AiA_Roads_Config","AiA_Roads_Data","AiA_Roads_e_Config","AiA_Roads_e_Data","AiA_Roads_pmc_Config","AiA_Roads_pmc_Data","AiA_Roads2_Config","AiA_Roads2_Data","AiA_Rocks_Config","AiA_Rocks_Data","AiA_Rocks_e_Config","AiA_Rocks_e_Data","AiA_Rocks2_Config","AiA_Rocks2_Data","AiA_Sara_Config","AiA_Sara_Data","AiA_Sara_dbe1_Config","AiA_Sara_dbe1_Data","AiA_Saralite_Config","AiA_Saralite_Data","AiA_Shapur_baf_Config","AiA_Shapur_baf_Data","AiA_Signs_Config","AiA_Signs_Data","AiA_Signs_e_Config","AiA_Signs_e_Data","AiA_Signs2_Config","AiA_Signs2_Data","AiA_Sounds_Config","AiA_Sounds_Data","AiA_StandaloneTerrainPack_Core","AiA_StandaloneTerrains_Core","AiA_Structures_Config","AiA_Structures_Data","AiA_Structures_e_Config","AiA_Structures_e_Data","AiA_Structures_pmc_Config","AiA_Structures_pmc_Data","AiA_Takistan_Config","AiA_Takistan_Data","AiA_Ui_Config","AiA_Ui_Data","AiA_Utes_Config","AiA_Utes_Data","AiA_Water_Config","AiA_Water_Data","AiA_Water2_Config","AiA_Water2_Data","AiA_Weapons_Config","AiA_Weapons_Data","AiA_Weapons_e_Config","AiA_Weapons_e_Data","AiA_Weapons_pmc_Config","AiA_Weapons_pmc_Data","AiA_Weapons2_Config","AiA_Weapons2_Data","AiA_Wheeled_Config","AiA_Wheeled_Data","AiA_Wheeled_e_Config","AiA_Wheeled_e_Data","AiA_Wheeled2_Config","AiA_Wheeled2_Data","AiA_Worlds","AiA_Worlds_Ambient","AiA_Worlds_Author","AiA_Worlds_Clutter","AiA_Worlds_ClutterDist","AiA_Worlds_Delete","AiA_Worlds_DisableInfiniteTerrain","AiA_Worlds_DustEffects","AiA_Worlds_EnvSounds","AiA_Worlds_FullDetailDist","AiA_Worlds_Grid","AiA_Worlds_Intros","AiA_Worlds_Lighting","AiA_Worlds_Lighting_Chernarus","AiA_Worlds_Lighting_Desert","AiA_Worlds_MapSize","AiA_Worlds_MidDetailTexture","AiA_Worlds_NoDetailDist","AiA_Worlds_Seabed","AiA_Worlds_SkyTexture","AiA_Worlds_StreetLamp","AiA_Worlds_Surfaces","AiA_Worlds_Water","AiA_Zargabad_Config","AiA_Zargabad_Data","CUP_StandaloneTerrains_Dummy","CA_ACR","CA_Animals2_Anim_Config","CA_Anims_Char","CA_Anims_E_Wmn","CA_E","CA_PMC","CAAir","CACharacters","CATracked","CAWater","CAWater2","CAWater2_seafox","CAWeapons","CAWeapons_Warfare_weapons","CAWheeled","CAWheeled_E","CAWheeled2","6G30_DBE1","Arma2_Ka52","BI_SRRS","CA_AH64D","CA_AIR_E_MQ9PredatorB","CA_AIR_E_Su25","CA_AIR2_Su25","CA_Animals_E","CA_Animals2_Chicken","CA_Animals2_Cow","CA_Animals2_Dogs","CA_Animals2_Dogs_Fin","CA_Animals2_Dogs_Pastor","CA_Animals2_Goat","CA_Animals2_Rabbit","CA_Animals2_Sheep","CA_Animals2_WildBoar","CA_Anims","CA_Anims_E","CA_Anims_E_Sdr","CA_Anims_Sdr","CA_Anims_Wmn","CA_CommunityConfigurationProject_E","CA_CruiseMissile","CA_Dubbing","CA_Dubbing_Baf","CA_Dubbing_Counterattack","CA_Dubbing_E","CA_Dubbing_PMC","CA_DubbingRadio_E","CA_DubbingRadio_PMC","CA_E_ParticleEffects","CA_Editor","CA_HC_Sounds","CA_Heads","CA_HighCommand","CA_L39","CA_Missions","CA_Missions_AlternativeInjurySimulation","CA_Missions_AmbientCombat","CA_Missions_Armory1","CA_Missions_Armory2","CA_Missions_BAF","CA_Missions_BAF_2","CA_Missions_BAF_Templates_SecOps","CA_Missions_BattlefieldClearance","CA_Missions_E","CA_Missions_E_Armory2","CA_Missions_E_SecOps","CA_Missions_E_Templates_SecOps","CA_Missions_FirstAidSystem","CA_Missions_GarbageCollector","CA_Missions_PMC","CA_Missions_SecOps","CA_Missions_Templates_SecOps","CA_Missions2_PMC","CA_Modules","CA_Modules_Alice","CA_Modules_Animals","CA_Modules_ARTY","CA_Modules_clouds","CA_Modules_Coin","CA_Modules_DynO","CA_Modules_E","CA_Modules_E_DynO","CA_Modules_E_Jukebox","CA_Modules_E_OO","CA_Modules_E_UAV","CA_Modules_E_UAV_Heli","CA_Modules_E_Weather","CA_Modules_Functions","CA_Modules_Marta","CA_Modules_PMC","CA_Modules_PMC_SimpleFIrstAid","CA_Modules_Silvie","CA_Modules_StratLayer","CA_Modules_UAV","CA_Modules_ZoRA","CA_MPA_Challenges","CA_MPA_Core","CA_MPA_MP","CA_MPA_Scenarios","CA_Sounds_Baf","CA_SoundsMissions_E","CA_Support","CAA10","CAAir_BAF","CAAir_BAF_CH_47F","CAAir_E","CAAir_E_A10","CAAir_E_AH64D","CAAir_E_AH6J","CAAir_E_An2","CAAir_E_C130J","CAAir_E_CH_47F","CAAir_E_Halo","CAAir_E_Mi24","CAAir_E_MI8","CAAir_E_UH1H_EP1","CAAir_E_UH60M","CAAir_PMC","CAAir_PMC_KA137","CAAir_PMC_KA60","CAAir2","CAAir2_C130J","CAAir2_ChukarTarget","CAAir2_F35B","CAAir2_MQ9PredatorB","CAAir2_MV22","CAAir2_Pchela1T","CAAir2_UH1Y","CAAir3","CAAir3_Su34","CAAnimals","CACharacters_BAF","CACharacters_BAF_Head","CACharacters_E","CACharacters_E_Head","CACharacters_PMC","CACharacters_PMC_Head","CACharacters_W_BAF","CACharacters2","CAMisc_fix","CAMisc_fix_A2FREE","CAMisc_fix_air","CAMisc_fix_Ch2","CAMisc_fix_Str","CAMisc_fix_Weap","CAMusic","CAMusic_E","CAMusic_PMC","CASounds_E","CASounds_Missions","CATracked_BAF","CATracked_E","CATracked_E_BMP2","CATracked_E_M1_Abrams","CATracked_E_M113","CATracked_E_M2A2_Bradley","CATracked_E_T34","CATracked_E_T55","CATracked_E_T72","CATracked_E_us_m270mlrs","CATracked_E_ZSU","CATracked_W_BAF","CATracked2","CATracked2_2S6M_Tunguska","CATracked2_AAV","CATracked2_BMP3","CATracked2_T34","CATracked2_T90","CATracked2_us_m270mlrs","CAWater2_Destroyer","CAWater2_fishing_boat","CAWater2_Fregata","CAWater2_smallboat_1","CAWeapons_2b14_82mm_Mortar","CAWeapons_AK","CAWeapons_AmmoBoxes","CAWeapons_BAF","CAWeapons_bizon","CAWeapons_Colt1911","CAWeapons_DMR","CAWeapons_E","CAWeapons_E_AGS","CAWeapons_E_AK","CAWeapons_E_AmmoBoxes","CAWeapons_E_Colt1911","CAWeapons_E_D30","CAWeapons_E_DSHKM","CAWeapons_E_FIM92_static","CAWeapons_E_fnfal","CAWeapons_E_G36","CAWeapons_E_GrenadeLauncher","CAWeapons_E_Igla","CAWeapons_E_Javelin","CAWeapons_E_KORD","CAWeapons_E_ksvk","CAWeapons_E_LeeEnfield","CAweapons_E_m107","CAWeapons_E_M110","CAWeapons_E_M119_Howitzer","CAWeapons_E_M136","CAWeapons_E_M14","CAWeapons_E_M16","CAWeapons_E_M240","CAWeapons_E_M252_81mm_Mortar","CAWeapons_E_M2StaticMG","CAWeapons_E_M47","CAWeapons_E_M9","CAWeapons_E_MAAWS","CAWeapons_E_Makarov","CAWeapons_E_Metis","CAWeapons_E_Mk19_MiniTriPod","CAWeapons_E_PK","CAWeapons_E_Podnos_2b14_82mm","CAWeapons_E_RPG18","CAWeapons_E_RPG7","CAWeapons_E_scar","CAWeapons_E_Searchlight","CAWeapons_E_SPG9","CAWeapons_E_STATIC","CAWeapons_E_Stinger","CAWeapons_E_Strela","CAWeapons_E_TOW","CAWeapons_E_ZU23","CAWeapons_Kord","CAweapons_ksvk","CAWeapons_M1014","CAweapons_m107","CAWeapons_M252_81mm_Mortar","CAWeapons_Metis_AT_13","CAWeapons_PMC","CAWeapons_PMC_AA_12","CAWeapons_PMC_AS50","CAWeapons_PMC_XM8","CAWeapons_Saiga12K","CAWeapons_SPG9","CAWeapons_VSS_vintorez","CAWeapons_ZU23","CAWeapons2","CAWeapons2_HuntingRifle","CAWeapons2_RPG18","CAWeapons2_SMAW","CAWheeled_D_BAF","CAWheeled_E_ATV","CAWheeled_E_BRDM2","CAWheeled_E_BTR40","CAWheeled_E_BTR60","CAWheeled_E_HMMWV","CAWheeled_E_Ikarus","CAWheeled_E_LADA","CAWheeled_E_LandRover","CAWheeled_E_M1030","CAWheeled_E_MTVR","CAWheeled_E_Offroad","CAWheeled_E_Old_bike","CAWheeled_E_Old_moto","CAWheeled_E_Pickup","CAWheeled_E_s1203","CAWheeled_E_SCUD","CAWheeled_E_stryker","CAWheeled_E_SUV","CAWheeled_E_TT650","CAWheeled_E_UAZ","CAWheeled_E_Ural","CAWheeled_E_V3S","CAWheeled_E_Volha","CAWheeled_Offroad","CAWheeled_Pickup","CAWheeled_PMC","CAWheeled_PMC_ArmoredSUV","CAWheeled_W_BAF","CAWheeled2_BTR90","CAWheeled2_GAZ39371","CAWheeled2_HMMWV_Ambulance","CAWheeled2_HMMWV_BASE","CAWheeled2_Ikarus","CAWheeled2_Kamaz","CAWheeled2_LADA","CAWheeled2_LAV25","CAWheeled2_M1114_Armored","CAWheeled2_M998A2_Avenger","CAWheeled2_MMT","CAWheeled2_MTVR","CAWheeled2_TowingTractor","CAWheeled2_V3S","CAWheeled2_VWGolf","CAWheeled3","CAWheeled3_M1030","CAWheeled3_TT650","Datsun_armed_DBE1","DBE1","DBE1_UI","DC3_DBE1","HALO_Test","Hilux_armed_DBE1","Warfare2","Warfare2_E","Warfare2Vehicles","CUP_Models_DBE1_Data","CUP_Anims_DBE1","Anims_DBE1","CUP_HMMWV_DBE1","HMMWV_DBE1","CUP_Mercenary_DBE1","Mercenary_DBE1","CUP_Misc_DBE1","Misc_DBE1","CUP_Music_DBE1","Music_DBE1","CUP_NPCs_DBE1","NPCs_DBE1","CUP_ploty_DBE1","ploty_DBE1","CUP_Prisoners_DBE1","Prisoners_DBE1","CUP_Roads_DBE1","Roads_DBE1","CUP_UH60Desert","UH60Desert","CUP_Sara_dbe1_Data","CUP_TKOH_Dummy","HSim_Data_H","HSim_Data_H_data_ParticleEffects","HSim_Data_H_data_ParticleEffects_rotor_blades","HSim_Dubbing_H","HSim_DubbingRadio_H","HSim_Editor_H","Intro_Island_H","HSim_Missions_H","HSim_ModulesCore_H","HSim_ModulesCore_H_AmbientCombat","HSim_ModulesCore_H_DynO","HSim_ModulesCore_H_Functions","HSim_ModulesCore_H_GarbageCollector","HSim_ModulesCore_H_Functions_E","HSim_ModulesCore_H_OO","HSim_ModulesCore_H_Functions_PMC","HSim_Music_H","HSim_Sounds_H","South_Asia_H","HSim_UIFonts_H","United_States_H","HSim_Animals_H","HSim_Animals_H_Anim_Config","HSim_Animals_H_Dog","HSim_Characters_H_Faces","HSim_Characters_H_Heads","HSim_Modules_H","HSim_UI_H","HSim_Weapons_H","HSim_Weapons_H_AK47","HSim_Weapons_H_DShKM","HSim_Weapons_H_Glock","HSim_Weapons_H_HandItems","HSim_Weapons_H_M16","HSim_Weapons_US_H","HSim_Characters_H","HSim_Characters_US_H","HSim_Missions_H_FreeFlight","HSim_Functions_Base_H","HSim_Water_H","HSim_Water_H_Civ_FishingBoat_Large","HSim_Water_H_Civ_Jetboat","HSim_Water_H_Civ_Yacht","HSim_Water_H_Container_Ship","HSim_Water_H_Cruise_Ship","HSim_Water_H_Destroyer","HSim_Water_H_Fishing_Boat","HSim_Water_H_Fregata","HSim_Water_H_LHD","HSim_Water_H_Oil_tanker","HSim_Water_H_Rubber_Boat","HSim_Water_H_Whales","HSim_Water_H_Whales_GreyWhale","HSim_Water_H_Whales_Whale1","HSim_Weapons_H_IGLA","HSim_Weapons_US_H_M2","HSim_Wheeled_H","HSim_Wheeled_H_Ambulance","HSim_Wheeled_H_FireTruck","HSim_Wheeled_H_Hatchback","HSim_Wheeled_H_Military_Offroad_LR","HSim_Wheeled_H_Military_Pickup_DSHKM","HSim_Wheeled_H_Offroad","HSim_Wheeled_H_Police_Car","HSim_Wheeled_H_TowingTractor","HSim_Wheeled_H_Tractor","HSim_Wheeled_H_Trailers","HSim_Wheeled_H_Truck_Light_Transport","HSim_Wheeled_H_Ural","HSim_Wheeled_H_Van_Passenger","HSim_Wheeled_US_H","HSim_Wheeled_US_H_Military_Offroad","HSim_Wheeled_US_H_Military_Truck","HSim_Wheeled_US_H_Pickup_01","HSim_Wheeled_US_H_Pickup_02","HSim_Wheeled_US_H_SUV","HSim_Wheeled_US_H_Truck_US_Type","HSim_Air_H","HSim_Air_H_Aircraft_A","HSim_Air_H_Aircraft_C","HSim_Air_H_Aircraft_D","HSim_Air_H_Aircraft_E_H","HSim_Air_H_Airliner_A","HSim_Air_H_Airliner_B","HSim_Air_H_Parachute","HSim_Air_US_H","HSim_Air_US_H_Helicopters_Heavy","HSim_Air_US_H_Helicopters_Light","HSim_Air_US_H_Helicopters_Medium","HSim_Misc_H","HSim_Misc_H_Antena","HSim_Misc_H_Barels","HSim_Misc_H_Bleacher","HSim_Misc_H_BoardsPack","HSim_Misc_H_CncBlock","HSim_Misc_H_Doghouse","HSim_Misc_H_Engine_Crane","HSim_Misc_H_Fence","HSim_Misc_H_Fire_Extinguisher","HSim_Misc_H_Fire_Suppression","HSim_Misc_H_First_Aid","HSim_Misc_H_Flagpole","HSim_Misc_H_Folding_Ladder","HSim_Misc_H_FuelCan","HSim_Misc_H_Heliport_Furniture","HSim_Misc_H_Helicopter_Parts","HSim_Misc_H_Helipads","HSim_Misc_H_Heliport_Objects","HSim_Misc_H_Helpers","HSim_Misc_H_Info_Board","HSim_Misc_H_Infostands","HSim_Misc_H_Inspection_Visuals","HSim_Misc_H_Interior","HSim_Misc_H_Loudspeakers","HSim_Misc_H_Market","HSim_Misc_H_Office_Objects","HSim_Misc_H_Perimeter_Ligh","HSim_Misc_H_Pike","HSim_Misc_H_Platform_Cart","HSim_Misc_H_Portable_Generator","HSim_Misc_H_Props","HSim_Misc_H_SawHorse","HSim_Misc_H_Shooting_Range","HSim_Misc_H_Signs","HSim_Misc_H_Sink","HSim_Misc_H_Targets","HSim_Misc_H_Tent","HSim_Misc_H_Toilet","HSim_Misc_H_Tools","HSim_Misc_H_Tools_Racking","HSim_Misc_H_Trash","HSim_Misc_H_Weather_Station","HSim_Misc_H_Weld_Gastank","HSim_Misc_H_Wheel_Chocks","HSim_Misc_H_Wheeled_Scaffolding","HSim_Misc_H_wheeled_tool_cart","HSim_Misc_H_Wheeled_Whiteboard","HSim_Misc_H_Winch","HSim_Misc_H_Windsock","HSim_Misc_H_Workbench","HSim_Misc_H_Wrecks","HSim_Structures_H","HSim_Structures_H_Airport_Papi","HSim_Structures_H_Harbour","HSim_Structures_H_Heliports_Heliport_Big","HSim_Structures_H_Heliports_Heliport_Small","HSim_Structures_H_Industrial_A_CraneCon","HSim_Structures_H_Industrial_Rooftop_Objects","HSim_Structures_US_H","HSim_Structures_US_H_Bld_US","HSim_Structures_US_H_Landmarks_Space_Needle","HSim_Tracked_H","HSim_Tracked_H_BMP2","HSim_Tracked_US_H","HSim_Tracked_US_H_M1A2","HSim_Tracked_US_H_MLRS","HSim_Data_H_EditorGroups","HSim_Anims_H","HSim_Anims_H_config_sdr","HSim_Anims_H_config_wmn","CUP_Hsim_Language_H","Hsim_Language_H","CUP_Hsim_Language_missions_H","Hsim_Language_missions_H","Enhanced_Epoch_AiASupport","A3_epoch_assets_1","epoch_objects","A3_epoch_assets_3","Underground_Epoch","A3_epoch_vehicles","a3_epoch_weapons","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Data_F_Bootcamp","A3_Data_F_Exp_A","A3_Data_F_Kart_ParticleEffects","A3_Data_F_Mark","A3_Editor_F","A3_Functions_F_Bootcamp","A3_Functions_F_Curator","A3_Functions_F_Exp_A","A3_Functions_F_Heli","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_Language_F_Heli","A3_Language_F_Kart","A3_Language_F_Mark","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_LanguageMissions_F_Kart","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_Mark_Objectives","A3_Music_F","A3_Music_F_Bootcamp","A3_Music_F_EPA","A3_Music_F_EPB","A3_Music_F_EPC","A3_Music_F_Heli","A3_Music_F_Mark","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_Bootcamp","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Sounds_F_Exp_A","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_UIFonts_F","CUP_Buildings_Config","CABuildings","CUP_CABuildings_Misc","CABuildings_Misc","CUP_Desert2_Buildings","Desert2_Buildings","CUP_CA_desert2_Characters","CA_desert2_Characters","CUP_Desert_Config","Desert","CUP_DBE1_Hotfix","DBE1_Hotfix","CUP_CALanguage_e","CALanguage_e","CUP_CALanguage_PMC","CALanguage_PMC","CUP_CALanguage_missions_PMC","CALanguage_missions_PMC","CUP_CAWater2_seafox_EP1","CAWater2_seafox_EP1","CUP_CA_Plants2","CA_Plants2","CUP_CA_Plants2_Plant","CA_Plants2_Plant","CUP_CA_Plants2_Tree","CA_Plants2_Tree","CUP_CA_Plants_E2","CA_Plants_E2","CUP_CA_Plants_E","CA_Plants_E","CUP_CA_Plants_E_Misc","CA_Plants_E_Misc","CUP_CA_Plants_E_Plant","CA_Plants_E_Plant","CUP_CA_Plants_E_Tree","CA_Plants_E_Tree","CUP_Sara_Config","Sara","CUP_Saralite_Config","SaraLite","CUP_CASigns2","CASigns2","CUP_Structures_Config","CAStructures","CUP_CAStructures_A_BuildingWIP","CAStructures_A_BuildingWIP","CUP_CAStructures_A_CraneCon","CAStructures_A_CraneCon","CUP_CAStructuresLand_A_MunicipalOffice","CAStructuresLand_A_MunicipalOffice","CUP_CAStructuresBarn_W","CAStructuresBarn_W","CUP_CAStructures_Castle","CAStructures_Castle","CUP_CAStructuresHouse","CAStructuresHouse","CUP_CAStructuresHouse_A_FuelStation","CAStructuresHouse_A_FuelStation","CUP_CAStructuresHouse_A_Hospital","CAStructuresHouse_A_Hospital","CUP_CAStructuresHouse_A_Office01","CAStructuresHouse_A_Office01","CUP_CAStructuresHouse_A_Office02","CAStructuresHouse_A_Office02","CUP_CAStructuresHouse_a_stationhouse","CAStructuresHouse_a_stationhouse","CUP_CAStructuresHouse_Church_02","CAStructuresHouse_Church_02","CUP_CAStructuresHouse_Church_03","CAStructuresHouse_Church_03","CUP_CAStructuresHouse_Church_05R","CAStructuresHouse_Church_05R","CUP_CAStructuresHouse_HouseBT","CAStructuresHouse_HouseBT","CUP_CAStructuresHouse_HouseV2","CAStructuresHouse_HouseV2","CUP_CAStructuresHouse_HouseV","CAStructuresHouse_HouseV","CUP_CAStructuresLand_Ind_Stack_Big","CAStructuresLand_Ind_Stack_Big","CUP_CAStructures_IndPipe1","CAStructures_IndPipe1","CUP_CAStructuresInd_Quarry","CAStructuresInd_Quarry","CUP_Ind_SawMill","Ind_SawMill","CUP_CAStructures_Mil","CAStructures_Mil","CUP_CAStructures_Misc","CAStructures_Misc","CUP_CAStructures_Misc_Armory","CAStructures_Misc_Armory","CUP_CAStructures_Misc_Armory_Armor_Popuptarget","CAStructures_Misc_Armory_Armor_Popuptarget","CUP_CAStructures_Misc_Powerlines","CAStructures_Misc_Powerlines","CUP_CAStructures_Nav","CAStructures_Nav","CUP_CAStructuresLand_Nav_Boathouse","CAStructuresLand_Nav_Boathouse","CUP_CAStructures_Proxy_BuildingParts","CAStructures_Proxy_BuildingParts","CUP_CAStructures_Proxy_Ruins","CAStructures_Proxy_Ruins","CUP_CAStructures_Rail","CAStructures_Rail","CUP_CAStructuresHouse_rail_station_big","CAStructuresHouse_rail_station_big","CUP_CAStructures_Ruins","CAStructures_Ruins","CUP_CAStructuresShed_Small","CAStructuresShed_Small","CUP_CAStructuresHouse_Shed_Ind","CAStructuresHouse_Shed_Ind","CUP_CAStructures_Wall","CAStructures_Wall","CUP_CAUI","CAUI","CUP_CAWater2_LHD","CAWater2_LHD","CUP_Models_DBE1_Config","Models_DBE1","CUP_Kamenolom_DBE1","Kamenolom_DBE1","CUP_Pila_DBE1","Pila_DBE1","CUP_UI_DBE1","UI_DBE1","CUP_Vysilac_DBE1","Vysilac_DBE1","CUP_Zakladna_DBE1","Zakladna_DBE1","CUP_Sara_dbe1_Config","Sara_dbe1","a3_epoch_structures","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Anims_F_Exp_A","A3_Anims_F_Kart","A3_Anims_F_Mark_Deployment","A3_Language_F_Bootcamp","A3_Language_F_Exp_A","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_Signs_Companies","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Kart_Signs_Companies","A3_UI_F","A3_UI_F_Curator","A3_UI_F_Kart","A3_UI_F_Mark","A3_UI_F_MP_Mark","A3_Weapons_F","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_beta_Rifles_Khaybar","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_Mk20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","CUP_Buildings2_Config","CABuildings2","CUP_A_Crane_02","A_Crane_02","CUP_A_GeneralStore_01","A_GeneralStore_01","CUP_CABuildings2_A_Pub","CABuildings2_A_Pub","CUP_A_statue","A_statue","CUP_Barn_Metal","Barn_Metal","CUP_CABuildingParts","CABuildingParts","CUP_CABuildingParts_Signs","CABuildingParts_Signs","CUP_CATEC","CATEC","CUP_Church_01","Church_01","CUP_Farm_Cowshed","Farm_Cowshed","CUP_Farm_WTower","Farm_WTower","CUP_CAHouseBlock_A","CAHouseBlock_A","CUP_CAHouseBlock_B","CAHouseBlock_B","CUP_CAHouseBlock_C","CAHouseBlock_C","CUP_CAHouseBlock_D","CAHouseBlock_D","CUP_HouseRuins","HouseRuins","CUP_Ind_Dopravnik","Ind_Dopravnik","CUP_Ind_Expedice","Ind_Expedice","CUP_Ind_MalyKomin","Ind_MalyKomin","CUP_Ind_Mlyn","Ind_Mlyn","CUP_Ind_Pec","Ind_Pec","CUP_ind_silomale","ind_silomale","CUP_Ind_SiloVelke","Ind_SiloVelke","CUP_Ind_Vysypka","Ind_Vysypka","CUP_Ind_Garage01","Ind_Garage01","CUP_CAStructures_IndPipe1_todo_delete","CAStructures_IndPipe1_todo_delete","CUP_IndPipe2","IndPipe2","CUP_Ind_Shed_01","Ind_Shed_01","CUP_Ind_Shed_02","Ind_Shed_02","CUP_Ind_Tank","Ind_Tank","CUP_Ind_Workshop01","Ind_Workshop01","CUP_CABuildings2_Misc_Cargo","CABuildings2_Misc_Cargo","CUP_Misc_PowerStation","Misc_PowerStation","CUP_Misc_WaterStation","Misc_WaterStation","CUP_Rail_House_01","Rail_House_01","CUP_Shed_small","Shed_small","CUP_Shed_wooden","Shed_wooden","CUP_particle_effects","particle_effects","CUP_Chernarus_Config","Chernarus","CUP_Chernarus_Summer_Config","Chernarus_Summer","CUP_Desert2_Config","Porto","CUP_Hotfix_Config","CA_Hotfix","CUP_CA_QGClutterHotfix","CA_QGClutterHotfix","CUP_CA_Hotfix_vez_ropa","CA_Hotfix_vez_ropa","CUP_CAMisc2","CAMisc2","CUP_Misc3_Config","CAMisc3","CUP_WarfareBuildings","WarfareBuildings","CUP_Misc_e_Config","CAMisc_E","CUP_CAMisc_E_WF","CAMisc_E_WF","CUP_CAMP_Armory_Misc","CAMP_Armory_Misc","CUP_CAMP_Armory_Misc_Concrete_Wall","CAMP_Armory_Misc_Concrete_Wall","CUP_CAMP_Armory_Misc_Entrance_Gate","CAMP_Armory_Misc_Entrance_Gate","CUP_CAMP_Armory_Misc_Info_Board","CAMP_Armory_Misc_Info_Board","CUP_CAMP_Armory_Misc_Infostands","CAMP_Armory_Misc_Infostands","CUP_CAMP_Armory_Misc_Laptop","CAMP_Armory_Misc_Laptop","CUP_CAMP_Armory_Misc_Loudspeakers","CAMP_Armory_Misc_Loudspeakers","CUP_CAMP_Armory_Misc_Plasticpole","CAMP_Armory_Misc_Plasticpole","CUP_CAMP_Armory_Misc_Red_Light","CAMP_Armory_Misc_Red_Light","CUP_CAMP_Armory_Misc_Sign_Armex","CAMP_Armory_Misc_Sign_Armex","CUP_CAMP_Armory_Misc_Sign_Direction","CAMP_Armory_Misc_Sign_Direction","CUP_CA_Plants2_Bush","CA_Plants2_Bush","CUP_CA_Plants2_Misc","CA_Plants2_Misc","CUP_CA_Plants_E_Bush","CA_Plants_E_Bush","CUP_CA_Plants_PMC","CA_Plants_PMC","CUP_CARoads2Bridge","CARoads2Bridge","CUP_CARoads_PMC_Bridge","CARoads_PMC_Bridge","CUP_A_TVTower","A_TVTower","CUP_CAStructures_Nav_pier","CAStructures_Nav_pier","CUP_CAStructures_Railway","CAStructures_Railway","CUP_Structures_e_Config","CAStructures_E","CUP_CAStructures_E_HouseA","CAStructures_E_HouseA","CUP_CAStructures_E_HouseA_A_BuildingWIP","CAStructures_E_HouseA_A_BuildingWIP","CUP_CAStructures_E_HouseA_A_CityGate1","CAStructures_E_HouseA_A_CityGate1","CUP_CAStructures_E_HouseA_A_Minaret","CAStructures_E_HouseA_A_Minaret","CUP_CAStructures_E_HouseA_A_Minaret_Porto","CAStructures_E_HouseA_A_Minaret_Porto","CUP_CAStructures_E_HouseA_A_Mosque_big","CAStructures_E_HouseA_A_Mosque_big","CUP_CAStructures_E_HouseA_A_Mosque_small","CAStructures_E_HouseA_A_Mosque_small","CUP_CAStructures_E_HouseA_A_Office01","CAStructures_E_HouseA_A_Office01","CUP_CAStructures_E_HouseA_a_stationhouse","CAStructures_E_HouseA_a_stationhouse","CUP_CAStructures_E_HouseA_A_Statue","CAStructures_E_HouseA_A_Statue","CUP_CAStructures_E_HouseA_A_Villa","CAStructures_E_HouseA_A_Villa","CUP_CAStructures_E_HouseC","CAStructures_E_HouseC","CUP_CAStructures_E_HouseK","CAStructures_E_HouseK","CUP_CAStructures_E_HouseL","CAStructures_E_HouseL","CUP_CAStructures_E_Ind","CAStructures_E_Ind","CUP_CAStructures_E_Ind_Ind_Coltan_Mine","CAStructures_E_Ind_Ind_Coltan_Mine","CUP_CAStructures_E_Ind_Ind_FuelStation","CAStructures_E_Ind_Ind_FuelStation","CUP_CAStructures_E_Ind_Ind_Garage01","CAStructures_E_Ind_Ind_Garage01","CUP_CAStructures_E_Ind_Oil_Mine","CAStructures_E_Ind_Oil_Mine","CUP_CAStructures_E_Ind_IndPipes","CAStructures_E_Ind_IndPipes","CUP_CAStructures_E_Ind_Misc_PowerStation","CAStructures_E_Ind_Misc_PowerStation","CUP_CAStructures_E_Ind_Ind_Shed","CAStructures_E_Ind_Ind_Shed","CUP_CAStructures_E_Mil","CAStructures_E_Mil","CUP_CAStructures_E_Misc","CAStructures_E_Misc","CUP_CAStructures_E_Misc_Misc_cables","CAStructures_E_Misc_Misc_cables","CUP_CAStructures_E_Misc_Misc_Construction","CAStructures_E_Misc_Misc_Construction","CUP_CAStructures_E_Misc_Misc_Garbage","CAStructures_E_Misc_Misc_Garbage","CUP_CAStructures_E_Misc_Misc_Interier","CAStructures_E_Misc_Misc_Interier","CUP_CAStructures_E_Misc_Misc_Lamp","CAStructures_E_Misc_Misc_Lamp","CUP_CAStructures_E_Misc_Misc_Market","CAStructures_E_Misc_Misc_Market","CUP_CAStructures_E_Misc_Misc_powerline","CAStructures_E_Misc_Misc_powerline","CUP_CAStructures_E_Misc_Misc_Water","CAStructures_E_Misc_Misc_Water","CUP_CAStructures_E_Misc_Misc_Well","CAStructures_E_Misc_Misc_Well","CUP_CAStructures_E_Wall","CAStructures_E_Wall","CUP_CAStructures_E_Wall_Wall_L","CAStructures_E_Wall_Wall_L","CUP_Structures_pmc_Config","CAStructures_PMC","CUP_CAStructures_PMC_Buildings","CAStructures_PMC_Buildings","CUP_CAStructures_PMC_Buildings_Bunker","CAStructures_PMC_Buildings_Bunker","CUP_CAStructures_PMC_Buildings_GeneralStore_PMC","CAStructures_PMC_Buildings_GeneralStore_PMC","CUP_CAStructures_PMC_Buildings_Ruin_Cowshed","CAStructures_PMC_Buildings_Ruin_Cowshed","CUP_CAStructures_PMC_Ind","CAStructures_PMC_Ind","CUP_CAStructures_PMC_FuelStation","CAStructures_PMC_FuelStation","CUP_CAStructures_PMC_Misc","CAStructures_PMC_Misc","CUP_CAStructures_PMC_Misc_Shed","CAStructures_PMC_Misc_Shed","CUP_CAStructures_PMC_Ruins","CAStructures_PMC_Ruins","CUP_CAStructures_PMC_Walls","CAStructures_PMC_Walls","CUP_Takistan_Config","Takistan","CUP_Utes_Config","Utes","CUP_Zargabad_Config","zargabad","CUP_ibr_plants","ibr_plants","a2_epoch_weapons","A3_epoch_assets","A3_Anims_F_Heli","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_Bootcamp","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Characters_F_Mark","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","3DEN","A3_Data_F_Kart","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta","A3_Missions_F_Gamma","A3_Missions_F_Kart","A3_Modules_F_Bootcamp","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Modules_F_Exp_A","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Props_F_Exp_A_Military_Equipment","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Supplies_F_Mark","A3_UI_F_Bootcamp","A3_UI_F_Exp_A","A3_UI_F_Heli","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc","A3_Weapons_F_Kart","A3_Weapons_F_Mark_Acc","CUP_Afghan_Config","Mountains_ACR","CUP_Bohemia_Config","Woodland_ACR","CUP_Bootcamp_acr_Config","Bootcamp_ACR","CUP_Data_baf_Config","CA_BAF","CUP_Desert_e_Config","Desert_E","CUP_CALanguage_Baf","CALanguage_Baf","CUP_CALanguageMissions_baf","CALanguageMissions_baf","CUP_Misc_acr_Config","CAMisc_ACR","CUP_CAMisc_ACR_3DMarkers","CAMisc_ACR_3DMarkers","CUP_CAMisc_ACR_Container","CAMisc_ACR_Container","CUP_CAMisc_ACR_Dog","CAMisc_ACR_Dog","CUP_CAMisc_ACR_Helpers","CAMisc_ACR_Helpers","CUP_CAMisc_ACR_PBX","CAMisc_ACR_PBX","CUP_CAMisc_ACR_ScaffoldingSmall","CAMisc_ACR_ScaffoldingSmall","CUP_CAMisc_ACR_Shooting_range","CAMisc_ACR_Shooting_range","CUP_CAMisc_ACR_Sign_Mines","CAMisc_ACR_Sign_Mines","CUP_CAMisc_ACR_Targets","CAMisc_ACR_Targets","CUP_CAMisc_ACR_Targets_InvisibleTarget","CAMisc_ACR_Targets_InvisibleTarget","CUP_CAMisc_ACR_TestSphere","CAMisc_ACR_TestSphere","CUP_CAMisc_BAF","CAMisc_BAF","CUP_Provinggrounds_pmc_Config","ProvingGrounds_PMC","CUP_Shapur_baf_Config","Shapur_BAF","CUP_BaseConfig_F","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02","A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Characters_F_Common","A3_Characters_F_Bootcamp_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC","A3_Characters_F_Kart","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Exp_A_Virtual","A3_Data_F_Heli","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_Bootcamp","A3_Missions_F_Curator","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Missions_F_Exp_A","A3_Missions_F_Heli","A3_Missions_F_Mark","A3_Missions_F_MP_Mark","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Truck","A3_Soft_F_Kart_Kart_01","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Weapons_F_Bootcamp","A3_Weapons_F_Mark","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_epoch_language","A3_epoch_vehicles_1","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_CargoPoses_F_Heli","A3_Soft_F_Crusher_UGV","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Heli_Crusher_UGV","CUP_Core","CUP_StandaloneTerrains_Core","CUP_StandaloneTerrains_Core_Faction","CUP_StandaloneTerrains_Core_VehicleClass","CUP_Worlds","CUP_Worlds_Ambient","CUP_Worlds_Author","CUP_Worlds_Clutter","CUP_Worlds_ClutterDist","CUP_Worlds_Delete","CUP_Worlds_DisableInfiniteTerrain","CUP_Worlds_DustEffects","CUP_Worlds_EnvSounds","CUP_Worlds_FullDetailDist","CUP_Worlds_Grid","CUP_Worlds_Intros","CUP_Worlds_Lighting","CUP_Worlds_Lighting_Chernarus","CUP_Worlds_Lighting_Desert","CUP_Worlds_MapSize","CUP_Worlds_MidDetailTexture","CUP_Worlds_NoDetailDist","CUP_Worlds_PictureMap","CUP_Worlds_PictureShot","CUP_Worlds_Seabed","CUP_Worlds_SkyTexture","CUP_Worlds_StreetLamp","CUP_Worlds_Surfaces","CUP_Worlds_Water","A3_epoch_config","CUP_A1_EditorObjects","CUP_A2_EditorObjects","A3_epoch_code","A3_epoch_functions"]; +_whitelistPatches = ["A3Data","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","A3_Language_F_MP_Mark","A3_LanguageMissions_F_MP_Mark","Map_VR","A3_Map_VR_Scenes","CUP_A10_Data","CUP_Afghan_Data","CUP_Air2_Data","CUP_Air3_Data","CUP_Air_Data","CUP_Air_d_baf_Data","CUP_Air_e_Data","CUP_Air_pmc_Data","CUP_CA_animals2","CA_animals2","CUP_Animations_Data","CUP_Animations_Config","CUP_Bohemia_Data","CUP_Bootcamp_acr_Data","CUP_Buildings2_Data","CUP_Buildings2_Ind_Cementworks_Data","CUP_Buildings_Data","CUP_Ca_acr_Data","CUP_CA_Config","CAData","CUP_Ca_e_Data","CUP_Ca_pmc_Data","CUP_Characters2_Data","CUP_Chernarus_Data","CUP_Chernarus_Summer_Data","CUP_Cti_buildings_Data","CUP_CA_Data","CUP_CAData_ParticleEffects","CAData_ParticleEffects","CUP_Data_baf_Data","CUP_dbe1_data","CUP_Desert2_Data","CUP_Desert2_Objects","Desert2_Objects","CUP_Desert_Data","CUP_Desert_e_Data","CUP_Hotfix_Data","CUP_L39_Data","CUP_CALanguage","CALanguage","CUP_CALanguage_ACR","CALanguage_ACR","CUP_CALanguage_missions","CALanguage_missions","CUP_CALanguage_missions_e","CALanguage_missions_e","CUP_Misc3_Data","CUP_CAMisc","CUP_Misc_Data","CAMisc","CUP_Misc_acr_Data","CUP_Misc_e_Data","CUP_CA_MPA","CA_MPA","CUP_CA_Plants2_Clutter","CA_Plants2_Clutter","CUP_CAPlants","CAPlants","CUP_CA_Plants_E_Clutter","CA_Plants_E_Clutter","CUP_Provinggrounds_pmc_Data","CUP_CARoads2","CARoads2","CUP_CARoads2Dam","CARoads2Dam","CUP_CARoads","CARoads","CUP_CARoads_E","CARoads_E","CUP_CARoads_PMC","CARoads_PMC","CUP_CARocks2","CARocks2","CUP_CARocks","CARocks","CUP_CARocks_E","CARocks_E","CUP_Sara_Data","CUP_Saralite_Data","CUP_Shapur_baf_Data","CUP_CASigns","CASigns","CUP_CASigns_E","CASigns_E","CUP_Sounds_Data","CUP_Sounds_Config","CASounds","CUP_Sounds_e_Data","CUP_Structures_Data","CUP_pond_test","pond_test","CUP_Structures_e_Data","CUP_Structures_pmc_Data","CUP_Takistan_Data","CUP_Tracked2_Data","CUP_Tracked_Data","CUP_Tracked_e_Data","CUP_CAFonts","CAFonts","CUP_Utes_Data","CUP_Water2_Data","CUP_Water_Data","CUP_Weapons2_Data","CUP_Weapons_Data","CUP_Weapons_e_Data","CUP_Weapons_pmc_Data","CUP_Wheeled2_Data","CUP_Wheeled_Data","CUP_Wheeled_e_Data","CUP_Zargabad_Data","CUP_A1AlwaysDummy","CAVideo2_PMC","CA_AnimsHotfix","CA_CutSceneAnims","CAIntroAnims","CAUSMCD","CAVoice","CAweapons3_aks74pso","CAWeapons3_ammocrates","CAweapons3_ksvk","CAweapons3_m107","CAweapons3_m16a4_acg_gl","CAweapons3_m16a4_acg","CAweapons3_m16a4_gl","CAweapons3_m16a4","CAWeapons3","CTI_buildingsBmp2_hq","CTI_buildingsM113_hq","DSHkM_Mini","M2HD_Mini","MK19_Tripod","Warfare","WarfareBuildings_Stinger_Twice_static","WarfareBuildings_T72_RACS","WarfareBuildings_TOW_Tripod","CUP_AiA_compat","AiA_A1AlwaysDummy","AiA_Afghan_Config","AiA_Afghan_Data","AiA_BaseConfig_F","AiA_Bohemia_Config","AiA_Bohemia_Data","AiA_Bootcamp_acr_Config","AiA_Bootcamp_acr_Data","AiA_Buildings_Config","AiA_Buildings_Data","AiA_Buildings2_Config","AiA_Buildings2_Data","AiA_Buildings2_Ind_Cementworks_Config","AiA_Buildings2_Ind_Cementworks_Data","AiA_Ca_acr_Config","AiA_Ca_acr_Data","AiA_CA_Config","AiA_CA_Config_Data_ParticleEffects","AiA_CA_Data","AiA_Ca_e_Config","AiA_Ca_e_Data","AiA_Ca_pmc_Config","AiA_Ca_pmc_Data","AiA_CBA_A2_xeh_Dummy","AiA_CBA_OA_xeh_Dummy","AiA_cba_xeh_a2_Dummy","AiA_cba_xeh_oa_Dummy","AiA_Chernarus_Config","AiA_Chernarus_Data","AiA_Chernarus_Summer_Config","AiA_Chernarus_Summer_Data","AiA_Core","AiA_Cti_buildings_Config","AiA_Cti_buildings_Data","AiA_Data_baf_Config","AiA_Data_baf_Data","AiA_Desert_Config","AiA_Desert_Data","AiA_Desert_e_Config","AiA_Desert_e_Data","AiA_Desert2_Config","AiA_Desert2_Data","AiA_Hotfix_Config","AiA_Hotfix_Data","AiA_Language_acr_Config","AiA_Language_acr_Data","AiA_Language_baf_Config","AiA_Language_baf_Data","AiA_Language_e_Config","AiA_Language_e_Data","AiA_Language_pmc_Config","AiA_Language_pmc_Data","AiA_Languagemissions_acr_Config","AiA_Languagemissions_acr_Data","AiA_Languagemissions_baf_Config","AiA_Languagemissions_baf_Data","AiA_Languagemissions_pmc_Config","AiA_Languagemissions_pmc_Data","AiA_Misc_acr_Config","AiA_Misc_acr_Data","AiA_Misc_Config","AiA_Misc_Data","AiA_Misc_e_Config","AiA_Misc_e_Data","AiA_Misc2_Config","AiA_Misc2_Data","AiA_Misc3_Config","AiA_Misc3_Data","AiA_Models_DBE1_Config","AiA_Models_DBE1_Data","AiA_Plants_Config","AiA_Plants_Data","AiA_Plants_e_Config","AiA_Plants_e_Data","AiA_Plants_e2_Config","AiA_Plants_e2_Data","AiA_Plants_pmc_Config","AiA_Plants_pmc_Data","AiA_Plants2_Bush_Config","AiA_Plants2_Bush_Data","AiA_Plants2_Clutter_Config","AiA_Plants2_Clutter_Data","AiA_Plants2_Misc_Config","AiA_Plants2_Misc_Data","AiA_Plants2_Plant_Config","AiA_Plants2_Plant_Data","AiA_Plants2_Tree_Config","AiA_Plants2_Tree_Data","AiA_Provinggrounds_pmc_Config","AiA_Provinggrounds_pmc_Data","AiA_Roads_Config","AiA_Roads_Data","AiA_Roads_e_Config","AiA_Roads_e_Data","AiA_Roads_pmc_Config","AiA_Roads_pmc_Data","AiA_Roads2_Config","AiA_Roads2_Data","AiA_Rocks_Config","AiA_Rocks_Data","AiA_Rocks_e_Config","AiA_Rocks_e_Data","AiA_Rocks2_Config","AiA_Rocks2_Data","AiA_Sara_Config","AiA_Sara_Data","AiA_Sara_dbe1_Config","AiA_Sara_dbe1_Data","AiA_Saralite_Config","AiA_Saralite_Data","AiA_Shapur_baf_Config","AiA_Shapur_baf_Data","AiA_Signs_Config","AiA_Signs_Data","AiA_Signs_e_Config","AiA_Signs_e_Data","AiA_Signs2_Config","AiA_Signs2_Data","AiA_Sounds_Config","AiA_Sounds_Data","AiA_StandaloneTerrainPack_Core","AiA_StandaloneTerrains_Core","AiA_Structures_Config","AiA_Structures_Data","AiA_Structures_e_Config","AiA_Structures_e_Data","AiA_Structures_pmc_Config","AiA_Structures_pmc_Data","AiA_Takistan_Config","AiA_Takistan_Data","AiA_Ui_Config","AiA_Ui_Data","AiA_Utes_Config","AiA_Utes_Data","AiA_Water_Config","AiA_Water_Data","AiA_Water2_Config","AiA_Water2_Data","AiA_Weapons_Config","AiA_Weapons_Data","AiA_Weapons_e_Config","AiA_Weapons_e_Data","AiA_Weapons_pmc_Config","AiA_Weapons_pmc_Data","AiA_Weapons2_Config","AiA_Weapons2_Data","AiA_Wheeled_Config","AiA_Wheeled_Data","AiA_Wheeled_e_Config","AiA_Wheeled_e_Data","AiA_Wheeled2_Config","AiA_Wheeled2_Data","AiA_Worlds","AiA_Worlds_Ambient","AiA_Worlds_Author","AiA_Worlds_Clutter","AiA_Worlds_ClutterDist","AiA_Worlds_Delete","AiA_Worlds_DisableInfiniteTerrain","AiA_Worlds_DustEffects","AiA_Worlds_EnvSounds","AiA_Worlds_FullDetailDist","AiA_Worlds_Grid","AiA_Worlds_Intros","AiA_Worlds_Lighting","AiA_Worlds_Lighting_Chernarus","AiA_Worlds_Lighting_Desert","AiA_Worlds_MapSize","AiA_Worlds_MidDetailTexture","AiA_Worlds_NoDetailDist","AiA_Worlds_Seabed","AiA_Worlds_SkyTexture","AiA_Worlds_StreetLamp","AiA_Worlds_Surfaces","AiA_Worlds_Water","AiA_Zargabad_Config","AiA_Zargabad_Data","CUP_StandaloneTerrains_Dummy","CA_ACR","CA_Animals2_Anim_Config","CA_Anims_Char","CA_Anims_E_Wmn","CA_E","CA_PMC","CAAir","CACharacters","CATracked","CAWater","CAWater2","CAWater2_seafox","CAWeapons","CAWeapons_Warfare_weapons","CAWheeled","CAWheeled_E","CAWheeled2","6G30_DBE1","Arma2_Ka52","BI_SRRS","CA_AH64D","CA_AIR_E_MQ9PredatorB","CA_AIR_E_Su25","CA_AIR2_Su25","CA_Animals_E","CA_Animals2_Chicken","CA_Animals2_Cow","CA_Animals2_Dogs","CA_Animals2_Dogs_Fin","CA_Animals2_Dogs_Pastor","CA_Animals2_Goat","CA_Animals2_Rabbit","CA_Animals2_Sheep","CA_Animals2_WildBoar","CA_Anims","CA_Anims_E","CA_Anims_E_Sdr","CA_Anims_Sdr","CA_Anims_Wmn","CA_CommunityConfigurationProject_E","CA_CruiseMissile","CA_Dubbing","CA_Dubbing_Baf","CA_Dubbing_Counterattack","CA_Dubbing_E","CA_Dubbing_PMC","CA_DubbingRadio_E","CA_DubbingRadio_PMC","CA_E_ParticleEffects","CA_Editor","CA_HC_Sounds","CA_Heads","CA_HighCommand","CA_L39","CA_Missions","CA_Missions_AlternativeInjurySimulation","CA_Missions_AmbientCombat","CA_Missions_Armory1","CA_Missions_Armory2","CA_Missions_BAF","CA_Missions_BAF_2","CA_Missions_BAF_Templates_SecOps","CA_Missions_BattlefieldClearance","CA_Missions_E","CA_Missions_E_Armory2","CA_Missions_E_SecOps","CA_Missions_E_Templates_SecOps","CA_Missions_FirstAidSystem","CA_Missions_GarbageCollector","CA_Missions_PMC","CA_Missions_SecOps","CA_Missions_Templates_SecOps","CA_Missions2_PMC","CA_Modules","CA_Modules_Alice","CA_Modules_Animals","CA_Modules_ARTY","CA_Modules_clouds","CA_Modules_Coin","CA_Modules_DynO","CA_Modules_E","CA_Modules_E_DynO","CA_Modules_E_Jukebox","CA_Modules_E_OO","CA_Modules_E_UAV","CA_Modules_E_UAV_Heli","CA_Modules_E_Weather","CA_Modules_Functions","CA_Modules_Marta","CA_Modules_PMC","CA_Modules_PMC_SimpleFIrstAid","CA_Modules_Silvie","CA_Modules_StratLayer","CA_Modules_UAV","CA_Modules_ZoRA","CA_MPA_Challenges","CA_MPA_Core","CA_MPA_MP","CA_MPA_Scenarios","CA_Sounds_Baf","CA_SoundsMissions_E","CA_Support","CAA10","CAAir_BAF","CAAir_BAF_CH_47F","CAAir_E","CAAir_E_A10","CAAir_E_AH64D","CAAir_E_AH6J","CAAir_E_An2","CAAir_E_C130J","CAAir_E_CH_47F","CAAir_E_Halo","CAAir_E_Mi24","CAAir_E_MI8","CAAir_E_UH1H_EP1","CAAir_E_UH60M","CAAir_PMC","CAAir_PMC_KA137","CAAir_PMC_KA60","CAAir2","CAAir2_C130J","CAAir2_ChukarTarget","CAAir2_F35B","CAAir2_MQ9PredatorB","CAAir2_MV22","CAAir2_Pchela1T","CAAir2_UH1Y","CAAir3","CAAir3_Su34","CAAnimals","CACharacters_BAF","CACharacters_BAF_Head","CACharacters_E","CACharacters_E_Head","CACharacters_PMC","CACharacters_PMC_Head","CACharacters_W_BAF","CACharacters2","CAMisc_fix","CAMisc_fix_A2FREE","CAMisc_fix_air","CAMisc_fix_Ch2","CAMisc_fix_Str","CAMisc_fix_Weap","CAMusic","CAMusic_E","CAMusic_PMC","CASounds_E","CASounds_Missions","CATracked_BAF","CATracked_E","CATracked_E_BMP2","CATracked_E_M1_Abrams","CATracked_E_M113","CATracked_E_M2A2_Bradley","CATracked_E_T34","CATracked_E_T55","CATracked_E_T72","CATracked_E_us_m270mlrs","CATracked_E_ZSU","CATracked_W_BAF","CATracked2","CATracked2_2S6M_Tunguska","CATracked2_AAV","CATracked2_BMP3","CATracked2_T34","CATracked2_T90","CATracked2_us_m270mlrs","CAWater2_Destroyer","CAWater2_fishing_boat","CAWater2_Fregata","CAWater2_smallboat_1","CAWeapons_2b14_82mm_Mortar","CAWeapons_AK","CAWeapons_AmmoBoxes","CAWeapons_BAF","CAWeapons_bizon","CAWeapons_Colt1911","CAWeapons_DMR","CAWeapons_E","CAWeapons_E_AGS","CAWeapons_E_AK","CAWeapons_E_AmmoBoxes","CAWeapons_E_Colt1911","CAWeapons_E_D30","CAWeapons_E_DSHKM","CAWeapons_E_FIM92_static","CAWeapons_E_fnfal","CAWeapons_E_G36","CAWeapons_E_GrenadeLauncher","CAWeapons_E_Igla","CAWeapons_E_Javelin","CAWeapons_E_KORD","CAWeapons_E_ksvk","CAWeapons_E_LeeEnfield","CAweapons_E_m107","CAWeapons_E_M110","CAWeapons_E_M119_Howitzer","CAWeapons_E_M136","CAWeapons_E_M14","CAWeapons_E_M16","CAWeapons_E_M240","CAWeapons_E_M252_81mm_Mortar","CAWeapons_E_M2StaticMG","CAWeapons_E_M47","CAWeapons_E_M9","CAWeapons_E_MAAWS","CAWeapons_E_Makarov","CAWeapons_E_Metis","CAWeapons_E_Mk19_MiniTriPod","CAWeapons_E_PK","CAWeapons_E_Podnos_2b14_82mm","CAWeapons_E_RPG18","CAWeapons_E_RPG7","CAWeapons_E_scar","CAWeapons_E_Searchlight","CAWeapons_E_SPG9","CAWeapons_E_STATIC","CAWeapons_E_Stinger","CAWeapons_E_Strela","CAWeapons_E_TOW","CAWeapons_E_ZU23","CAWeapons_Kord","CAweapons_ksvk","CAWeapons_M1014","CAweapons_m107","CAWeapons_M252_81mm_Mortar","CAWeapons_Metis_AT_13","CAWeapons_PMC","CAWeapons_PMC_AA_12","CAWeapons_PMC_AS50","CAWeapons_PMC_XM8","CAWeapons_Saiga12K","CAWeapons_SPG9","CAWeapons_VSS_vintorez","CAWeapons_ZU23","CAWeapons2","CAWeapons2_HuntingRifle","CAWeapons2_RPG18","CAWeapons2_SMAW","CAWheeled_D_BAF","CAWheeled_E_ATV","CAWheeled_E_BRDM2","CAWheeled_E_BTR40","CAWheeled_E_BTR60","CAWheeled_E_HMMWV","CAWheeled_E_Ikarus","CAWheeled_E_LADA","CAWheeled_E_LandRover","CAWheeled_E_M1030","CAWheeled_E_MTVR","CAWheeled_E_Offroad","CAWheeled_E_Old_bike","CAWheeled_E_Old_moto","CAWheeled_E_Pickup","CAWheeled_E_s1203","CAWheeled_E_SCUD","CAWheeled_E_stryker","CAWheeled_E_SUV","CAWheeled_E_TT650","CAWheeled_E_UAZ","CAWheeled_E_Ural","CAWheeled_E_V3S","CAWheeled_E_Volha","CAWheeled_Offroad","CAWheeled_Pickup","CAWheeled_PMC","CAWheeled_PMC_ArmoredSUV","CAWheeled_W_BAF","CAWheeled2_BTR90","CAWheeled2_GAZ39371","CAWheeled2_HMMWV_Ambulance","CAWheeled2_HMMWV_BASE","CAWheeled2_Ikarus","CAWheeled2_Kamaz","CAWheeled2_LADA","CAWheeled2_LAV25","CAWheeled2_M1114_Armored","CAWheeled2_M998A2_Avenger","CAWheeled2_MMT","CAWheeled2_MTVR","CAWheeled2_TowingTractor","CAWheeled2_V3S","CAWheeled2_VWGolf","CAWheeled3","CAWheeled3_M1030","CAWheeled3_TT650","Datsun_armed_DBE1","DBE1","DBE1_UI","DC3_DBE1","HALO_Test","Hilux_armed_DBE1","Warfare2","Warfare2_E","Warfare2Vehicles","CUP_Models_DBE1_Data","CUP_Anims_DBE1","Anims_DBE1","CUP_HMMWV_DBE1","HMMWV_DBE1","CUP_Mercenary_DBE1","Mercenary_DBE1","CUP_Misc_DBE1","Misc_DBE1","CUP_Music_DBE1","Music_DBE1","CUP_NPCs_DBE1","NPCs_DBE1","CUP_ploty_DBE1","ploty_DBE1","CUP_Prisoners_DBE1","Prisoners_DBE1","CUP_Roads_DBE1","Roads_DBE1","CUP_UH60Desert","UH60Desert","CUP_Sara_dbe1_Data","CUP_TKOH_Dummy","HSim_Data_H","HSim_Data_H_data_ParticleEffects","HSim_Data_H_data_ParticleEffects_rotor_blades","HSim_Dubbing_H","HSim_DubbingRadio_H","HSim_Editor_H","Intro_Island_H","HSim_Missions_H","HSim_ModulesCore_H","HSim_ModulesCore_H_AmbientCombat","HSim_ModulesCore_H_DynO","HSim_ModulesCore_H_Functions","HSim_ModulesCore_H_GarbageCollector","HSim_ModulesCore_H_Functions_E","HSim_ModulesCore_H_OO","HSim_ModulesCore_H_Functions_PMC","HSim_Music_H","HSim_Sounds_H","South_Asia_H","HSim_UIFonts_H","United_States_H","HSim_Animals_H","HSim_Animals_H_Anim_Config","HSim_Animals_H_Dog","HSim_Characters_H_Faces","HSim_Characters_H_Heads","HSim_Modules_H","HSim_UI_H","HSim_Weapons_H","HSim_Weapons_H_AK47","HSim_Weapons_H_DShKM","HSim_Weapons_H_Glock","HSim_Weapons_H_HandItems","HSim_Weapons_H_M16","HSim_Weapons_US_H","HSim_Characters_H","HSim_Characters_US_H","HSim_Missions_H_FreeFlight","HSim_Functions_Base_H","HSim_Water_H","HSim_Water_H_Civ_FishingBoat_Large","HSim_Water_H_Civ_Jetboat","HSim_Water_H_Civ_Yacht","HSim_Water_H_Container_Ship","HSim_Water_H_Cruise_Ship","HSim_Water_H_Destroyer","HSim_Water_H_Fishing_Boat","HSim_Water_H_Fregata","HSim_Water_H_LHD","HSim_Water_H_Oil_tanker","HSim_Water_H_Rubber_Boat","HSim_Water_H_Whales","HSim_Water_H_Whales_GreyWhale","HSim_Water_H_Whales_Whale1","HSim_Weapons_H_IGLA","HSim_Weapons_US_H_M2","HSim_Wheeled_H","HSim_Wheeled_H_Ambulance","HSim_Wheeled_H_FireTruck","HSim_Wheeled_H_Hatchback","HSim_Wheeled_H_Military_Offroad_LR","HSim_Wheeled_H_Military_Pickup_DSHKM","HSim_Wheeled_H_Offroad","HSim_Wheeled_H_Police_Car","HSim_Wheeled_H_TowingTractor","HSim_Wheeled_H_Tractor","HSim_Wheeled_H_Trailers","HSim_Wheeled_H_Truck_Light_Transport","HSim_Wheeled_H_Ural","HSim_Wheeled_H_Van_Passenger","HSim_Wheeled_US_H","HSim_Wheeled_US_H_Military_Offroad","HSim_Wheeled_US_H_Military_Truck","HSim_Wheeled_US_H_Pickup_01","HSim_Wheeled_US_H_Pickup_02","HSim_Wheeled_US_H_SUV","HSim_Wheeled_US_H_Truck_US_Type","HSim_Air_H","HSim_Air_H_Aircraft_A","HSim_Air_H_Aircraft_C","HSim_Air_H_Aircraft_D","HSim_Air_H_Aircraft_E_H","HSim_Air_H_Airliner_A","HSim_Air_H_Airliner_B","HSim_Air_H_Parachute","HSim_Air_US_H","HSim_Air_US_H_Helicopters_Heavy","HSim_Air_US_H_Helicopters_Light","HSim_Air_US_H_Helicopters_Medium","HSim_Misc_H","HSim_Misc_H_Antena","HSim_Misc_H_Barels","HSim_Misc_H_Bleacher","HSim_Misc_H_BoardsPack","HSim_Misc_H_CncBlock","HSim_Misc_H_Doghouse","HSim_Misc_H_Engine_Crane","HSim_Misc_H_Fence","HSim_Misc_H_Fire_Extinguisher","HSim_Misc_H_Fire_Suppression","HSim_Misc_H_First_Aid","HSim_Misc_H_Flagpole","HSim_Misc_H_Folding_Ladder","HSim_Misc_H_FuelCan","HSim_Misc_H_Heliport_Furniture","HSim_Misc_H_Helicopter_Parts","HSim_Misc_H_Helipads","HSim_Misc_H_Heliport_Objects","HSim_Misc_H_Helpers","HSim_Misc_H_Info_Board","HSim_Misc_H_Infostands","HSim_Misc_H_Inspection_Visuals","HSim_Misc_H_Interior","HSim_Misc_H_Loudspeakers","HSim_Misc_H_Market","HSim_Misc_H_Office_Objects","HSim_Misc_H_Perimeter_Ligh","HSim_Misc_H_Pike","HSim_Misc_H_Platform_Cart","HSim_Misc_H_Portable_Generator","HSim_Misc_H_Props","HSim_Misc_H_SawHorse","HSim_Misc_H_Shooting_Range","HSim_Misc_H_Signs","HSim_Misc_H_Sink","HSim_Misc_H_Targets","HSim_Misc_H_Tent","HSim_Misc_H_Toilet","HSim_Misc_H_Tools","HSim_Misc_H_Tools_Racking","HSim_Misc_H_Trash","HSim_Misc_H_Weather_Station","HSim_Misc_H_Weld_Gastank","HSim_Misc_H_Wheel_Chocks","HSim_Misc_H_Wheeled_Scaffolding","HSim_Misc_H_wheeled_tool_cart","HSim_Misc_H_Wheeled_Whiteboard","HSim_Misc_H_Winch","HSim_Misc_H_Windsock","HSim_Misc_H_Workbench","HSim_Misc_H_Wrecks","HSim_Structures_H","HSim_Structures_H_Airport_Papi","HSim_Structures_H_Harbour","HSim_Structures_H_Heliports_Heliport_Big","HSim_Structures_H_Heliports_Heliport_Small","HSim_Structures_H_Industrial_A_CraneCon","HSim_Structures_H_Industrial_Rooftop_Objects","HSim_Structures_US_H","HSim_Structures_US_H_Bld_US","HSim_Structures_US_H_Landmarks_Space_Needle","HSim_Tracked_H","HSim_Tracked_H_BMP2","HSim_Tracked_US_H","HSim_Tracked_US_H_M1A2","HSim_Tracked_US_H_MLRS","HSim_Data_H_EditorGroups","HSim_Anims_H","HSim_Anims_H_config_sdr","HSim_Anims_H_config_wmn","CUP_Hsim_Language_H","Hsim_Language_H","CUP_Hsim_Language_missions_H","Hsim_Language_missions_H","a2_epoch_structures","A3_epoch_assets_1","epoch_objects","A3_epoch_assets_3","Underground_Epoch","A3_epoch_vehicles","a3_epoch_weapons","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Data_F_Bootcamp","A3_Data_F_Exp_A","A3_Data_F_Kart_ParticleEffects","A3_Data_F_Mark","A3_Editor_F","A3_Functions_F_Bootcamp","A3_Functions_F_Curator","A3_Functions_F_Exp_A","A3_Functions_F_Heli","A3_Functions_F_Mark","A3_Functions_F_MP_Mark","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_Language_F_Heli","A3_Language_F_Kart","A3_Language_F_Mark","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_LanguageMissions_F_Kart","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi","A3_Modules_F_Mark","A3_Modules_F_Mark_FiringDrills","A3_Modules_F_MP_Mark","A3_Modules_F_Mark_Objectives","A3_Music_F","A3_Music_F_Bootcamp","A3_Music_F_EPA","A3_Music_F_EPB","A3_Music_F_EPC","A3_Music_F_Heli","A3_Music_F_Mark","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_Bootcamp","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Sounds_F_Exp_A","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_Structures_F_Exp_A","A3_Structures_F_Exp_A_VR_Blocks","A3_Structures_F_Exp_A_VR_Helpers","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_Structures_F_Mark_Items_Military","A3_Structures_F_Mark_Items_Sport","A3_Structures_F_Mark_Mil_Flags","A3_Structures_F_Mark_Training","A3_Structures_F_Mark_VR_Helpers","A3_Structures_F_Mark_VR_Shapes","A3_Structures_F_Mark_VR_Targets","A3_UIFonts_F","CUP_Buildings_Config","CABuildings","CUP_CABuildings_Misc","CABuildings_Misc","CUP_Desert2_Buildings","Desert2_Buildings","CUP_CA_desert2_Characters","CA_desert2_Characters","CUP_Desert_Config","Desert","CUP_DBE1_Hotfix","DBE1_Hotfix","CUP_CALanguage_e","CALanguage_e","CUP_CALanguage_PMC","CALanguage_PMC","CUP_CALanguage_missions_PMC","CALanguage_missions_PMC","CUP_CAWater2_seafox_EP1","CAWater2_seafox_EP1","CUP_CA_Plants2","CA_Plants2","CUP_CA_Plants2_Plant","CA_Plants2_Plant","CUP_CA_Plants2_Tree","CA_Plants2_Tree","CUP_CA_Plants_E2","CA_Plants_E2","CUP_CA_Plants_E","CA_Plants_E","CUP_CA_Plants_E_Misc","CA_Plants_E_Misc","CUP_CA_Plants_E_Plant","CA_Plants_E_Plant","CUP_CA_Plants_E_Tree","CA_Plants_E_Tree","CUP_Sara_Config","Sara","CUP_Saralite_Config","SaraLite","CUP_CASigns2","CASigns2","CUP_Structures_Config","CAStructures","CUP_CAStructures_A_BuildingWIP","CAStructures_A_BuildingWIP","CUP_CAStructures_A_CraneCon","CAStructures_A_CraneCon","CUP_CAStructuresLand_A_MunicipalOffice","CAStructuresLand_A_MunicipalOffice","CUP_CAStructuresBarn_W","CAStructuresBarn_W","CUP_CAStructures_Castle","CAStructures_Castle","CUP_CAStructuresHouse","CAStructuresHouse","CUP_CAStructuresHouse_A_FuelStation","CAStructuresHouse_A_FuelStation","CUP_CAStructuresHouse_A_Hospital","CAStructuresHouse_A_Hospital","CUP_CAStructuresHouse_A_Office01","CAStructuresHouse_A_Office01","CUP_CAStructuresHouse_A_Office02","CAStructuresHouse_A_Office02","CUP_CAStructuresHouse_a_stationhouse","CAStructuresHouse_a_stationhouse","CUP_CAStructuresHouse_Church_02","CAStructuresHouse_Church_02","CUP_CAStructuresHouse_Church_03","CAStructuresHouse_Church_03","CUP_CAStructuresHouse_Church_05R","CAStructuresHouse_Church_05R","CUP_CAStructuresHouse_HouseBT","CAStructuresHouse_HouseBT","CUP_CAStructuresHouse_HouseV2","CAStructuresHouse_HouseV2","CUP_CAStructuresHouse_HouseV","CAStructuresHouse_HouseV","CUP_CAStructuresLand_Ind_Stack_Big","CAStructuresLand_Ind_Stack_Big","CUP_CAStructures_IndPipe1","CAStructures_IndPipe1","CUP_CAStructuresInd_Quarry","CAStructuresInd_Quarry","CUP_Ind_SawMill","Ind_SawMill","CUP_CAStructures_Mil","CAStructures_Mil","CUP_CAStructures_Misc","CAStructures_Misc","CUP_CAStructures_Misc_Armory","CAStructures_Misc_Armory","CUP_CAStructures_Misc_Armory_Armor_Popuptarget","CAStructures_Misc_Armory_Armor_Popuptarget","CUP_CAStructures_Misc_Powerlines","CAStructures_Misc_Powerlines","CUP_CAStructures_Nav","CAStructures_Nav","CUP_CAStructuresLand_Nav_Boathouse","CAStructuresLand_Nav_Boathouse","CUP_CAStructures_Proxy_BuildingParts","CAStructures_Proxy_BuildingParts","CUP_CAStructures_Proxy_Ruins","CAStructures_Proxy_Ruins","CUP_CAStructures_Rail","CAStructures_Rail","CUP_CAStructuresHouse_rail_station_big","CAStructuresHouse_rail_station_big","CUP_CAStructures_Ruins","CAStructures_Ruins","CUP_CAStructuresShed_Small","CAStructuresShed_Small","CUP_CAStructuresHouse_Shed_Ind","CAStructuresHouse_Shed_Ind","CUP_CAStructures_Wall","CAStructures_Wall","CUP_CAUI","CAUI","CUP_CAWater2_LHD","CAWater2_LHD","CUP_Models_DBE1_Config","Models_DBE1","CUP_Kamenolom_DBE1","Kamenolom_DBE1","CUP_Pila_DBE1","Pila_DBE1","CUP_UI_DBE1","UI_DBE1","CUP_Vysilac_DBE1","Vysilac_DBE1","CUP_Zakladna_DBE1","Zakladna_DBE1","CUP_Sara_dbe1_Config","Sara_dbe1","a3_epoch_structures","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Anims_F_Exp_A","A3_Anims_F_Kart","A3_Anims_F_Mark_Deployment","A3_Language_F_Bootcamp","A3_Language_F_Exp_A","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Props_F_Exp_A","A3_Props_F_Exp_A_Military","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_Signs_Companies","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Kart_Signs_Companies","A3_UI_F","A3_UI_F_Curator","A3_UI_F_Kart","A3_UI_F_Mark","A3_UI_F_MP_Mark","A3_Weapons_F","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_beta_Rifles_Khaybar","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","A3_Weapons_F_Mark_LongRangeRifles_DMR_01","A3_Weapons_F_Mark_EBR","A3_Weapons_F_Mark_LongRangeRifles_GM6","A3_Weapons_F_Mark_LongRangeRifles_GM6_camo","A3_Weapons_F_Mark_LongRangeRifles_M320","A3_Weapons_F_Mark_LongRangeRifles_M320_camo","A3_Weapons_F_Mark_Machineguns_M200","A3_Weapons_F_Mark_Machineguns_Zafir","A3_Weapons_F_Mark_Rifles_Khaybar","A3_Weapons_F_Mark_Rifles_Mk20","A3_Weapons_F_Mark_Rifles_MX","A3_Weapons_F_Mark_Rifles_SDAR","A3_Weapons_F_Mark_Rifles_TRG20","CUP_Buildings2_Config","CABuildings2","CUP_A_Crane_02","A_Crane_02","CUP_A_GeneralStore_01","A_GeneralStore_01","CUP_CABuildings2_A_Pub","CABuildings2_A_Pub","CUP_A_statue","A_statue","CUP_Barn_Metal","Barn_Metal","CUP_CABuildingParts","CABuildingParts","CUP_CABuildingParts_Signs","CABuildingParts_Signs","CUP_CATEC","CATEC","CUP_Church_01","Church_01","CUP_Farm_Cowshed","Farm_Cowshed","CUP_Farm_WTower","Farm_WTower","CUP_CAHouseBlock_A","CAHouseBlock_A","CUP_CAHouseBlock_B","CAHouseBlock_B","CUP_CAHouseBlock_C","CAHouseBlock_C","CUP_CAHouseBlock_D","CAHouseBlock_D","CUP_HouseRuins","HouseRuins","CUP_Ind_Dopravnik","Ind_Dopravnik","CUP_Ind_Expedice","Ind_Expedice","CUP_Ind_MalyKomin","Ind_MalyKomin","CUP_Ind_Mlyn","Ind_Mlyn","CUP_Ind_Pec","Ind_Pec","CUP_ind_silomale","ind_silomale","CUP_Ind_SiloVelke","Ind_SiloVelke","CUP_Ind_Vysypka","Ind_Vysypka","CUP_Ind_Garage01","Ind_Garage01","CUP_CAStructures_IndPipe1_todo_delete","CAStructures_IndPipe1_todo_delete","CUP_IndPipe2","IndPipe2","CUP_Ind_Shed_01","Ind_Shed_01","CUP_Ind_Shed_02","Ind_Shed_02","CUP_Ind_Tank","Ind_Tank","CUP_Ind_Workshop01","Ind_Workshop01","CUP_CABuildings2_Misc_Cargo","CABuildings2_Misc_Cargo","CUP_Misc_PowerStation","Misc_PowerStation","CUP_Misc_WaterStation","Misc_WaterStation","CUP_Rail_House_01","Rail_House_01","CUP_Shed_small","Shed_small","CUP_Shed_wooden","Shed_wooden","CUP_particle_effects","particle_effects","CUP_Chernarus_Config","Chernarus","CUP_Chernarus_Summer_Config","Chernarus_Summer","CUP_Desert2_Config","Porto","CUP_Hotfix_Config","CA_Hotfix","CUP_CA_QGClutterHotfix","CA_QGClutterHotfix","CUP_CA_Hotfix_vez_ropa","CA_Hotfix_vez_ropa","CUP_CAMisc2","CAMisc2","CUP_Misc3_Config","CAMisc3","CUP_WarfareBuildings","WarfareBuildings","CUP_Misc_e_Config","CAMisc_E","CUP_CAMisc_E_WF","CAMisc_E_WF","CUP_CAMP_Armory_Misc","CAMP_Armory_Misc","CUP_CAMP_Armory_Misc_Concrete_Wall","CAMP_Armory_Misc_Concrete_Wall","CUP_CAMP_Armory_Misc_Entrance_Gate","CAMP_Armory_Misc_Entrance_Gate","CUP_CAMP_Armory_Misc_Info_Board","CAMP_Armory_Misc_Info_Board","CUP_CAMP_Armory_Misc_Infostands","CAMP_Armory_Misc_Infostands","CUP_CAMP_Armory_Misc_Laptop","CAMP_Armory_Misc_Laptop","CUP_CAMP_Armory_Misc_Loudspeakers","CAMP_Armory_Misc_Loudspeakers","CUP_CAMP_Armory_Misc_Plasticpole","CAMP_Armory_Misc_Plasticpole","CUP_CAMP_Armory_Misc_Red_Light","CAMP_Armory_Misc_Red_Light","CUP_CAMP_Armory_Misc_Sign_Armex","CAMP_Armory_Misc_Sign_Armex","CUP_CAMP_Armory_Misc_Sign_Direction","CAMP_Armory_Misc_Sign_Direction","CUP_CA_Plants2_Bush","CA_Plants2_Bush","CUP_CA_Plants2_Misc","CA_Plants2_Misc","CUP_CA_Plants_E_Bush","CA_Plants_E_Bush","CUP_CA_Plants_PMC","CA_Plants_PMC","CUP_CARoads2Bridge","CARoads2Bridge","CUP_CARoads_PMC_Bridge","CARoads_PMC_Bridge","CUP_A_TVTower","A_TVTower","CUP_CAStructures_Nav_pier","CAStructures_Nav_pier","CUP_CAStructures_Railway","CAStructures_Railway","CUP_Structures_e_Config","CAStructures_E","CUP_CAStructures_E_HouseA","CAStructures_E_HouseA","CUP_CAStructures_E_HouseA_A_BuildingWIP","CAStructures_E_HouseA_A_BuildingWIP","CUP_CAStructures_E_HouseA_A_CityGate1","CAStructures_E_HouseA_A_CityGate1","CUP_CAStructures_E_HouseA_A_Minaret","CAStructures_E_HouseA_A_Minaret","CUP_CAStructures_E_HouseA_A_Minaret_Porto","CAStructures_E_HouseA_A_Minaret_Porto","CUP_CAStructures_E_HouseA_A_Mosque_big","CAStructures_E_HouseA_A_Mosque_big","CUP_CAStructures_E_HouseA_A_Mosque_small","CAStructures_E_HouseA_A_Mosque_small","CUP_CAStructures_E_HouseA_A_Office01","CAStructures_E_HouseA_A_Office01","CUP_CAStructures_E_HouseA_a_stationhouse","CAStructures_E_HouseA_a_stationhouse","CUP_CAStructures_E_HouseA_A_Statue","CAStructures_E_HouseA_A_Statue","CUP_CAStructures_E_HouseA_A_Villa","CAStructures_E_HouseA_A_Villa","CUP_CAStructures_E_HouseC","CAStructures_E_HouseC","CUP_CAStructures_E_HouseK","CAStructures_E_HouseK","CUP_CAStructures_E_HouseL","CAStructures_E_HouseL","CUP_CAStructures_E_Ind","CAStructures_E_Ind","CUP_CAStructures_E_Ind_Ind_Coltan_Mine","CAStructures_E_Ind_Ind_Coltan_Mine","CUP_CAStructures_E_Ind_Ind_FuelStation","CAStructures_E_Ind_Ind_FuelStation","CUP_CAStructures_E_Ind_Ind_Garage01","CAStructures_E_Ind_Ind_Garage01","CUP_CAStructures_E_Ind_Oil_Mine","CAStructures_E_Ind_Oil_Mine","CUP_CAStructures_E_Ind_IndPipes","CAStructures_E_Ind_IndPipes","CUP_CAStructures_E_Ind_Misc_PowerStation","CAStructures_E_Ind_Misc_PowerStation","CUP_CAStructures_E_Ind_Ind_Shed","CAStructures_E_Ind_Ind_Shed","CUP_CAStructures_E_Mil","CAStructures_E_Mil","CUP_CAStructures_E_Misc","CAStructures_E_Misc","CUP_CAStructures_E_Misc_Misc_cables","CAStructures_E_Misc_Misc_cables","CUP_CAStructures_E_Misc_Misc_Construction","CAStructures_E_Misc_Misc_Construction","CUP_CAStructures_E_Misc_Misc_Garbage","CAStructures_E_Misc_Misc_Garbage","CUP_CAStructures_E_Misc_Misc_Interier","CAStructures_E_Misc_Misc_Interier","CUP_CAStructures_E_Misc_Misc_Lamp","CAStructures_E_Misc_Misc_Lamp","CUP_CAStructures_E_Misc_Misc_Market","CAStructures_E_Misc_Misc_Market","CUP_CAStructures_E_Misc_Misc_powerline","CAStructures_E_Misc_Misc_powerline","CUP_CAStructures_E_Misc_Misc_Water","CAStructures_E_Misc_Misc_Water","CUP_CAStructures_E_Misc_Misc_Well","CAStructures_E_Misc_Misc_Well","CUP_CAStructures_E_Wall","CAStructures_E_Wall","CUP_CAStructures_E_Wall_Wall_L","CAStructures_E_Wall_Wall_L","CUP_Structures_pmc_Config","CAStructures_PMC","CUP_CAStructures_PMC_Buildings","CAStructures_PMC_Buildings","CUP_CAStructures_PMC_Buildings_Bunker","CAStructures_PMC_Buildings_Bunker","CUP_CAStructures_PMC_Buildings_GeneralStore_PMC","CAStructures_PMC_Buildings_GeneralStore_PMC","CUP_CAStructures_PMC_Buildings_Ruin_Cowshed","CAStructures_PMC_Buildings_Ruin_Cowshed","CUP_CAStructures_PMC_Ind","CAStructures_PMC_Ind","CUP_CAStructures_PMC_FuelStation","CAStructures_PMC_FuelStation","CUP_CAStructures_PMC_Misc","CAStructures_PMC_Misc","CUP_CAStructures_PMC_Misc_Shed","CAStructures_PMC_Misc_Shed","CUP_CAStructures_PMC_Ruins","CAStructures_PMC_Ruins","CUP_CAStructures_PMC_Walls","CAStructures_PMC_Walls","CUP_Takistan_Config","Takistan","CUP_Utes_Config","Utes","CUP_Zargabad_Config","zargabad","CUP_ibr_plants","ibr_plants","a2_epoch_weapons","A3_epoch_assets","A3_Anims_F_Heli","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_Bootcamp","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Characters_F_Mark","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","3DEN","A3_Data_F_Kart","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta","A3_Missions_F_Gamma","A3_Missions_F_Kart","A3_Modules_F_Bootcamp","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Modules_F_Exp_A","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Props_F_Exp_A_Military_Equipment","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Static_F_Mark_Designator_01","A3_Static_F_Mark_Designator_02","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_Supplies_F_Mark","A3_UI_F_Bootcamp","A3_UI_F_Exp_A","A3_UI_F_Heli","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc","A3_Weapons_F_Kart","A3_Weapons_F_Mark_Acc","CUP_Afghan_Config","Mountains_ACR","CUP_Bohemia_Config","Woodland_ACR","CUP_Bootcamp_acr_Config","Bootcamp_ACR","CUP_Data_baf_Config","CA_BAF","CUP_Desert_e_Config","Desert_E","CUP_CALanguage_Baf","CALanguage_Baf","CUP_CALanguageMissions_baf","CALanguageMissions_baf","CUP_Misc_acr_Config","CAMisc_ACR","CUP_CAMisc_ACR_3DMarkers","CAMisc_ACR_3DMarkers","CUP_CAMisc_ACR_Container","CAMisc_ACR_Container","CUP_CAMisc_ACR_Dog","CAMisc_ACR_Dog","CUP_CAMisc_ACR_Helpers","CAMisc_ACR_Helpers","CUP_CAMisc_ACR_PBX","CAMisc_ACR_PBX","CUP_CAMisc_ACR_ScaffoldingSmall","CAMisc_ACR_ScaffoldingSmall","CUP_CAMisc_ACR_Shooting_range","CAMisc_ACR_Shooting_range","CUP_CAMisc_ACR_Sign_Mines","CAMisc_ACR_Sign_Mines","CUP_CAMisc_ACR_Targets","CAMisc_ACR_Targets","CUP_CAMisc_ACR_Targets_InvisibleTarget","CAMisc_ACR_Targets_InvisibleTarget","CUP_CAMisc_ACR_TestSphere","CAMisc_ACR_TestSphere","CUP_CAMisc_BAF","CAMisc_BAF","CUP_Provinggrounds_pmc_Config","ProvingGrounds_PMC","CUP_Shapur_baf_Config","Shapur_BAF","CUP_BaseConfig_F","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02","A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Characters_F_Common","A3_Characters_F_Bootcamp_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC","A3_Characters_F_Kart","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Exp_A_Virtual","A3_Data_F_Heli","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_Bootcamp","A3_Missions_F_Curator","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Missions_F_Exp_A","A3_Missions_F_Heli","A3_Missions_F_Mark","A3_Missions_F_MP_Mark","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Truck","A3_Soft_F_Kart_Kart_01","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Weapons_F_Bootcamp","A3_Weapons_F_Mark","A3_Weapons_F_Mark_LongRangeRifles_DMR_02","A3_Weapons_F_Mark_LongRangeRifles_DMR_03","A3_Weapons_F_Mark_LongRangeRifles_DMR_04","A3_Weapons_F_Mark_LongRangeRifles_DMR_05","A3_Weapons_F_Mark_LongRangeRifles_DMR_06","A3_Weapons_F_Mark_Machineguns_MMG_01","A3_Weapons_F_Mark_Machineguns_MMG_02","A3_epoch_language","A3_epoch_vehicles_1","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_CargoPoses_F_Heli","A3_Soft_F_Crusher_UGV","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Heli_Crusher_UGV","CUP_Core","CUP_StandaloneTerrains_Core","CUP_StandaloneTerrains_Core_Faction","CUP_StandaloneTerrains_Core_VehicleClass","CUP_Worlds","CUP_Worlds_Ambient","CUP_Worlds_Author","CUP_Worlds_Clutter","CUP_Worlds_ClutterDist","CUP_Worlds_Delete","CUP_Worlds_DisableInfiniteTerrain","CUP_Worlds_DustEffects","CUP_Worlds_EnvSounds","CUP_Worlds_FullDetailDist","CUP_Worlds_Grid","CUP_Worlds_Intros","CUP_Worlds_Lighting","CUP_Worlds_Lighting_Chernarus","CUP_Worlds_Lighting_Desert","CUP_Worlds_MapSize","CUP_Worlds_MidDetailTexture","CUP_Worlds_NoDetailDist","CUP_Worlds_PictureMap","CUP_Worlds_PictureShot","CUP_Worlds_Seabed","CUP_Worlds_SkyTexture","CUP_Worlds_StreetLamp","CUP_Worlds_Surfaces","CUP_Worlds_Water","A3_epoch_config","CUP_A1_EditorObjects","CUP_A2_EditorObjects","A3_epoch_code","A3_epoch_functions"]; _skn_whitelist_cfgPatches = [_serverSettingsConfig, "antihack_whitelistedCfgPatches", _whitelistPatches] call EPOCH_fnc_returnConfigEntry; _skn_adminsOwner = [_serverSettingsConfig, "adminMenu_Owner", []] call EPOCH_fnc_returnConfigEntry; _skn_adminsHigh = [_serverSettingsConfig, "adminMenu_High", []] call EPOCH_fnc_returnConfigEntry; _skn_adminsLow = [_serverSettingsConfig, "adminMenu_Low", []] call EPOCH_fnc_returnConfigEntry; +_banReasons = [ + "Mod mismatch, check that the mods you have enabled match server." +]; _skn_banReason = [_serverSettingsConfig, "antihack_banReason", "EpochMod.com Autoban"] call EPOCH_fnc_returnConfigEntry; +_antihack_banDuration = [_serverSettingsConfig, "antihack_banDuration", 5] call EPOCH_fnc_returnConfigEntry; +_epoch_banReasons = [_serverSettingsConfig, "antihack_banReasons", _banReasons] call EPOCH_fnc_returnConfigEntry; +_kickReasons = [ + "Mod mismatch, check that mods enabled match server." +]; +_epoch_kickReason = [_serverSettingsConfig, "antihack_kickReason", "EpochMod.com Autokick"] call EPOCH_fnc_returnConfigEntry; +_epoch_kickReasons = [_serverSettingsConfig, "antihack_kickReasons", _kickReasons] call EPOCH_fnc_returnConfigEntry; _ownerSettings = ["ESP-PLAYER","ESP-VEHICLE","ESP-LOOT","OLD-ESP","OLD-MAP","PLAYER-TELEPORT","MAP-TELEPORT","INFRONT-TELEPORT","MAP-PLAYER","MAP-CORPSE","MAP-LOOT","MAP-VEHICLE","MAP-AI","MAP-BASEBUILDING","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","TARGET-CRYPTO","TARGET-VEHICLEREPAIR","VEHICLEFLIP","BANPANNEL","SPAWN-MENU","FREE-CAM","INVISIBLE","SPAWNLOOT","GODMODE","HEAL","VEHICLEREPAIR"]; _skn_adminMenuOwnerSetting = [_serverSettingsConfig, "adminMenu_OwnerSetting", _ownerSettings] call EPOCH_fnc_returnConfigEntry; _adminSettings = ["PLAYER-TELEPORT","MAP-TELEPORT","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","VEHICLEFLIP","BANPANNEL"]; @@ -86,30 +98,14 @@ _skn_adminMenuMenuKey = [_serverSettingsConfig, "adminMenu_menuKey", 0x3B] call _skn_adminMenuInfrontTeleport = [_serverSettingsConfig, "adminMenu_infrontTeleport", 0x06] call EPOCH_fnc_returnConfigEntry; _skn_adminMenuBanReasons = [_serverSettingsConfig, "adminMenu_BanReasons", ["Traderzone","Hacking","Glitch","Combat Log"]] call EPOCH_fnc_returnConfigEntry; _skn_adminMenuCryproCfg = [_serverSettingsConfig, "adminMenu_cryptoCfg", [2500,1000,500,100,50,-1000]] call EPOCH_fnc_returnConfigEntry; -_skn_cfgPatchesCfg = [_serverSettingsConfig, "antihack_cfgPatchesCfg", [0]] call EPOCH_fnc_returnConfigEntry; +_skn_cfgPatchesCfg = [_serverSettingsConfig, "antihack_cfgPatchesMode", [2]] call EPOCH_fnc_returnConfigEntry; _skn_PVSPrefix = [_serverSettingsConfig, "antihack_PVSPrefix", "EPAH_"] call EPOCH_fnc_returnConfigEntry; -_skn_customVariablesCheck = [_serverSettingsConfig, "antihack_customVariablesCheck", true] call EPOCH_fnc_returnConfigEntry; -_skn_customVariables = [_serverSettingsConfig, "antihack_customVariables", []] call EPOCH_fnc_returnConfigEntry; // build array with X number of random strings _rndVAR_Count = 84; // 85 = number of (_skn_rndVA deleteAt 0) _skn_rndVA = call compile('epochserver' callExtension format['810|%1', _rndVAR_Count]); EPOCH_hiveWhitelistVarsArray = []; -if (_skn_customVariablesCheck) then{ - _whitelistConfig = _cfg_variablesConfig >> "whitelist"; - _skn_customVariables append(getArray(_whitelistConfig >> "bis")); //BIS Variables - _skn_customVariables append(getArray(_whitelistConfig >> "epoch")); //Epoch Variables - _skn_customVariables append(getArray(_whitelistConfig >> "custom")); //Custom Variables - // Get any automatically added whitelist vars from Learning feature. - _response = ["AH-WhitelistVars", (call EPOCH_fn_InstanceID)] call EPOCH_fnc_server_hiveGETRANGE; - if ((_response select 0) == 1 && (_response select 1) isEqualType []) then{ - if !((_response select 1) isEqualTo[]) then{ - EPOCH_hiveWhitelistVarsArray = _response select 1; - _skn_customVariables append EPOCH_hiveWhitelistVarsArray; - }; - }; -}; // For client PVC _skn_PVC_INDEX = _skn_rndVA deleteAt 0; @@ -150,7 +146,6 @@ if (!_skn_enableAntihack) exitWith { EPOCH_server_isPAdmin = compileFinal ("false"); EPOCH_server_Authed = compileFinal ("true"); EPOCH_server_disconnect = compileFinal("true"); - EPOCH_server_kickToLobby = compileFinal("true"); }; // Check AH init code @@ -250,21 +245,6 @@ _skn_t3 = _skn_rndVA deleteAt 0; _skn_t4 = _skn_rndVA deleteAt 0; _skn_t5 = _skn_rndVA deleteAt 0; -_skn_kickToLobby = _skn_rndVA deleteAt 0; -_skn_whitelistVars = _skn_rndVA deleteAt 0; - -if (_skn_customVariablesCheck) then{ - // Gather all random global vars from AH for whitelist var checks - _skn_customVariables append [_skn_PVC_INDEX,_skn_whitelistVars,_skn_kickToLobby,toLower(_skn_doKickBan),toLower(_skn_doTokenAuth)]; - _skn_customVariables append [_skn_AH_Init,_skn_AH_Code,_skn_AH_Code_CA,_skn_AH_Code_CB,_skn_AH_Ban,_skn_antiTeleportPVC,_skn_Admin_Init]; - _skn_customVariables append [toLower("FW"+_skn_AH_rndVar),toLower("FA"+_skn_AH_rndVar),toLower("FWC"+_skn_AH_rndVar)]; - - // Globally brodcast whitelist vars array - missionNamespace setVariable [_skn_whitelistVars,_skn_customVariables,true]; -}; - -EPOCH_server_kickToLobby = compileFinal ("if !(isNull _this) then {"+_skn_kickToLobby+" = true;(owner _this) publicVariableClient '"+_skn_kickToLobby+"';};"); - _skn_AH_rndVarAHInitCheckToken = _skn_t1+_skn_t2+_skn_t3+_skn_t4+_skn_t5; EPOCH_server_Authed = compileFinal("_this in "+_skn_AH_rndVarAHInitCheck); EPOCH_server_disconnect = compileFinal(" @@ -277,6 +257,27 @@ EPOCH_server_disconnect = compileFinal(" _ret "); +EPOCH_server_movePlayer = compileFinal(" +params [['_playerObj',objNull,[_playerObj]],'_pos']; +if !(isNull _playerObj) then { + "+_skn_antiTeleportPVC+" = true; + (owner _playerObj) publicVariableClient '"+_skn_antiTeleportPVC+"'; + [format['Teleport %1 (%2) To Position: %3', name _playerObj, getPlayerUID _playerObj,_pos], 0] call "+_skn_server_adminLog+"; + [vehicle _playerObj,_pos] spawn { + uiSleep 0.5; + (_this select 0) setPosATL (_this select 1); + }; +}; +"); + +EPOCH_server_teleportCheck = compileFinal(" +params [['_playerObj',objNull,[_playerObj]],'_allow']; +if !(isNull _playerObj) then { + "+_skn_antiTeleportPVC+" = _allow; + (owner _playerObj) publicVariableClient '"+_skn_antiTeleportPVC+"'; +}; +"); + _stringInArray = { private "_ret"; _ret = false; @@ -547,19 +548,9 @@ _sknBanANDSleepQuick = _skn_AH_Ban+"; uiSleep 1"; _sknPatches = []; "_sknPatches pushBack (configName _x)" configClasses (configFile >> "CfgPatches"); {_sknPatches pushBackUnique _x}forEach _skn_whitelist_cfgPatches; -_skn_addonCheckCode = if (_skn_check_addons) then {"[] spawn{_config = '!(configName _x in "+str _sknPatches+")' configClasses (configFile >> 'CfgPatches');if !(_config isEqualTo []) then {[format['Disallowed Addon %1',_config],"+str (_skn_cfgPatchesCfg select 0)+"] call "+_skn_AH_Ban+"}};"} else {""}; +_skn_addonCheckCode = if (_skn_check_addons) then {"[] spawn{_config = '!(configName _x in "+str _sknPatches+")' configClasses (configFile >> 'CfgPatches');if !(_config isEqualTo []) then {[format['Disallowed Addon %1',_config],["+str (_skn_cfgPatchesCfg select 0)+",0]] call "+_skn_AH_Ban+"}};"} else {""}; _skn_fileCheckCode = if (_skn_check_files isEqualTo []) then {""} else {"{if (str(compile preprocessFileLineNumbers (_x select 0)) != str(missionNamespace getVariable [_x select 1,'']))exitWith{[format['Modified File %1 (%2/%3)',_x select 1,count toArray str (compile preprocessFileLineNumbers (_x select 0)),count toArray str(missionNamespace getVariable [_x select 1,''])],0] call "+_skn_AH_Ban+"}} forEach "+str _skn_check_files+";"}; -_sknCustomVarCheckModeCode = [_serverSettingsConfig, "antihack_customVariablesCheckMode", 0] call EPOCH_fnc_returnConfigEntry; -_sknCustomVarCheckCode = if (_skn_customVariablesCheck) then {" -{ - if !(_x in (missionNamespace getVariable ["+str _skn_whitelistVars+",[]])) then{ - [format['(WIP) Unknown Variable (missionNamespace): %1', _x], ["+str _sknCustomVarCheckModeCode+",[toArray(_x)]]] call "+_sknBanANDSleepQuick+"; - } -}forEach(allVariables missionNamespace); -"} else {""}; - - _sknAddActionCheck = if ([_serverSettingsConfig, "antihack_addActionCheck", true] call EPOCH_fnc_returnConfigEntry) then{ " if (player == _ActionVehicle) then[{_ActionCount = _ActionCount + 1}, { _ActionVehicle = player; _ActionCount = 0 }]; _addCase = player addAction['', '', [], -5, false, true, '', 'false']; @@ -584,15 +575,13 @@ call compile("'"+_skn_doTokenAuth+"' addPublicVariableEventHandler { _array = _this select 1; _tokenSet = false; if !([_array select 1, _array select 2] call EPOCH_server_getPToken) exitWith{}; - if ((_array select 0) isEqualType 'STRING') then { - if (_array select 0 == '"+_skn_AH_rndVarAHInitCheckToken+"') then { - _tokenSet = true; - _puid = (_array select 1) getVariable['PUID', '']; - if (_puid != '') then { - if !(_puid in "+_skn_AH_rndVarAHInitCheck+") then { - "+_skn_AH_rndVarAHInitCheck+" pushBack _puid; - diag_log format['DEBUG: player auth token set %1', _array]; - }; + if (_array select 0 isEqualTo '"+_skn_AH_rndVarAHInitCheckToken+"') then { + _tokenSet = true; + _puid = (_array select 1) getVariable['PUID', '']; + if (_puid != '') then { + if !(_puid in "+_skn_AH_rndVarAHInitCheck+") then { + "+_skn_AH_rndVarAHInitCheck+" pushBack _puid; + diag_log format['DEBUG: player auth token set %1', _array]; }; }; }; @@ -604,66 +593,53 @@ call compile("'"+_skn_doTokenAuth+"' addPublicVariableEventHandler { }; };"); - -//[[_case,_time,_name,_uid,_save],[1, 0, 0, 1]] call compile ("'"+_skn_doKickBan+"' addPublicVariableEventHandler { _array = _this select 1; - _player =_array select 2; - if !([_player,_array select 3] call EPOCH_server_getPToken) exitWith { + _array params ['_text','_mode','_player','_token']; + if !([_player,_token] call EPOCH_server_getPToken) exitWith { ['ahe', format['Token is different [%1,%2] %3',if (!isNull _player) then { _player getVariable ['"+_skn_AH_rndVarPlayer+"','']}else{'PlayerObj NULL'}, _array select 3, _array]] call EPOCH_fnc_server_hiveLog; }; - _text = toString(_array select 0); - - _mode = _array select 1; - _data = []; + _text = toString(_text); + _reasonIndex = -1; if (_mode isEqualType []) then{ - _mode = (_array select 1) select 0; - _data = (_array select 1) select 1; + _mode = _mode select 0; + _reasonIndex = _mode select 1; }; - - if (_mode == 0) then{ - ['ahb', format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog; - "+_skn_pv_hackerLog+" pushBack [[0,call "+_skn_server_getRealTime+",name _player,getPlayerUID _player,_text],[1, 0, 0, 1]]; - 'epochserver' callExtension format['820|%1|"+_skn_banReason+"',getPlayerUID _player]; - } else { - if (_mode == 2) then{ - _unknownVar = toString(_data select 0); - _safeVars = missionNamespace getVariable ["+str _skn_whitelistVars+",[]]; - _trusted = "+_str_learningModeCheck+"; - if !(_unknownVar in _safeVars) then{ - if (_trusted) then { - - _safeVars pushBack _unknownVar; - missionNamespace setVariable ["+str _skn_whitelistVars+",_safeVars,true]; - - if !(_unknownVar in EPOCH_hiveWhitelistVarsArray) then{ - EPOCH_hiveWhitelistVarsArray pushBack _unknownVar; - ['AH-WhitelistVars', (call EPOCH_fn_InstanceID), EPOCH_hiveWhitelistVarsArray] call EPOCH_fnc_server_hiveSET; - }; - - ['ahl', format['LEARNING: %1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog; - "+_skn_pv_hackerLog+" pushBack[[1, call "+_skn_server_getRealTime+", name _player, getPlayerUID _player, format['LEARNING: %1',_text]], []]; - } else { - ['ahb', format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog; - "+_skn_pv_hackerLog+" pushBack [[0,call "+_skn_server_getRealTime+",name _player,getPlayerUID _player,_text],[1, 0, 0, 1]]; - _banID = 1; - 'epochserver' callExtension format['820|%1|"+_skn_banReason+" #V%2',getPlayerUID _player,_banID]; - }; + _reason = ''; + _logName = 'ahl'; + _logMode = 1; + _logColor = [1,1,1,1]; + switch _mode do { + case 0: { + _logName = 'ahb'; + _logColor = [1,0,0,1]; + _logMode = 0; + if (_reasonIndex != -1) then { + _reason = "+str(_epoch_banReasons)+" select _reasonIndex; }; - }else { - ['ahl', format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog; - "+_skn_pv_hackerLog+" pushBack[[1, call "+_skn_server_getRealTime+", name _player, getPlayerUID _player, _text], []]; + ['ban', _player , format['"+_skn_banReason+" %1',_reason], "+str(_antihack_banDuration)+"] call EPOCH_serverCommand; + }; + case 2: { + _logName = 'ahk'; + _logColor = [0,0,1,1]; + if (_reasonIndex != -1) then { + _reason = "+str(_epoch_kickReasons)+" select _reasonIndex; + }; + ['kick', _player , format['"+_epoch_kickReason+" %1',_reason]] call EPOCH_serverCommand; }; }; + "+_skn_pv_hackerLog+" pushBack[[_logMode, call "+_skn_server_getRealTime+", name _player, getPlayerUID _player, _text], _logColor]; + [_logName, format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog; + diag_log str([_logName, format['%1 (%2): %3', name _player, getPlayerUID _player, _text]]); { if (_x call EPOCH_server_isPAdmin) then { (owner _x) publicVariableClient '"+_skn_pv_hackerLog+"'; }; - }forEach playableUnits; + }forEach allPlayers; };"); //0 = BAN //1 = LOG -//[2,varname] = Self-learning vars from trusted users. +//2 = KICK _skn_code_ban = compileFinal (" _this set [0,toArray (_this select 0)]; @@ -679,7 +655,7 @@ _skn_code_init = compileFinal (" _start = diag_tickTime; waitUntil {!isNil '"+_skn_AH_Code+"' || (diag_tickTime-_start > 20)}; if (isNil '"+_skn_AH_Code+"') exitWith { - "+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],1,player,Epoch_personalToken]; + "+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],2,player,Epoch_personalToken]; publicVariableServer '"+_skn_doKickBan+"'; (findDisplay 46) closeDisplay 0 }; @@ -694,7 +670,7 @@ _skn_code_init = compileFinal (" }; uiSleep 5; if ((isNil '"+_skn_AH_Code_CA+"') || (isNil '"+_skn_AH_Code_CB+"')) then { - "+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],1,player,Epoch_personalToken]; + "+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],2,player,Epoch_personalToken]; publicVariableServer '"+_skn_doKickBan+"'; (findDisplay 46) closeDisplay 0 }; @@ -964,7 +940,6 @@ _skn_code_antihack = compileFinal (" [format['Changed %1 >> onUnload >> %2', _display, getText(configFile>>_display>>'onUnload')],0] call "+_sknBanANDSleep+"; } }forEach "+str _cfg_displayArray+"; - "+_sknCustomVarCheckCode+" uiSleep ((random 10)+10); }; }; @@ -972,9 +947,6 @@ _skn_code_antihack = compileFinal (" "+_skn_doTokenAuth+" = [_t,player,Epoch_personalToken]; publicVariableServer '"+_skn_doTokenAuth+"'; "+_skn_doTokenAuth+" = nil; - '"+_skn_kickToLobby+"' addPublicVariableEventHandler { - [] spawn {waitUntil {(findDisplay 46) closeDisplay 0; false}} - }; "+_skn_AH_Code_CB+" = true; true "); @@ -1006,7 +978,7 @@ call compile (" if (_x call EPOCH_server_isPAdmin) then { (owner _x) publicVariableClient '"+_skn_pv_adminLog+"'; }; - }forEach playableUnits; + }forEach allPlayers; true }; "); @@ -1192,11 +1164,13 @@ call compile ("'"+_skn_doAdminRequest+"' addPublicVariableEventHandler { _vehLockHiveKey = format['%1:%2', (call EPOCH_fn_InstanceID), _slot]; ['VehicleLock', _vehLockHiveKey, EPOCH_vehicleLockTime, [_lockOwner]] call EPOCH_fnc_server_hiveSETEX; - _config = (configFile >> 'CfgVehicles' >> _item >> 'availableColors'); - if (isArray(_config)) then { - _textureSelectionIndex = configFile >> 'CfgVehicles' >> _item >> 'textureSelectionIndex'; + _cfgEpochVehicles = 'CfgEpochVehicles' call EPOCH_returnConfig; + _availableColorsConfig = (_cfgEpochVehicles >> _item >> 'availableColors'); + + if (isArray(_availableColorsConfig)) then { + _textureSelectionIndex = (_cfgEpochVehicles >> _item >> 'textureSelectionIndex'); _selections = if (isArray(_textureSelectionIndex)) then {getArray(_textureSelectionIndex)} else {[0]}; - _colors = getArray(_config); + _colors = getArray(_availableColorsConfig); _textures = _colors select 0; _color = floor(random(count _textures)); _count = (count _colors) - 1; @@ -1448,6 +1422,7 @@ _skn_admincode = compileFinal (" "+_skn_tg_godMode+" = !"+_skn_tg_godMode+"; if ("+_skn_tg_godMode+") then { ['God Mode',2] call "+_skn_adminLog_PVC+"; + player setVariable ['EPOCH_gm_enabled',true,true]; waitUntil { player setBleedingRemaining 0; player setOxygenRemaining 1; @@ -1460,6 +1435,7 @@ _skn_admincode = compileFinal (" !"+_skn_tg_godMode+" }; player allowDamage true; + player setVariable ['EPOCH_gm_enabled',false,true]; } else { ['God Mode',1] call "+_skn_adminLog_PVC+"; } @@ -1498,7 +1474,7 @@ _skn_admincode = compileFinal (" _cntBuildings = _cntBuildings + 1; }; }forEach (nearestObjects[player, _lootClasses, _this]); - [format['Spawn Loot (%1) for %2 Buildings',_this,_cntBuildings],0] call "+_skn_adminLog_PVC+"; + [format['Looting %2 Buildings within (%1)m',_this,_cntBuildings],0] call "+_skn_adminLog_PVC+"; hint format['Spawned Loot for %1 Buildings',_cntBuildings]; }; "+_skn_old_esp+" = { diff --git a/Sources/epoch_server/init/server_variables.sqf b/Sources/epoch_server/init/server_variables.sqf index 42e9e337..2fc2118a 100644 --- a/Sources/epoch_server/init/server_variables.sqf +++ b/Sources/epoch_server/init/server_variables.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/init/server_init.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/init/server_init.sqf */ EPOCH_BuildingSlots = []; EPOCH_TraderSlots = []; @@ -23,6 +23,8 @@ EPOCH_defaultVars_SEPXVar = compileFinal str(EPOCH_defaultVars); EPOCH_group_upgrade_lvl_SEPXVar = EPOCH_group_upgrade_lvl; EPOCH_staticTraderLocations = []; EPOCH_staticNPCTraderPos = []; +EPOCH_traderStoredVehicles = []; +EPOCH_traderStoredVehiclesCnt = []; _configArray = [ ["serverRestart", false], diff --git a/Sources/epoch_server/system/mission_control.fsm b/Sources/epoch_server/system/mission_control.fsm new file mode 100644 index 00000000..7289473e --- /dev/null +++ b/Sources/epoch_server/system/mission_control.fsm @@ -0,0 +1,315 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"mission_control",0,4346,-225.000000,-400.000000,-125.000000,-350.000000,0.000000,"mission control"}; +item1[] = {"_",8,218,-225.000000,-300.000000,-125.000000,-250.000000,0.000000,""}; +item2[] = {"start",2,250,-225.000000,-225.000000,-125.000000,-175.000000,0.000000,"start"}; +item3[] = {"wait",4,218,-100.000000,-225.000000,0.000000,-175.000000,0.000000,"wait"}; +item4[] = {"commands",2,250,-100.000000,-100.000000,0.000000,-50.000000,0.000000,"commands"}; +item5[] = {"continue",4,218,-225.000000,-100.000000,-125.000000,-50.000000,10.000000,"continue"}; +item6[] = {"end",4,218,-350.000000,25.000000,-250.000000,75.000000,5.000000,"end"}; +item7[] = {"___2",4,218,25.000000,-225.000000,125.000000,-175.000000,0.000000,"0"}; +item8[] = {"end",1,250,-350.000000,-100.000000,-250.000000,-50.000000,0.000000,"end"}; +item9[] = {"add_player",2,250,150.000000,-225.000000,250.000000,-175.000000,0.000000,"add player"}; +item10[] = {"clean_up",2,250,-225.000000,25.000000,-125.000000,75.000000,0.000000,"clean up"}; +item11[] = {"__",4,218,25.000000,-150.000000,125.000000,-100.000000,0.000000,"1"}; +item12[] = {"remove_player",2,250,150.000000,-150.000000,250.000000,-100.000000,0.000000,"remove player"}; +item13[] = {"",7,210,296.000000,46.000000,304.000000,54.000000,0.000000,""}; +item14[] = {"",7,210,296.000000,-204.000000,304.000000,-196.000000,0.000000,""}; +item15[] = {"",7,210,296.000000,-129.000000,304.000000,-120.999992,0.000000,""}; +item16[] = {"",7,210,296.000000,46.000000,304.000000,54.000000,0.000000,""}; +item17[] = {"_",8,218,150.000000,25.000000,250.000000,75.000000,0.000000,""}; +item18[] = {"check_players",2,250,150.000000,125.000000,250.000000,175.000000,0.000000,"check players"}; +item19[] = {"_",8,218,25.000000,25.000000,125.000000,75.000000,0.000000,""}; +item20[] = {"_",8,218,-100.000000,25.000000,0.000000,75.000000,0.000000,""}; +item21[] = {"client_command_",2,250,25.000000,125.000000,125.000000,175.000000,0.000000,"client" \n "command / messages"}; +item22[] = {"___1",4,218,25.000000,-81.163773,124.999992,-31.163784,0.000000,"2"}; +item23[] = {"hold_var",2,250,149.999969,-81.163773,249.999969,-31.163784,0.000000,"hold var"}; +link0[] = {0,1}; +link1[] = {1,2}; +link2[] = {2,3}; +link3[] = {3,4}; +link4[] = {4,7}; +link5[] = {4,11}; +link6[] = {4,22}; +link7[] = {5,2}; +link8[] = {6,8}; +link9[] = {7,9}; +link10[] = {9,14}; +link11[] = {10,5}; +link12[] = {10,6}; +link13[] = {11,12}; +link14[] = {12,15}; +link15[] = {14,15}; +link16[] = {15,16}; +link17[] = {16,17}; +link18[] = {17,18}; +link19[] = {18,19}; +link20[] = {19,21}; +link21[] = {20,10}; +link22[] = {21,20}; +link23[] = {22,23}; +link24[] = {23,15}; +globals[] = {0.000000,0,0,0,0,640,480,1,319,6316128,1,-356.228333,361.065094,273.349731,-454.917542,719,730,1}; +window[] = {2,-1,-1,-32000,-32000,733,208,1233,208,3,737}; +*//*%FSM*/ +class FSM +{ + fsmName = "mission control server"; + class States + { + /*%FSM*/ + class mission_control + { + name = "mission_control"; + init = /*%FSM*/"_clientCmd = [];" \n + "_plyrArr = [];" \n + "" \n + "//Vars" \n + "_plyArrTmp = [];" \n + "" \n + "//Held Var" \n + "_tmpVar = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="start"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class start + { + name = "start"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class wait + { + priority = 0.000000; + to="commands"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _clientCmd > 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class commands + { + name = "commands"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class __ + { + priority = 0.000000; + to="remove_player"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_clientCmd select 1 == 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ___1 + { + priority = 0.000000; + to="hold_var"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_clientCmd select 1 == 2"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ___2 + { + priority = 0.000000; + to="add_player"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_clientCmd select 1 == 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class add_player + { + name = "add_player"; + init = /*%FSM*/"_plyrArr pushBack [_clientCmd select 0,_clientCmd select 2, _clientCmd select 3];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="check_players"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class clean_up + { + name = "clean_up"; + init = /*%FSM*/"_clientCmd = [];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class continue + { + priority = 10.000000; + to="start"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _plyrArr > 0"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + priority = 5.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _plyrArr < 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class remove_player + { + name = "remove_player"; + init = /*%FSM*/"_plyrArrTmp = +_plyrArr;" \n + "_plyrArr = [];" \n + "{" \n + " if!(_x select 0 == _clientCmd select 0)then{" \n + " _plyrArr pushBack _x;" \n + " };" \n + "}forEach _plyrArrTmp;" \n + "_plyrArrTmp = [];" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="check_players"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class check_players + { + name = "check_players"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="client_command_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class client_command_ + { + name = "client_command_"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="clean_up"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class hold_var + { + name = "hold_var"; + init = /*%FSM*/"if( in _plyrArr)then{" \n + "" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + priority = 0.000000; + to="check_players"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="mission_control"; + finalStates[] = + { + "end", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/Sources/epoch_server/system/server_monitor.fsm b/Sources/epoch_server/system/server_monitor.fsm index 41dc4b5b..86aa9232 100644 --- a/Sources/epoch_server/system/server_monitor.fsm +++ b/Sources/epoch_server/system/server_monitor.fsm @@ -1,7 +1,7 @@ /*%FSM*/ /*%FSM*/ /* -item0[] = {"Init",0,250,600.000000,-575.000000,700.000000,-525.000000,0.000000,"Init"}; +item0[] = {"Init",0,4346,600.000000,-575.000000,700.000000,-525.000000,0.000000,"Init"}; item1[] = {"_",8,218,600.000000,-500.000000,700.000000,-450.000000,0.000000,""}; item2[] = {"Process",2,250,600.000000,-350.000000,700.000000,-300.000000,0.000000,"Process"}; item3[] = {"De_simulate_Vehicle",4,218,750.000000,-225.000000,850.000000,-175.000000,2.000000,"De-simulate" \n "Vehicle Check"}; @@ -12,7 +12,7 @@ item7[] = {"Cleanup",4,218,750.000000,-375.000000,850.000000,-325.000000,8.00000 item8[] = {"Events",4,218,450.000000,-225.000000,550.000000,-175.000000,0.000000,"Events"}; item9[] = {"Save_Vehicles",4,218,450.000000,-300.000000,550.000000,-250.000000,4.000000,"Save" \n "Vehicles"}; item10[] = {"Cleanup_Handler",4,218,750.000000,-450.000000,850.000000,-400.000000,8.000000,"Cleanup" \n "Handler"}; -item11[] = {"Server_FPS",4,4314,600.000000,-225.000000,700.000000,-175.000000,0.000000,"Server FPS"}; +item11[] = {"Server_FPS",4,218,600.000000,-225.000000,700.000000,-175.000000,0.000000,"Server FPS"}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,3}; @@ -33,8 +33,8 @@ link16[] = {8,2}; link17[] = {9,2}; link18[] = {10,2}; link19[] = {11,2}; -globals[] = {25.000000,1,0,0,0,640,480,1,3,6316128,1,415.627258,1020.872498,-143.100464,-688.331299,948,880,1}; -window[] = {2,-1,-1,-1,-1,786,-1654,-362,26,3,966}; +globals[] = {25.000000,1,0,0,0,640,480,1,3,6316128,1,275.180084,1161.319580,208.497711,-659.879456,898,880,1}; +window[] = {2,-1,-1,-1,-1,838,78,1370,78,3,916}; *//*%FSM*/ class FSM { @@ -49,8 +49,8 @@ class FSM "" \n "_serverSettingsConfig = configFile >> ""CfgEpochServer"";" \n "_ahInitAuthCfg = [_serverSettingsConfig, ""antihack_ahInitAuthCfg"", [0,180]] call EPOCH_fnc_returnConfigEntry;" \n - "_events = [_serverSettingsConfig, ""events"", [[3600, ""CarnivalSpawner""], [2400, ""EarthQuake""], [1800, ""ChangeWeather""], [1200, ""ContainerSpawner""], [300, ""PlantSpawner""]]] call EPOCH_fnc_returnConfigEntry;" \n - "_simulationHandler = [_serverSettingsConfig, ""simulationHandler"", false] call EPOCH_fnc_returnConfigEntry;" \n + "_events = [_serverSettingsConfig, ""events"", []] call EPOCH_fnc_returnConfigEntry;" \n + "_simulationHandler = [_serverSettingsConfig, ""simulationHandler"", true] call EPOCH_fnc_returnConfigEntry;" \n "" \n "_initAhInitBanOrLog = _ahInitAuthCfg select 0;" \n "_initTimeLimit = _ahInitAuthCfg select 1;" \n @@ -76,7 +76,7 @@ class FSM "_serverFpsTime = diag_tickTime;" \n "_serverFPSCheckFine = true;" \n "" \n - "_safeVehicles = [""I_UAV_01_F"",""B_Heli_Transport_01_F"",""Steerable_Parachute_F"",""NonSteerable_Parachute_F"",""Land_Camping_Light_F""];" \n + "_safeVehicles = [""I_UAV_01_F"",""B_Heli_Transport_01_F"",""Steerable_Parachute_F"",""NonSteerable_Parachute_F"",""Land_Camping_Light_F"",""container_epoch""];" \n "" \n "_delayTimeSim = diag_tickTime;" \n "_delayTimeCMD = diag_tickTime;" \n @@ -294,7 +294,7 @@ class FSM " _deSim = false;" \n " if (crew _selectedVehicle isEqualTo []) then {" \n " if ((getPos _selectedVehicle) select 2 < 1) then {" \n - " if ({isPlayer _selectedVehicle} count (_selectedVehicle nearEntities[[""CAManBase"", ""LandVehicle"", ""Ship"", ""Air"", ""Tank""], 300]) == 0) then {" \n + " if ({isPlayer _x} count (_selectedVehicle nearEntities[[""CAManBase"", ""LandVehicle"", ""Ship"", ""Air"", ""Tank""], 300]) == 0) then {" \n " _selectedVehicle enableSimulationGlobal false;" \n " _deSim = true;" \n " };" \n @@ -319,21 +319,21 @@ class FSM "_playersTemp = [];" \n "{ " \n " if (isPlayer _x) then {" \n - " if (_simulationHandler) then {" \n + "" \n " {" \n " if !(typeOf _x in _safeVehicles) then {" \n " if (_x call EPOCH_server_getVToken) then {" \n - " if !(simulationEnabled _x) then {" \n + " if (_simulationHandler && !(simulationEnabled _x)) then {" \n " _x enableSimulationGlobal true;" \n " _activeVehicles pushBack _x;" \n " };" \n " } else {" \n - " //diag_log format[""DEBUG: vtoken del %1"",_x];" \n + " diag_log format[""DEBUG: Invalid Vehicle Token, deleted %1"",_x];" \n " deleteVehicle _x;" \n " };" \n " };" \n " }forEach (_x nearEntities[[""LandVehicle"", ""Ship"", ""Air"", ""Tank""], 300]);" \n - " };" \n + "" \n "" \n " _pUID = getPlayerUID _x;" \n "" \n @@ -382,18 +382,30 @@ class FSM to="Process"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"((diag_tickTime - _pvehTime) > 20)"/*%FSM*/; - action=/*%FSM*/"_pvehTime = diag_tickTime;" \n + action=/*%FSM*/"// Epoch Events" \n + "_pvehTime = diag_tickTime;" \n "{" \n + " _x params [""_time"", ""_scriptName"", [""_runAtStart"",0],[""_usePrePostfix"",1]];" \n " _eventKey = format[""EPOCH_EVENT_%1"", _forEachIndex];" \n " _lastTime = missionNamespace getVariable _eventKey;" \n " if (isNil ""_lastTime"") then {" \n - " missionNamespace setVariable[_eventKey, diag_tickTime];" \n - " _lastTime = diag_tickTime;" \n + " _startTime = diag_tickTime;" \n + " if (_runAtStart isEqualTo 1) then {" \n + " _startTime = diag_tickTime - _time;" \n + " };" \n + " missionNamespace setVariable[_eventKey, _startTime];" \n + " _lastTime = _startTime;" \n " };" \n - " if ((diag_tickTime - _lastTime) >= (_x select 0)) then {" \n + " if ((diag_tickTime - _lastTime) >= _time) then {" \n " missionNamespace setVariable[_eventKey, diag_tickTime];" \n - " _handle = [] execVM format[""\a3_epoch_server_settings\EpochEvents\%1.sqf"",_x select 1];" \n - " diag_log format[""DEBUG: _event %1"", _x select 1];" \n + " _preFix = """";" \n + " _postFix = """";" \n + " if (_usePrePostfix == 1) then {" \n + " _preFix = ""\epoch_server_settings\EpochEvents\"";" \n + " _postFix = "".sqf"";" \n + " };" \n + " _handle = [] execVM format[""%1%2%3"",_preFix,_scriptName,_postFix];" \n + " diag_log format[""DEBUG: _event %1"", _scriptName];" \n " };" \n "} forEach _events;" \n "" \n @@ -404,20 +416,22 @@ class FSM " diag_log ""server shutdown: locked"";" \n " _serverLocked = true;" \n " [""lock""] call EPOCH_serverCommand;" \n + " } else {" \n + " if (allPlayers isEqualTo []) then {" \n + " [""shutdown""] call EPOCH_serverCommand;" \n + " diag_log ""server shutdown: now"";" \n + " };" \n " };" \n - " " \n " _restartIn = round((_forceRestartTime-diag_tickTime)/60);" \n - "" \n " if (_prevRestartIn != _restartIn) then {" \n " _prevRestartIn = _restartIn;" \n " if (_restartIn > 1) then {" \n - " [""message"", format[""Server restart in %1 minutes"",_restartIn]] call EPOCH_serverCommand;" \n + " [""message"", format[""Server restart in %1 minutes"",_restartIn]] call EPOCH_serverCommand;" \n " } else {" \n - " [""message"", format[""Server restart in %1 minute"",1]] call EPOCH_serverCommand;" \n + " [""message"", format[""Server restart in %1 minute"",1]] call EPOCH_serverCommand;" \n " };" \n " };" \n " };" \n - "" \n " // kick all remaining players before shutdown to force player save" \n " if (diag_tickTime >= _forceRestartTime) then {" \n " if (_serverRestarting) then {" \n @@ -425,15 +439,14 @@ class FSM " diag_log ""server shutdown: now"";" \n " } else {" \n " {" \n - " if (isPlayer _x) then {" \n - " [""kick"", _x , ""Server Restarting""] call EPOCH_serverCommand;" \n - " };" \n - " } forEach playableUnits;" \n - " diag_log format [""server shutdown: kicking players %1"",playableUnits];" \n + " [""kick"", _x , ""Server Restarting""] call EPOCH_serverCommand;" \n + " } forEach allPlayers;" \n " _serverRestarting = true;" \n " };" \n " };" \n - "};"/*%FSM*/; + "};" \n + "" \n + ""/*%FSM*/; }; /*%FSM*/ }; @@ -445,4 +458,4 @@ class FSM { }; }; -/*%FSM*/ \ No newline at end of file +/*%FSM
*/ diff --git a/Sources/epoch_server/treeView.txt b/Sources/epoch_server/treeView.txt new file mode 100644 index 00000000..40dc3888 Binary files /dev/null and b/Sources/epoch_server/treeView.txt differ diff --git a/Sources/epoch_server_core/build.hpp b/Sources/epoch_server_core/build.hpp index a5bcef9e..5f31ef30 100644 --- a/Sources/epoch_server_core/build.hpp +++ b/Sources/epoch_server_core/build.hpp @@ -1 +1 @@ -build=440; +build=560; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf index d30563f7..91ce47c9 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveDEL.sqf */ params ["_prefix","_key"]; "epochserver" callExtension format["400|%1:%2", _prefix, _key]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf index 4d1b8dff..9b3ce64d 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveEXPIRE.sqf */ private ["_call"]; params ["_prefix","_key","_expires"]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf index 794ffb45..029c25f7 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGET.sqf */ private ["_hiveResponse","_hiveStatus","_hiveMessage"]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf index 848ba987..81474b7f 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETBIT.sqf */ private ["_hiveResponse","_hiveStatus","_hiveMessage"]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf index 7eeb267b..b0ba0b41 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETRANGE.sqf */ private["_hiveResponse", "_hiveStatus", "_hiveMessage", "_currentIndex", "_hiveMakeCall", "_data"]; params ["_prefix","_key"]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf index c29a851c..f47a8fe8 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveGETTTL.sqf */ private ["_hiveResponse","_hiveStatus","_hiveMessage","_whileCount"]; params ["_prefix","_key"]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf index 1418849d..f60145d6 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveLog.sqf */ params ["_prefix","_val"]; -"epochserver" callExtension format["700|%1|%2", _prefix, _val]; +"epochserver" callExtension format["701|%1|%2", _prefix, _val]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf index 05f167f1..69a69409 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSET.sqf */ private ["_valueLength","_callStack","_call","_index","_charLimit"]; params ["_prefix","_key","_value"]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf index 710ddd3c..4b923680 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETBIT.sqf */ params ["_prefix","_key","_bitIndex","_value"]; "epochserver" callExtension format["141|%1:%2|%3|%4", _prefix, _key, _bitIndex, _value]; diff --git a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf index 53e077c0..8dfa460b 100644 --- a/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf +++ b/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/compile/epoch_hive/fn_server_hiveSETEX.sqf */ private ["_prefix","_key","_expires","_value","_valueLength","_callStack","_call","_index","_charLimit"]; diff --git a/Sources/epoch_server_core/config.cpp b/Sources/epoch_server_core/config.cpp index e8c81fc6..eaeb64f2 100644 --- a/Sources/epoch_server_core/config.cpp +++ b/Sources/epoch_server_core/config.cpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_core/config.hpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_core/config.hpp */ #define _ARMA_ diff --git a/Sources/epoch_server_core/treeView.txt b/Sources/epoch_server_core/treeView.txt new file mode 100644 index 00000000..28c8b757 Binary files /dev/null and b/Sources/epoch_server_core/treeView.txt differ diff --git a/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf b/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf index ca799f8a..e1d96db7 100644 --- a/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf +++ b/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf @@ -4,7 +4,7 @@ This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. http://creativecommons.org/licenses/by-nc-nd/4.0/ Improvements and or bugfixes and other contributions are welcome via the github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf */ private ["_item","_marker","_ferrisPosition"]; _ferrisPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos; diff --git a/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf b/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf index 79d0de54..9e4bfbbd 100644 --- a/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf +++ b/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf @@ -6,7 +6,7 @@ http://creativecommons.org/licenses/by-nc-nd/4.0/ Improvements and or bugfixes and other contributions are welcome via the github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf */ private ["_tempOVRD","_rainOVRD","_fogOVRD","_overcastOVRD","_windOVRD","_arr","_response","_windValX","_windValZ","_WeatherChangeTime","_force","_rnd_temp","_fog","_rain","_overcast"]; diff --git a/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf b/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf index b86dc08f..0de4bd3d 100644 --- a/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf +++ b/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf @@ -4,7 +4,7 @@ This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. http://creativecommons.org/licenses/by-nc-nd/4.0/ Improvements and or bugfixes and other contributions are welcome via the github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/ContainterSpawner.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/ContainterSpawner.sqf */ private ["_marker","_item","_cargoPosition"]; _cargoPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 1] call BIS_fnc_findSafePos; diff --git a/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf b/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf index eae1ba3e..72600eb3 100644 --- a/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf +++ b/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf @@ -4,7 +4,7 @@ This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. http://creativecommons.org/licenses/by-nc-nd/4.0/ Improvements and or bugfixes and other contributions are welcome via the github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/Earthquake.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/Earthquake.sqf */ private ["_marker","_minerals","_randomIndex","_item","_playersNearEpicenter","_position","_chance"]; _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos; diff --git a/Sources/epoch_server_settings/EpochEvents/FastNights.sqf b/Sources/epoch_server_settings/EpochEvents/FastNights.sqf index c84a40d1..1c0ba512 100644 --- a/Sources/epoch_server_settings/EpochEvents/FastNights.sqf +++ b/Sources/epoch_server_settings/EpochEvents/FastNights.sqf @@ -1,4 +1,4 @@ -if (sunOrMoon >= 0.99) then { // adjust this lower to change sooner. Note: "0.99 value, the twilight is still quite dark" https://community.bistudio.com/wiki/sunOrMoon +if (sunOrMoon < 0.99) then { // adjust this lower to change sooner. Note: "0.99 value, the twilight is still quite dark" https://community.bistudio.com/wiki/sunOrMoon setTimeMultiplier 13 // adjust this value for slower or faster night cycle ( 24 hours will take 1 hour ) } else { setTimeMultiplier 5 // adjust this value for slower or faster day cycle ( 12 hours will take 1 hour ) diff --git a/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf b/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf index d5ea5b67..33bc2839 100644 --- a/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf +++ b/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf @@ -1,35 +1,141 @@ /* - Plant Spawn Event - by Aaron Clark - EpochMod.com + Author/s: + Redbeard Actual + Aaron Clark - EpochMod.com + + Description: + Improved Plant Spawner - Plant Patch Spawner + Event spawns a random number of plants based on plant type. + Prefers "Hill" locations and restricts Jammers and Protected Trader Zones. + Plants now decay after 20 minutes and marker will change to brown at 50%. + Plant patch marker will turn red after one plant is picked + Plants and marker will cleanup after all plants in a patch are picked or die due to decay. + This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. http://creativecommons.org/licenses/by-nc-nd/4.0/ + Improvements and or bugfixes and other contributions are welcome via the github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf */ -private ["_displayName","_marker","_plants","_plant","_item","_plantPosition"]; -_debug = false; -_serverMapConfig = configFile >> "CfgEpoch" >> worldName; -_plantLimit = [_serverMapConfig, "plantLimit", 10] call EPOCH_fnc_returnConfigEntry; +private ["_debug","_jammers","_restricted","_playersNearby","_plant","_position","_plantCount","_scatter","_marker","_nearbyLocations","_plants","_timeStamp","_decayTime","_showPlantMarkers"]; + +// SET THIS TO TRUE TO GET MESSAGES IN LOG. +_debug = true; +_showPlantMarkers = true; + +// select a plant type to spawn +_plant = selectRandom ["Goldenseal_EPOCH", "Goldenseal_EPOCH", "Goldenseal_EPOCH", "Poppy_EPOCH", "Pumpkin_EPOCH"]; + +// START PLANT PATCH SPAWN LIMIT CODE IF EPOCH_plantCounter HAS NOT BEEN INITIATED. +// THIS MAKES SURE IT ONLY DOES THIS BIT THE FIRST TIME THE EVENT RUNS. if (isNil "EPOCH_plantCounter") then { + //SET COUNTER TO ZERO. EPOCH_plantCounter = 0; -} else { - EPOCH_plantCounter = EPOCH_plantCounter + 1; + //SET LIMIT TO FIVE. + EPOCH_plantLimit = 5; }; -if (EPOCH_plantCounter >= _plantLimit) exitWith {if (_debug) then {diag_log "DEBUG: suppressed plant spawn over limit"}}; +//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH. +if (EPOCH_plantCounter >= EPOCH_plantLimit) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed plant spawn over limit"}; +}; -_plantPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos; +// FIND A POSITION FOR PLANT PATCH prefer Hils and Vineyards +_nearbyLocations = nearestLocations [epoch_centerMarkerPosition,["VegetationVineyard","Hill"],EPOCH_dynamicVehicleArea]; +if (_nearbyLocations isEqualTo []) then { + _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos; +} else { + _selectedLocation = locationPosition (selectRandom _nearbyLocations); + _position = [_selectedLocation, 0, 1000, 10, 0, 4000, 0] call BIS_fnc_findSafePos; +}; -if ((count _plantPosition) == 2) then{ - _plants = ["Goldenseal_EPOCH", "Poppy_EPOCH", "Pumpkin_EPOCH"]; - _plant = selectRandom _plants; - _item = createVehicle[_plant, _plantPosition, [], 0.0, "CAN_COLLIDE"]; - if (EPOCH_showShippingContainers) then{ - _displayName = getText(configfile >> "CfgVehicles" >> typeOf _item >> "DisplayName"); - _marker = createMarker[str(_plantPosition), _plantPosition]; +//CHECK FOR PROTECTED AREA WITIN 2000 METERS. +_restricted = nearestObjects [_position, ["ProtectionZone_Invisible_F"], 2000]; +if(count _restricted > 0) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed PLANT PATCH spawn TRADER too close"}; +}; + +//CHECK FOR JAMMERS IN THE AREA WITHIN 1000 METERS. +_jammers = nearestObjects[_position, ["PlotPole_EPOCH"], 1000]; +if(count _jammers > 0) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed PLANT PATCH spawn jammer too close"}; +}; + +//CHECK TO SEE IF PLAYERS WITHIN 900 METERS. +_playersNearby = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 900]; +if(count _playersNearby > 0) exitWith { + if (_debug) then {diag_log "DEBUG: suppressed PLANT PATCH spawn PLAYER too close"}; +}; + +// IF WE MADE IT THIS FAR, WE CAN SPAWN SOME SHIT. +if ((count _position) == 2) then{ + + // vary plant count and scatter by plant type + _plantCount = 1; + _scatter = 10; + _decayTime = 1200; + switch _plant do { + case "Goldenseal_EPOCH": { + _plantCount = (floor(random(4)))+3; + _scatter = 10; + }; + case "Poppy_EPOCH": { + _plantCount = (floor(random(2)))+3; + _scatter = 15; + }; + case "Pumpkin_EPOCH": { + _plantCount = (floor(random(3)))+5; + _scatter = 20; + }; + }; + + _plants = []; + // CREATE THE PATCH OF PLANTS. + for "_i" from 1 to _plantCount step 1 do { + _plants pushBack createVehicle[_plant, _position, [], _scatter, "NONE"]; + }; + _timeStamp = diag_tickTime; + + // SET UP THE MARKER. + if (_showPlantMarkers) then{ + _marker = createMarker[str(_position), _position]; _marker setMarkerShape "ICON"; - _marker setMarkerType "mil_triangle"; - // _marker setMarkerText _displayName; + _marker setMarkerType "waypoint"; _marker setMarkerColor "ColorGreen"; }; + + // TICK COUNTER + 1 SPAWNED PLANT PATCH. + EPOCH_plantCounter = EPOCH_plantCounter + 1; + + // wait loop to handle plant patch + while {true} do { + private _plantsLeft = _plants select {!isNull _x}; + // Wait for all plants to be picked or to decay + if (_plantsLeft isEqualTo [] || (diag_tickTime - _timeStamp) > _decayTime) exitWith { + // TICK THE COUNTER DOWN SO A NEW PLANT PATCH WILL SPAWN TO TAKE ITS PLACE. + EPOCH_plantCounter = EPOCH_plantCounter - 1; + // DELETE THAT MARKER. + if (_showPlantMarkers) then{ + deleteMarker _marker; + }; + // remove any left over "dead" plants (only if decayTime is reached) + {deleteVehicle _x} forEach _plantsLeft; + }; + // set marker to brown to show 50% decay but not if already marked as picked (red). + if !(getMarkerColor _marker in ["ColorRed","ColorBrown"]) then { + if ((diag_tickTime - _timeStamp) > (_decayTime/2)) then { + _marker setMarkerColor "ColorBrown"; + }; + }; + // WAIT FOR A PLAYER TO Pick one plant then set marker to red + if (count _plantsLeft != _plantCount) then { + if (_showPlantMarkers) then{ + if (getMarkerColor _marker != "ColorRed") then { + _marker setMarkerColor "ColorRed"; + }; + }; + }; + sleep 30; + }; }; +// END SCRIPT. diff --git a/Sources/epoch_server_settings/build.hpp b/Sources/epoch_server_settings/build.hpp index a5bcef9e..5f31ef30 100644 --- a/Sources/epoch_server_settings/build.hpp +++ b/Sources/epoch_server_settings/build.hpp @@ -1 +1 @@ -build=440; +build=560; diff --git a/Sources/epoch_server_settings/config.cpp b/Sources/epoch_server_settings/config.cpp index d2e5559b..7c16eb5d 100644 --- a/Sources/epoch_server_settings/config.cpp +++ b/Sources/epoch_server_settings/config.cpp @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/config.cpp + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/config.cpp */ #define _ARMA_ @@ -20,7 +20,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = 0.1; - epochVersion = "0.3.8.0"; + epochVersion = "0.3.9.0"; requiredAddons[] = {}; #include "build.hpp" }; @@ -30,6 +30,8 @@ class CfgPatches { #include "configs\CfgMainTable.h" #include "configs\CfgLootTable.h" #include "configs\CfgLootTable_CUP.h" +// vehicle textures +#include "configs\CfgEpochVehicles.h" // security checks #include "configs\security\security_checks.h" // props template @@ -57,7 +59,9 @@ class CfgEpoch {"NameCityCapital",4}, {"Airport",5} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; + traderHomes[] = {"House", "Building"}; + traderUniforms[] = {"U_OG_leader", "U_C_Poloshirt_stripped", "U_C_Poloshirt_blue", "U_C_Poloshirt_burgundy", "U_C_Poloshirt_tricolour", "U_C_Poloshirt_salmon", "U_C_Poloshirt_redwhite", "U_C_Poor_1", "U_C_WorkerCoveralls", "U_C_Journalist", "U_C_Scientist", "U_OrestesBody"}; containerPos[] = {}; telePos[] = {}; propsPos[] = {}; @@ -220,4 +224,5 @@ class CfgEpoch #include "configs\maps\Utes.h" #include "configs\maps\Woodland_ACR.h" #include "configs\maps\Napf.h" + #include "configs\maps\tanoa.h" }; diff --git a/Sources/epoch_server_settings/configs/CfgEpochVehicles.h b/Sources/epoch_server_settings/configs/CfgEpochVehicles.h new file mode 100644 index 00000000..ac5ee9b7 --- /dev/null +++ b/Sources/epoch_server_settings/configs/CfgEpochVehicles.h @@ -0,0 +1,49 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch Server side config to persist vehicle colors, these are also used to randomly colorize new spawns. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgEpochVehicles.h +*/ +class CfgEpochVehicles +{ + class C_Hatchback_01_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = {{ "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE01_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE02_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE03_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE04_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE05_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE06_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE07_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE08_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_BASE09_CO.paa" }}; + }; + class C_Offroad_01_EPOCH { + textureSelectionIndex[] = {0,1}; + availableColors[] = {{ "\A3\soft_F\Offroad_01\Data\Offroad_01_ext_co.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE01_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE02_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE03_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE04_CO.paa","\A3\soft_F\Offroad_01\Data\Offroad_01_ext_BASE05_CO.paa" }}; + }; + class C_SUV_01_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = {{ "\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_CO.paa","\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_02_CO.paa","\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_03_CO.paa","\A3\Soft_F_Gamma\SUV_01\Data\SUV_01_ext_04_CO.paa" }}; + }; + class C_Van_01_transport_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = {{ "\A3\soft_f_gamma\van_01\Data\van_01_ext_CO.paa","\A3\soft_f_gamma\van_01\Data\van_01_ext_red_CO.paa" }}; + }; + class C_Hatchback_02_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = {{ "\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT01_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT02_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT03_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT04_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT05_CO.paa","\A3\soft_f_gamma\Hatchback_01\data\Hatchback_01_ext_SPORT06_CO.paa" }}; + }; + class C_Quadbike_01_EPOCH { + textureSelectionIndex[] = {0,1}; + availableColors[] = {{ "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLACK_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLUE_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_RED_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_WHITE_CO.paa" },{ "\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLACK_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLUE_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVRED_CO.paa","\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVWHITE_CO.paa" }}; + }; + class C_Van_01_box_EPOCH { + textureSelectionIndex[] = {0}; + availableColors[] = {{ "\A3\soft_f_gamma\van_01\Data\van_01_ext_CO.paa","\A3\soft_f_gamma\van_01\Data\van_01_ext_red_CO.paa" }}; + }; + class C_Heli_Light_01_civil_EPOCH { + textureSelectionIndex[] = { 0 }; + availableColors[] = { { "A3\Air_f\Heli_Light_01\Data\Heli_Light_01_ext_co.paa", "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_blue_co.paa", "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_co.paa", "\a3\air_f\Heli_Light_01\Data\heli_light_01_ext_ion_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_blueLine_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_digital_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_elliptical_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_furious_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_graywatcher_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_jeans_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_light_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_shadow_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sheriff_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_speedy_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_sunset_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_vrana_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_wasp_co.paa", "\a3\air_f\Heli_Light_01\Data\Skins\heli_light_01_ext_wave_co.paa" } }; + }; +}; diff --git a/Sources/epoch_server_settings/configs/CfgLootTable.h b/Sources/epoch_server_settings/configs/CfgLootTable.h index 2551cc41..e5b6affb 100644 --- a/Sources/epoch_server_settings/configs/CfgLootTable.h +++ b/Sources/epoch_server_settings/configs/CfgLootTable.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/CfgLootTable.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgLootTable.h */ class CfgLootTable { @@ -829,6 +829,20 @@ class CfgLootTable { { "Pelt_EPOCH", "magazine" }, 1 } }; }; + class Fin_random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Alsatian_Random_EPOCH + { + items[] = { + { { "DogCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; class Cock_random_EPOCH { items[] = { @@ -848,6 +862,24 @@ class CfgLootTable { { "Pelt_EPOCH", "magazine" }, 1 } }; }; + class EPOCH_RyanZombie_1 + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "Hand", "CfgLootTable" }, 20 }, + { { "HotColdPacks", "CfgLootTable" }, 20 }, + { { "PistolAmmo", "CfgLootTable" }, 20 }, + { { "Pelt_EPOCH", "magazine" }, 10 } + }; + }; + class GreatWhite_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 9 }, + { { "ItemBriefcaseGold100oz", "magazine" }, 1 } + }; + }; class Epoch_Sapper_F { items[] = { diff --git a/Sources/epoch_server_settings/configs/CfgLootTable_CUP.h b/Sources/epoch_server_settings/configs/CfgLootTable_CUP.h index 39365f89..a572d76e 100644 --- a/Sources/epoch_server_settings/configs/CfgLootTable_CUP.h +++ b/Sources/epoch_server_settings/configs/CfgLootTable_CUP.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/CfgLootTable_CUP.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgLootTable_CUP.h */ class CfgLootTable_CUP { @@ -1391,6 +1391,20 @@ class CfgLootTable_CUP { { "Pelt_EPOCH", "magazine" }, 1 } }; }; + class Fin_random_EPOCH + { + items[] = { + { { "GoatCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; + class Alsatian_Random_EPOCH + { + items[] = { + { { "GoatCarcass_EPOCH", "magazine" }, 1 }, + { { "Pelt_EPOCH", "magazine" }, 1 } + }; + }; class Cock_random_EPOCH { items[] = { @@ -1410,6 +1424,24 @@ class CfgLootTable_CUP { { "Pelt_EPOCH", "magazine" }, 1 } }; }; + class EPOCH_RyanZombie_1 + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 5 }, + { { "WhiskeyNoodle", "magazine" }, 5 }, + { { "Hand", "CfgLootTable" }, 20 }, + { { "HotColdPacks", "CfgLootTable" }, 20 }, + { { "PistolAmmo", "CfgLootTable" }, 20 }, + { { "Pelt_EPOCH", "magazine" }, 10 } + }; + }; + class GreatWhite_F + { + items[] = { + { { "MetalBars", "CfgLootTable" }, 9 }, + { { "ItemBriefcaseGold100oz", "magazine" }, 1 } + }; + }; class Epoch_Sapper_F { items[] = { diff --git a/Sources/epoch_server_settings/configs/CfgMainTable.h b/Sources/epoch_server_settings/configs/CfgMainTable.h index aeac6d32..d42433d9 100644 --- a/Sources/epoch_server_settings/configs/CfgMainTable.h +++ b/Sources/epoch_server_settings/configs/CfgMainTable.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/CfgMainTable.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/CfgMainTable.h */ class CfgMainTable { @@ -21,10 +21,11 @@ class CfgMainTable LootMax = 1; tables[] = { "Food" }; antagonists[] = { - { "UAV", 30 }, - { "Cloak", 25 }, // Night = Epoch_Cloak_F, Day = Epoch_Sapper_F - { "Sapper", 25 }, - { "SapperB", 15 }, + { "Zombie", 40 }, + { "UAV", 15 }, + { "Cloak", 10 }, // Night = Epoch_Cloak_F, Day = Epoch_Sapper_F + { "Sapper", 20 }, + { "SapperB", 10 }, { "PHANTOM", 5 } }; }; @@ -61,10 +62,11 @@ class CfgMainTable { "GenericLarge", 18 } }; antagonists[] = { - { "UAV", 30 }, // I_UAV_01_F - { "Cloak", 30 }, // Night = Epoch_Cloak_F, Day = Epoch_Sapper_F - { "Sapper", 25 }, // Epoch_Sapper_F - { "SapperB", 15 } // Epoch_SapperB_F + { "Zombie", 45 }, + { "UAV", 15 }, + { "Cloak", 10 }, // Night = Epoch_Cloak_F, Day = Epoch_Sapper_F + { "Sapper", 20 }, + { "SapperB", 10 } }; }; class TrashSmall : Default @@ -569,6 +571,18 @@ class CfgMainTable LootMax = 4; tables[] = { "Goat_random_EPOCH" }; }; + class Fin_random_EPOCH + { + lootMin = 2; + LootMax = 4; + tables[] = { "Fin_random_EPOCH" }; + }; + class Alsatian_Random_EPOCH + { + lootMin = 2; + LootMax = 4; + tables[] = { "Alsatian_Random_EPOCH" }; + }; class Cock_random_EPOCH { lootMin = 1; @@ -587,6 +601,18 @@ class CfgMainTable LootMax = 1; tables[] = { "Rabbit_EPOCH" }; }; + class Epoch_RyanZombie_1 + { + lootMin = 5; + LootMax = 10; + tables[] = { "EPOCH_RyanZombie_1" }; + }; + class GreatWhite_F + { + lootMin = 5; + LootMax = 10; + tables[] = { "GreatWhite_F" }; + }; class Epoch_Sapper_F { lootMin = 5; diff --git a/Sources/epoch_server_settings/configs/maps/Bootcamp_ACR.h b/Sources/epoch_server_settings/configs/maps/Bootcamp_ACR.h index 11305645..1e917b90 100644 --- a/Sources/epoch_server_settings/configs/maps/Bootcamp_ACR.h +++ b/Sources/epoch_server_settings/configs/maps/Bootcamp_ACR.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Bootcamp_ACR.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Bootcamp_ACR.h */ class Bootcamp_ACR : Default { @@ -29,7 +29,7 @@ class Bootcamp_ACR : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Desert_E.h b/Sources/epoch_server_settings/configs/maps/Desert_E.h index d0a58c33..a73df1c8 100644 --- a/Sources/epoch_server_settings/configs/maps/Desert_E.h +++ b/Sources/epoch_server_settings/configs/maps/Desert_E.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Desert_E.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Desert_E.h */ class Desert_E : Default { @@ -29,7 +29,7 @@ class Desert_E : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Mountains_ACR.h b/Sources/epoch_server_settings/configs/maps/Mountains_ACR.h index 2157dea4..6b1468d9 100644 --- a/Sources/epoch_server_settings/configs/maps/Mountains_ACR.h +++ b/Sources/epoch_server_settings/configs/maps/Mountains_ACR.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Mountains_ACR.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Mountains_ACR.h */ class Mountains_ACR : Default { @@ -29,7 +29,7 @@ class Mountains_ACR : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Napf.h b/Sources/epoch_server_settings/configs/maps/Napf.h index e93095cf..c1b713ad 100644 --- a/Sources/epoch_server_settings/configs/maps/Napf.h +++ b/Sources/epoch_server_settings/configs/maps/Napf.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/woodland_acr.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/woodland_acr.h */ class Napf : Default { @@ -29,7 +29,7 @@ class Napf : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Porto.h b/Sources/epoch_server_settings/configs/maps/Porto.h index dd33578a..73b10ee9 100644 --- a/Sources/epoch_server_settings/configs/maps/Porto.h +++ b/Sources/epoch_server_settings/configs/maps/Porto.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Porto.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Porto.h */ class Porto : Default { @@ -29,7 +29,7 @@ class Porto : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h b/Sources/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h index 6c2680f3..1c0dafae 100644 --- a/Sources/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h +++ b/Sources/epoch_server_settings/configs/maps/ProvingGrounds_PMC.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/ProvingGrounds_PMC.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/ProvingGrounds_PMC.h */ class ProvingGrounds_PMC : Default { @@ -29,7 +29,7 @@ class ProvingGrounds_PMC : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Sara.h b/Sources/epoch_server_settings/configs/maps/Sara.h index 284c8fc9..fa353461 100644 --- a/Sources/epoch_server_settings/configs/maps/Sara.h +++ b/Sources/epoch_server_settings/configs/maps/Sara.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Sara.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Sara.h */ class Sara : Default { @@ -29,7 +29,7 @@ class Sara : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/SaraLite.h b/Sources/epoch_server_settings/configs/maps/SaraLite.h index 772a6cf5..f6b29071 100644 --- a/Sources/epoch_server_settings/configs/maps/SaraLite.h +++ b/Sources/epoch_server_settings/configs/maps/SaraLite.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/SaraLite.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/SaraLite.h */ class SaraLite : Default { @@ -29,7 +29,7 @@ class SaraLite : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Sara_dbe1.h b/Sources/epoch_server_settings/configs/maps/Sara_dbe1.h index ee3fce90..c9bf2e90 100644 --- a/Sources/epoch_server_settings/configs/maps/Sara_dbe1.h +++ b/Sources/epoch_server_settings/configs/maps/Sara_dbe1.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Sara_dbe1.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Sara_dbe1.h */ class Sara_dbe1 : Default { @@ -29,7 +29,7 @@ class Sara_dbe1 : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Shapur_BAF.h b/Sources/epoch_server_settings/configs/maps/Shapur_BAF.h index ed669c32..d0444bee 100644 --- a/Sources/epoch_server_settings/configs/maps/Shapur_BAF.h +++ b/Sources/epoch_server_settings/configs/maps/Shapur_BAF.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Shapur_BAF.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Shapur_BAF.h */ class Shapur_BAF : Default { @@ -29,7 +29,7 @@ class Shapur_BAF : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Utes.h b/Sources/epoch_server_settings/configs/maps/Utes.h index 5fd2b45c..aad53c1d 100644 --- a/Sources/epoch_server_settings/configs/maps/Utes.h +++ b/Sources/epoch_server_settings/configs/maps/Utes.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/Utes.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/Utes.h */ class Utes : Default { @@ -29,7 +29,7 @@ class Utes : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/Woodland_ACR.h b/Sources/epoch_server_settings/configs/maps/Woodland_ACR.h index 92d061e3..f9f44013 100644 --- a/Sources/epoch_server_settings/configs/maps/Woodland_ACR.h +++ b/Sources/epoch_server_settings/configs/maps/Woodland_ACR.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/woodland_acr.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/woodland_acr.h */ class Woodland_ACR : Default { @@ -29,7 +29,7 @@ class Woodland_ACR : Default {"VegetationFir",1}, {"ViewPoint",1} }; - traderBlds[] = {}; + traderBlds[] = {"House", "Building"}; containerPos[] = {}; telePos[] = { // N [-0.286865,8.17383,-10.3098] diff --git a/Sources/epoch_server_settings/configs/maps/altis.h b/Sources/epoch_server_settings/configs/maps/altis.h index 723b1dee..f4da5e52 100644 --- a/Sources/epoch_server_settings/configs/maps/altis.h +++ b/Sources/epoch_server_settings/configs/maps/altis.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/altis.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/altis.h */ class Altis : Default { diff --git a/Sources/epoch_server_settings/configs/maps/australia.h b/Sources/epoch_server_settings/configs/maps/australia.h index d92fc67d..65868d8c 100644 --- a/Sources/epoch_server_settings/configs/maps/australia.h +++ b/Sources/epoch_server_settings/configs/maps/australia.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/australia.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/australia.h */ class Australia : Default { diff --git a/Sources/epoch_server_settings/configs/maps/bornholm.h b/Sources/epoch_server_settings/configs/maps/bornholm.h index a6543d46..df37c507 100644 --- a/Sources/epoch_server_settings/configs/maps/bornholm.h +++ b/Sources/epoch_server_settings/configs/maps/bornholm.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/bornholm.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/bornholm.h */ class Bornholm : Default { diff --git a/Sources/epoch_server_settings/configs/maps/chernarus.h b/Sources/epoch_server_settings/configs/maps/chernarus.h index 414ac7a7..6270190f 100644 --- a/Sources/epoch_server_settings/configs/maps/chernarus.h +++ b/Sources/epoch_server_settings/configs/maps/chernarus.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/chernarus.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/chernarus.h */ class Chernarus : Default { diff --git a/Sources/epoch_server_settings/configs/maps/chernarus_summer.h b/Sources/epoch_server_settings/configs/maps/chernarus_summer.h index 73828ca5..b729f2f1 100644 --- a/Sources/epoch_server_settings/configs/maps/chernarus_summer.h +++ b/Sources/epoch_server_settings/configs/maps/chernarus_summer.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/chernarus.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/chernarus.h */ class Chernarus_Summer : Default { diff --git a/Sources/epoch_server_settings/configs/maps/esseker.h b/Sources/epoch_server_settings/configs/maps/esseker.h index 0bb11ae3..2a0fd8e2 100644 --- a/Sources/epoch_server_settings/configs/maps/esseker.h +++ b/Sources/epoch_server_settings/configs/maps/esseker.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/esseker.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/esseker.h */ class Esseker : Default { diff --git a/Sources/epoch_server_settings/configs/maps/stratis.h b/Sources/epoch_server_settings/configs/maps/stratis.h index f53fd913..5ca2c046 100644 --- a/Sources/epoch_server_settings/configs/maps/stratis.h +++ b/Sources/epoch_server_settings/configs/maps/stratis.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/stratis.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/stratis.h */ class Stratis : Default { diff --git a/Sources/epoch_server_settings/configs/maps/takistan.h b/Sources/epoch_server_settings/configs/maps/takistan.h index 8c4fa470..d907186a 100644 --- a/Sources/epoch_server_settings/configs/maps/takistan.h +++ b/Sources/epoch_server_settings/configs/maps/takistan.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/takistan.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/takistan.h */ class Takistan : Default { diff --git a/Sources/epoch_server_settings/configs/maps/tanoa.h b/Sources/epoch_server_settings/configs/maps/tanoa.h new file mode 100644 index 00000000..644dc812 --- /dev/null +++ b/Sources/epoch_server_settings/configs/maps/tanoa.h @@ -0,0 +1,487 @@ +/* + Author: Aaron Clark - EpochMod.com + + Contributors: + + Description: + Epoch gamemode server Side map specific configs for altis. + + Licence: + Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike + + Github: + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/altis.h +*/ +class Tanoa : Default +{ + worldSize = 0; // 0 = default to worldSize command + plantLimit = 10; + // vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance. + vehicleSpawnTypes[] = { + {"FlatAreaCity",1}, + {"FlatAreaCitySmall",1}, + {"NameCity",2}, + {"NameVillage",1}, + {"NameCityCapital",4}, + {"Airport",5} + }; + + allowedVehiclesList[] = { + {"C_Offroad_01_EPOCH",6}, + {"C_Quadbike_01_EPOCH",6}, + {"C_Hatchback_01_EPOCH",8}, + {"C_Hatchback_02_EPOCH",8}, + {"C_SUV_01_EPOCH",8}, + {"C_Rubberboat_EPOCH",3}, + {"C_Rubberboat_02_EPOCH",3}, + {"C_Rubberboat_03_EPOCH",3}, + {"C_Rubberboat_04_EPOCH",3}, + {"C_Van_01_box_EPOCH",6}, + {"C_Van_01_transport_EPOCH",6}, + {"C_Boat_Civil_01_EPOCH",5}, + {"C_Boat_Civil_01_police_EPOCH",3}, + {"C_Boat_Civil_01_rescue_EPOCH",3}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",3}, + {"I_MRAP_03_EPOCH", 3}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",5}, + {"K01",1}, + {"K02",1}, + {"K03",1}, + {"K04",1}, + {"ebike_epoch",5}, + {"mosquito_epoch",4}, + {"C_Heli_Light_01_civil_EPOCH",3}, + // apex + {"C_Boat_Transport_02_F",1}, + {"C_Scooter_Transport_01_F",3}, + {"C_Offroad_02_unarmed_F",2}, + {"I_C_Offroad_02_unarmed_F",2}, + {"B_T_LSV_01_unarmed_F",2}, + {"O_LSV_02_unarmed_F",2}, + {"O_T_LSV_02_unarmed_F",2}, + {"C_Plane_Civil_01_F",3}, + {"C_Plane_Civil_01_racing_F",1}, + {"B_CTRG_LSV_01_light_F",2}, + {"B_LSV_01_unarmed_F",2}, + {"B_T_VTOL_01_infantry_F",1}, + {"B_T_VTOL_01_vehicle_F",1} + }; + allowedVehiclesList_CUP[] = { + {"C_Offroad_01_EPOCH",4}, + {"C_Quadbike_01_EPOCH",4}, + {"C_Hatchback_01_EPOCH",5}, + {"C_Hatchback_02_EPOCH",5}, + {"C_SUV_01_EPOCH",5}, + {"C_Rubberboat_EPOCH",2}, + {"C_Rubberboat_02_EPOCH",2}, + {"C_Rubberboat_03_EPOCH",2}, + {"C_Rubberboat_04_EPOCH",2}, + {"C_Van_01_box_EPOCH",4}, + {"C_Van_01_transport_EPOCH",4}, + {"C_Boat_Civil_01_EPOCH",5}, + {"C_Boat_Civil_01_police_EPOCH",2}, + {"C_Boat_Civil_01_rescue_EPOCH",2}, + {"B_Heli_Light_01_EPOCH",2}, + {"B_SDV_01_EPOCH",2}, + {"B_MRAP_01_EPOCH",2}, + {"I_MRAP_03_EPOCH", 2}, + {"B_Truck_01_transport_EPOCH",1}, + {"B_Truck_01_covered_EPOCH",2}, + {"B_Truck_01_mover_EPOCH",1}, + {"B_Truck_01_box_EPOCH",1}, + {"O_Truck_02_covered_EPOCH",2}, + {"O_Truck_02_transport_EPOCH",1}, + {"O_Truck_03_covered_EPOCH",1}, + {"O_Truck_02_box_EPOCH",1}, + {"I_Heli_light_03_unarmed_EPOCH",1}, + {"O_Heli_Light_02_unarmed_EPOCH",1}, + {"I_Heli_Transport_02_EPOCH",1}, + {"O_Heli_Transport_04_EPOCH",1}, + {"O_Heli_Transport_04_bench_EPOCH",1}, + {"O_Heli_Transport_04_box_EPOCH",1}, + {"O_Heli_Transport_04_covered_EPOCH",1}, + {"B_Heli_Transport_03_unarmed_EPOCH",1}, + {"jetski_epoch",3}, + {"K01",1}, + {"K02",1}, + {"K03",1}, + {"K04",1}, + {"ebike_epoch",3}, + {"mosquito_epoch",3}, + {"C_Heli_Light_01_civil_EPOCH",2}, + {"CUP_C_Fishing_Boat_Chernarus",2}, + {"CUP_C_LR_Transport_CTK",2}, + {"CUP_B_Zodiac_USMC",2}, + {"CUP_C_Skoda_Red_CIV",2}, + {"CUP_C_Skoda_White_CIV",2}, + {"CUP_C_Skoda_Blue_CIV",2}, + {"CUP_C_Skoda_Green_CIV",2}, + {"CUP_C_SUV_CIV",2}, + {"CUP_B_HMMWV_Transport_USA",2}, + {"CUP_B_HMMWV_Unarmed_USA",2}, + {"CUP_C_SUV_TK",2}, + {"CUP_B_LR_Transport_CZ_D",2}, + {"CUP_C_Datsun_Covered",2}, + {"CUP_C_Datsun_Plain",2}, + {"CUP_C_Datsun_Tubeframe",2}, + {"CUP_C_Datsun_4seat",2}, + {"CUP_C_Datsun",2}, + {"CUP_C_Golf4_green_Civ",2}, + {"CUP_C_Golf4_red_Civ",2}, + {"CUP_C_Golf4_blue_Civ",2}, + {"CUP_C_Golf4_black_Civ",2}, + {"CUP_C_Golf4_kitty_Civ",2}, + {"CUP_C_Golf4_reptile_Civ",2}, + {"CUP_C_Golf4_camodigital_Civ",2}, + {"CUP_C_Golf4_camodark_Civ",2}, + {"CUP_C_Golf4_camo_Civ",2}, + {"CUP_B_M1030",2}, + {"CUP_C_Ural_Civ_03",2}, + {"CUP_C_Ural_Open_Civ_03",2}, + {"CUP_C_Ural_Civ_02",2}, + {"CUP_B_TowingTractor_USMC",2}, + {"CUP_C_C47_CIV",2}, + {"CUP_B_LR_Transport_CZ_W",2}, + {"CUP_C_Golf4_white_Civ",2}, + {"CUP_C_Golf4_whiteblood_Civ",2}, + {"CUP_C_Golf4_yellow_Civ",2}, + {"CUP_C_Octavia_CIV",2}, + {"CUP_C_Ural_Civ_01",2}, + {"CUP_C_Ural_Open_Civ_01",2}, + {"CUP_B_Ural_CDF",2}, + {"CUP_B_Ural_Open_CDF",2}, + {"CUP_C_Ural_Open_Civ_02",2}, + {"CUP_B_HMMWV_Ambulance_USA",2}, + {"CUP_C_UAZ_Unarmed_TK_CIV",2}, + {"CUP_C_UAZ_Open_TK_CIV",2}, + {"CUP_B_UAZ_Unarmed_CDF",2}, + {"CUP_B_Ural_Empty_CDF",2}, + {"CUP_C_DC3_CIV",2}, + //apex + {"C_Boat_Transport_02_F",1}, + {"C_Scooter_Transport_01_F",3}, + {"C_Offroad_02_unarmed_F",2}, + {"I_C_Offroad_02_unarmed_F",2}, + {"B_T_LSV_01_unarmed_F",2}, + {"O_LSV_02_unarmed_F",2}, + {"O_T_LSV_02_unarmed_F",2}, + {"C_Plane_Civil_01_F",3}, + {"C_Plane_Civil_01_racing_F",1}, + {"B_CTRG_LSV_01_light_F",2}, + {"B_LSV_01_unarmed_F",2}, + {"B_T_VTOL_01_infantry_F",1}, + {"B_T_VTOL_01_vehicle_F",1} + }; + + traderBlds[] = { "Land_Kiosk_blueking_F", "Land_FuelStation_Build_F", "Land_CarService_F", "Land_i_Garage_V1_F", "Land_i_Shed_Ind_F", "Land_i_Shop_01_V1_F" }; + + // shipwrecks + containerPos[] = { + {5417.12,7233.08,0}, + {10745.6,5659.3,0}, + {4550.64,7004.8,0}, + {4529.56,7067.6,0}, + {12755.3,5956.91,0}, + {12752.4,5924.02,0}, + {4082.7,9994.33,0}, + {4843.83,12908.4,0}, + {3425.5,4455.52,0}, + {8851.5,14416.5,0}, + {10472.7,14135.5,0}, + {10538.3,14127.5,0} + }; + telePos[] = { + // N [-0.286865,8.17383,-10.3098] + // S [-0.415527,-7.05298,-10.3098] + // E [13.5127,0.410156,-10.3098] + // W [-14.4316,0.112793,-10.3098] + + // template city { "Transport_C_EPOCH", { -0.286865,8.17383,-10.3098 }, "", "north" }, + { "Transport_C_EPOCH", { 13.5127, 0.410156, -10.3098 }, "", { 10861.8,9719.05,0.00154877 } } + }; + propsPos[] = { + { "Land_Plank_01_8m_F", {10825.9,9687.5,4.34509}, {{-0.18613,0.982516,-0.00435473},{0,0.00443219,0.99999}}, false }, + { "Land_VergePost_01_F", {10824.9,9687.63,0.00037384}, {{0,0.999488,-0.0319849},{0.0399682,0.0319593,0.99869}}, false }, + { "Land_VergePost_01_F", {10825.3,9688.75,0.00037384}, {{0,0.999488,-0.0319849},{0.0399682,0.0319593,0.99869}}, false }, + { "Land_BasaltWall_01_d_left_F", {10826.2,9683.1,0.0107498}, {{-0.417547,-0.907955,0.0356858},{0.0506026,0.0159772,0.998591}}, false }, + { "Land_BasaltWall_01_d_right_F", {10822.5,9685.13,-4}, {{-0.418089,-0.908406,0},{0,0,1}}, false }, + { "Land_VergePost_01_F", {10825.1,9686.38,0.000656128}, {{0,0.999091,-0.042629},{0.0506016,0.0425744,0.997811}}, false }, + { "Land_BasaltWall_01_8m_F", {10828.6,9699.25,-0.000549316}, {{-0.88944,0.457037,-0.00365341},{0,0.00799344,0.999968}}, false }, + { "Land_BasaltWall_01_8m_F", {10826,9694.13,-0.00400543}, {{-0.88873,0.45823,0.0135952},{0.0399682,0.0479065,0.998052}}, false }, + { "Land_VergeRock_01_F", {10828.3,9705.53,-0.00518036}, {{-0.858044,0.409576,-0.30985},{-0.249028,0.195842,0.948489}}, false }, + { "Land_VergeRock_01_F", {10829.7,9708.24,0.00521851}, {{-0.86141,0.497614,-0.10175},{-0.244742,-0.231126,0.941638}}, false }, + { "Land_HelipadSquare_F", {10820.3,9724,0}, {{0.895912,-0.444232,0.000203492},{-0.0239937,-0.0479322,0.998562}}, false }, + { "Land_WoodenShelter_01_F", {10855.6,9685.38,0.490318}, {{-0.418326,-0.908297,0},{0,0,1}}, false }, + { "Land_PierLadder_F", {10840.8,9672.88,1.45534}, {{-0.876792,0.48087,0},{0,0,1}}, false }, + { "Land_LampSolar_F", {10848,9678.38,0}, {{0.418215,0.908348,0},{0,0,1}}, false }, + { "Land_Bucket_F", {10857,9685.3,0.00140381}, {{0.00378928,0.996116,0.0879647},{0.0327062,-0.0880417,0.99558}}, false }, + { "Land_SatelliteAntenna_01_F", {10832.5,9674.62,0.000267029}, {{-0.907126,-0.42067,0.0126147},{0.0162691,-0.00509952,0.999855}}, false }, + { "Land_BasaltWall_01_d_left_F", {10835.3,9666.75,2.79601}, {{0.89179,-0.45245,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_d_right_F", {10840.1,9668.75,0.4095}, {{0.533463,-0.453684,-0.713854},{0.774565,-0.0770282,0.627787}}, false }, + { "Land_BasaltWall_01_d_right_F", {10842.5,9663,2.82307}, {{-0.881943,0.427124,0.199352},{0.129564,-0.186967,0.973785}}, false }, + { "Land_BasaltWall_01_d_right_F", {10855.1,9663.5,-0.0284195}, {{0.203571,0.578909,0.789572},{0.46776,-0.765973,0.441006}}, false }, + { "Land_BasaltWall_01_d_right_F", {10838.5,9673.88,-0.00382233}, {{-0.890982,0.452014,0.0428414},{0.042629,-0.0106596,0.999034}}, false }, + { "Land_BasaltWall_01_d_right_F", {10836.9,9670.13,-2.79452}, {{0.890979,-0.452019,-0.0428353},{0.0426252,-0.0106539,0.999034}}, false }, + { "Land_BasaltWall_01_d_right_F", {10854.1,9670.38,-1.78864}, {{-0.417163,-0.908695,-0.0157735},{0.0665176,-0.047837,0.996638}}, false }, + { "Land_Screwdriver_V2_F", {10855.6,9685.44,0.869125}, {{0.984712,0.174191,0},{0,0,1}}, true }, + { "Land_Pliers_F", {10855.8,9685.33,0.869003}, {{0,0.99615,0.08766},{0.0587838,-0.0875084,0.994428}}, true }, + { "Land_GasTank_01_khaki_F", {10854.1,9686.25,0.00346375}, {{0.00158332,0.996457,0.0840863},{0.0590944,-0.0840327,0.994709}}, false }, + { "Land_GasTank_01_blue_F", {10853.8,9685.55,0.003685}, {{0.00191173,0.996118,0.0880109},{0.058778,-0.0879709,0.994387}}, false }, + { "Land_DuctTape_F", {10855.6,9684.9,0.869217}, {{0,0.99615,0.08766},{0.0587838,-0.0875084,0.994428}}, true }, + { "Land_CanisterFuel_F", {10857.5,9685.6,0.00208282}, {{0.928952,0.369941,-0.01383},{0.0446592,-0.0749013,0.99619}}, false }, + { "Land_CanisterOil_F", {10855,9685.82,0.871353}, {{0,0.99615,0.08766},{0.0587838,-0.0875084,0.994428}}, true }, + { "Land_WoodenTable_small_F", {10855.3,9685.34,0.00466919}, {{-0.894687,0.437326,0.0910003},{0.0583365,-0.0875827,0.994448}}, false }, + { "Land_PortableGenerator_01_F", {10855.6,9683.23,0.00447845}, {{0.922644,-0.375624,-0.0873781},{0.0617802,-0.0796853,0.994904}}, false }, + { "Land_BasaltWall_01_8m_F", {10845,9668.63,0.0174866}, {{-0.877528,0.437548,0.196207},{0.163119,-0.112394,0.980184}}, false }, + { "Land_BasaltWall_01_8m_F", {10838,9677.5,0.00291443}, {{-0.417791,-0.908191,0.0252842},{0.037308,0.0106566,0.999247}}, false }, + { "Land_BasaltWall_01_8m_F", {10849.1,9672.5,0.0227737}, {{-0.413821,-0.909847,0.0305008},{0.142525,-0.0316603,0.989285}}, false }, + { "Land_BasaltWall_01_8m_F", {10831.6,9680.5,0.00193024}, {{-0.417962,-0.908379,0.0124403},{0.0239934,0.00265128,0.999709}}, false }, + { "Land_Plank_01_8m_F", {10843.3,9675.5,4.33302}, {{0.931729,-0.355112,-0.0760085},{0.0304955,-0.132053,0.990773}}, false }, + { "Land_ClutterCutter_large_F", {10855.8,9682.88,0}, {{0.423861,0.904478,0.0475501},{0.0638687,-0.0822167,0.994566}}, false }, + { "Land_GardenPavement_02_F", {10858.2,9709.46,-0.000534058}, {{0.895034,-0.443057,-0.0511276},{0.0319849,-0.0505767,0.998208}}, false }, + { "Land_MetalShelter_02_F", {10859.4,9702.13,7.62939e-006}, {{0.899233,-0.43747,0},{0,0,1}}, false }, + { "Land_WoodenCrate_01_stack_x3_F", {10853.1,9696.75,0.00328064}, {{0,0.998284,0.0585653},{0.0266571,-0.0585445,0.997929}}, false }, + { "Land_WoodenTable_large_F", {10859.6,9701.22,0.00506592}, {{0.893074,-0.447018,-0.0509379},{0.0263704,-0.0610144,0.997789}}, false }, + { "Land_WoodenTable_large_F", {10858.8,9705.1,0.0014801}, {{0.892976,-0.447567,-0.0477334},{0.02666,-0.0532701,0.998224}}, false }, + { "Land_WoodenTable_large_F", {10856.5,9706.22,0.000450134}, {{0.893218,-0.447329,-0.0453635},{0.0235026,-0.0543026,0.998248}}, false }, + { "Land_WoodenTable_large_F", {10857.4,9702.35,0.0014267}, {{0.892942,-0.447506,-0.0489048},{0.0293483,-0.0505353,0.998291}}, false }, + { "Land_WoodenTable_large_F", {10855.1,9703.47,0.00170898}, {{0.892685,-0.447489,-0.0535335},{0.0345198,-0.0505438,0.998125}}, false }, + { "Land_Bench_F", {10857.6,9695.48,0.00614929}, {{0.997702,-0.0398336,-0.0548162},{0.052284,-0.0620493,0.996703}}, false }, + { "Land_StallWater_F", {10846.1,9714.38,0.000305176}, {{-0.940044,-0.340477,-0.0198358},{-0.0239912,0.00799859,0.99968}}, false }, + { "Land_LampSolar_F", {10849.4,9712,7.62939e-006}, {{0.418215,0.908348,0},{0,0,1}}, false }, + { "Land_Wreck_CarDismantled_F", {10858.1,9690.88,0.0236511}, {{-0.998398,-0.0456685,0.0333994},{0.037308,-0.0876004,0.995457}}, false }, + { "Land_WoodenCrate_01_F", {10852.5,9699.11,0.00148773}, {{0.892324,-0.447598,-0.0584305},{0.0399932,-0.0505411,0.997921}}, false }, + { "Land_WoodenCrate_01_F", {10852.5,9699.11,0.602295}, {{0.892438,-0.447377,-0.0583847},{0.0400723,-0.0502973,0.99793}}, false }, + { "Land_ClothShelter_02_F", {10858.3,9690.88,0.00823975}, {{0,0.99615,0.0876614},{0.037308,-0.0876004,0.995457}}, false }, + { "Land_ClutterCutter_large_F", {10859.1,9702,0}, {{0.424545,0.904791,0.0333723},{0.0293202,-0.0505784,0.99829}}, false }, + { "Land_ClutterCutter_large_F", {10846,9701.63,0}, {{0.424473,0.904707,0.0364303},{-0.0346456,-0.0239766,0.999112}}, false }, + { "Land_ClutterCutter_large_F", {10842.8,9690.13,0}, {{0.424727,0.904894,0.0278291},{0.00265199,-0.0319829,0.999485}}, false }, + { "Land_BasaltWall_01_d_left_F", {10830.5,9702.63,-0.00689697}, {{-0.888985,0.457689,-0.015033},{-0.031983,-0.0293071,0.999059}}, false }, + { "Land_BasaltWall_01_d_right_F", {10833.9,9709.25,0.00411224}, {{-0.889184,0.457402,-0.011591},{-0.023996,-0.02132,0.999485}}, false }, + { "Land_BasaltWall_01_gate_F", {10832.4,9705.13,0}, {{-0.880279,0.474456,0},{0,0,1}}, false }, + { "Land_GasCooker_F", {10858.8,9705.24,0.816017}, {{0.00130379,0.998505,0.0546351},{0.0360536,-0.0546466,0.997855}}, false }, + { "Land_GasCooker_F", {10859.1,9705.12,0.816391}, {{-0.000408459,0.998529,0.0542241},{0.0332279,-0.0541807,0.997978}}, false }, + { "Land_SurvivalRadio_F", {10859.6,9704.84,0.81604}, {{-0.00018276,0.998426,0.0560752},{0.027508,-0.056049,0.998049}}, false }, + { "Land_FMradio_F", {10857.1,9705.68,0.816338}, {{0.756865,0.653336,0.0175237},{0.0236521,-0.0541749,0.998251}}, false }, + { "Land_Graffiti_03_F", {10854.1,9701.2,4.89864}, {{0.130785,0.20782,-0.969385},{-0.134048,0.972511,0.190405}}, false }, + { "Land_Workbench_01_F", {10856,9698.72,0.00337219}, {{0.471771,0.881322,0.0265151},{0.0387043,-0.0507426,0.997961}}, false }, + { "Land_File_F", {10858.9,9701.37,0.867546}, {{0,0.998719,0.0505931},{0.0293526,-0.0505713,0.998289}}, true }, + { "Land_Bucket_painted_F", {10858.9,9701.44,0.000450134}, {{0.000308848,0.998723,0.0505176},{0.0292674,-0.0505049,0.998295}}, false }, + { "Land_Axe_F", {10859.8,9701.39,0.867493}, {{0,0.998719,0.0505931},{0.0293526,-0.0505713,0.998289}}, true }, + { "Land_Meter3m_F", {10858.1,9695.37,0.535187}, {{-0.406315,0.911556,0.0630371},{0.0533121,-0.0452209,0.997553}}, true }, + { "Land_Wrench_F", {10858.5,9695.5,0.530998}, {{-0.592968,-0.805212,-0.00481835},{0.0533121,-0.045229,0.997553}}, true }, + { "Land_GasTank_02_F", {10857.6,9698.25,0.00406647}, {{-0.0011039,0.998585,0.0531627},{0.0406218,-0.0530741,0.997764}}, false }, + { "Land_FireExtinguisher_F", {10855.9,9694.73,0.0015564}, {{0.00196872,0.998979,0.0451315},{0.0421289,-0.0451744,0.99809}}, false }, + { "Land_CanisterFuel_F", {10858.1,9705.56,0.000991821}, {{0.00085133,0.998505,0.0546468},{0.0267181,-0.05465,0.998148}}, false }, + { "Land_BasaltWall_01_8m_F", {10836.9,9715.13,-2.79695}, {{-0.889412,0.457063,0.0062928},{-0.00799352,-0.0293164,0.999538}}, false }, + { "Land_VergePost_01_F", {10833.8,9704.5,0.000267029}, {{0,0.99957,0.0293202},{-0.0186628,-0.029315,0.999396}}, false }, + { "Land_GardenPavement_02_F", {10847.5,9722,-0.000656128}, {{-0.458977,-0.886869,-0.0529524},{-0.0585655,-0.0292698,0.997854}}, false }, + { "Land_GardenPavement_02_F", {10858,9730.75,0.00012207}, {{-0.459726,-0.88765,-0.0270062},{0.013327,-0.0373027,0.999215}}, false }, + { "Land_Bench_05_F", {10853,9736.38,0}, {{0.881312,-0.472535,0},{0,0,1}}, false }, + { "Land_MetalShelter_01_F", {10857.6,9735.77,-7.62939e-006}, {{-0.450525,-0.892764,0},{0,0,1}}, false }, + { "Land_VergeRock_01_F", {10841.9,9727.01,-0.00561523}, {{-0.729957,0.61304,-0.302233},{-0.186634,0.246608,0.950974}}, false }, + { "Land_VergeRock_01_F", {10839.9,9724.66,-0.00666046}, {{-0.741622,0.609969,-0.279167},{-0.159382,0.244021,0.956583}}, false }, + { "Land_HBarrier_5_F", {10846.4,9733.13,-0.11335}, {{-0.878949,0.475776,-0.0329425},{-0.0532586,-0.0292785,0.998151}}, false }, + { "Land_HBarrier_5_F", {10850.4,9739.88,-0.0778046}, {{-0.88522,0.461723,-0.0565511},{-0.0665191,-0.00532569,0.997771}}, false }, + { "Land_HBarrier_5_F", {10854.9,9748.25,-0.0350342}, {{-0.89771,0.440011,0.0225277},{0.013327,-0.0239889,0.999623}}, false }, + { "Land_HBarrier_1_F", {10844,9728.5,0.00153351}, {{-0.0493468,-0.997788,-0.0445463},{-0.0399685,-0.0425921,0.998293}}, false }, + { "Land_HBarrier_1_F", {10854.5,9743.13,0.000984192}, {{0.4393,0.897547,0.0377414},{-0.0585666,-0.0133084,0.998195}}, false }, + { "Land_HBarrier_1_F", {10845.3,9726.75,0.00138855}, {{-0.0493015,-0.998652,-0.0162119},{-0.0585666,-0.0133132,0.998195}}, false }, + { "Land_CratesWooden_F", {10859.1,9745.75,0.00176239}, {{0.895423,-0.443979,0.0331833},{-0.00267442,0.0691678,0.997601}}, false }, + { "Land_WoodenCart_F", {10852.1,9727.47,-0.0135727}, {{0.000409171,0.999436,0.0335709},{-0.0399237,-0.0335278,0.99864}}, false }, + { "Land_Cages_F", {10850.6,9733,0.00104523}, {{0.237158,0.97092,0.0327301},{-0.0506004,-0.0212998,0.998492}}, false }, + { "Land_Basket_F", {10855.5,9739.77,0.00202179}, {{-0.00711814,0.998966,-0.0448926},{-0.059377,0.0443923,0.997248}}, false }, + { "Land_WoodenCrate_01_F", {10855.8,9725.87,0.000389099}, {{0.886291,-0.46299,-0.0113295},{-0.00533132,-0.0346609,0.999385}}, false }, + { "Land_WoodenCounter_01_F", {10857.5,9734.21,0.0106735}, {{-0.888381,0.457324,0.0404258},{0.027752,-0.0344001,0.999023}}, false }, + { "Land_WoodenCounter_01_F", {10856.1,9731.74,-0.000930786}, {{-0.888463,0.458945,0.00183431},{-0.00982717,-0.0230198,0.999687}}, false }, + { "Land_ClutterCutter_large_F", {10859.6,9734.38,0.0542145}, {{0.424606,0.905305,0.0115296},{0.0239986,-0.0239841,0.999424}}, false }, + { "Land_BasaltWall_01_d_left_F", {10839.9,9721,0.000350952}, {{-0.889428,0.456716,0.0181322},{0.00532321,-0.0293169,0.999556}}, false }, + { "Land_VitaminBottle_F", {10857.5,9736.97,0.882851}, {{0,0.9994,0.0346456},{0.0453115,-0.03461,0.998373}}, true }, + { "Land_PenBlack_F", {10857.9,9737.52,0.865974}, {{0.735974,-0.677009,0},{0,0,1}}, true }, + { "Land_Notepad_F", {10858,9737.73,0.865997}, {{-0.468028,-0.883714,0},{0,0,1}}, true }, + { "Land_Photos_V1_F", {10858.5,9737.41,0.865959}, {{0,0.9994,0.0346456},{0.0453115,-0.03461,0.998373}}, true }, + { "Land_BloodBag_F", {10855.5,9735.73,0.990364}, {{0,0.99743,0.0716471},{-0.0854324,-0.0713851,0.993783}}, true }, + { "Land_Bandage_F", {10855.2,9735.62,0.959015}, {{0,0.99743,0.0716471},{-0.0854324,-0.0713851,0.993783}}, true }, + { "Shoebox_SIM_EPOCH", {10855.6,9736.06,0.994728}, {{0,0.99743,0.0716471},{-0.0854324,-0.0713851,0.993783}}, true }, + { "SapperHead_SIM_EPOCH", {10853.2,9739.31,0.365158}, {{-0.666775,0.469401,-0.578855},{0.649235,0.747234,-0.141903}}, false }, + { "Jack_SIM_EPOCH", {10854.8,9734.52,0.989227}, {{0,0.999576,0.0291119},{0,-0.0291119,0.999576}}, true }, + { "Land_Ammobox_rounds_F", {10853.8,9732.25,0.931435}, {{-4.36092e-006,0.999271,0.038191},{-0.00970079,-0.0381892,0.999224}}, false }, + { "Land_Ammobox_rounds_F", {10853.5,9731.87,0.929764}, {{0.00062306,0.999269,0.03823},{-0.0102879,-0.0382215,0.999216}}, false }, + { "Land_ShelvesWooden_blue_F", {10855.5,9735.89,0.0243835}, {{0.486036,0.871388,0.066726},{-0.0382478,-0.0550686,0.99775}}, false }, + { "Land_ShelvesWooden_blue_F", {10854.9,9734.76,-0.000701904}, {{0.48524,0.874213,0.0171255},{0.00418143,-0.0219056,0.999751}}, false }, + { "Land_ShelvesWooden_khaki_F", {10853.6,9732.11,-0.000396729}, {{0.451091,0.891886,0.0324789},{-0.00664833,-0.0330327,0.999432}}, false }, + { "Land_WoodenTable_small_F", {10858,9737.23,-0.00397491}, {{0.466201,0.884473,0.0190649},{0.0402799,-0.0427492,0.998273}}, false }, + { "Land_PortableGenerator_01_F", {10857.2,9740.36,0.00166321}, {{-0.837214,0.546718,0.0131027},{0.0412957,0.039311,0.998373}}, false }, + { "Land_WindmillPump_01_F", {10845.4,9724.13,7.62939e-006}, {{0.897404,-0.44121,0},{0,0,1}}, false }, + { "Land_HBarrier_1_F", {10850.4,9735.38,0.00152588}, {{0.439157,0.898366,0.00894902},{-0.0638707,0.0212837,0.997731}}, false }, + { "SapperHead_SIM_EPOCH", {10856.2,9739.78,-0.146057}, {{-0.435902,-0.870781,0.227442},{0.897221,-0.440276,0.0339274}}, false }, + { "SapperHead_SIM_EPOCH", {10854.3,9739.49,-0.114021}, {{0.591943,-0.771625,0.232806},{0.773588,0.625,0.104574}}, false }, + { "Land_HBarrier_1_F", {10856.5,9752.63,0.00088501}, {{0.44003,0.896704,0.0479037},{0.0106693,-0.0585629,0.998227}}, false }, + { "Land_HBarrier_1_F", {10859.3,9757.38,0.00162506}, {{-0.162384,-0.985034,-0.057788},{0,-0.0585653,0.998284}}, false }, + { "Land_HBarrier_1_F", {10858.5,9755.25,0.0015564}, {{-0.579644,-0.813471,-0.0477231},{0,-0.0585653,0.998284}}, false }, + { "Land_HelipadSquare_F", {10849.6,9777.75,0}, {{0.877335,-0.479654,0.0146633},{-0.0239912,-0.0133232,0.999623}}, false }, + { "Land_HBarrier_1_F", {10859.3,9752.88,0.00112152}, {{0.440054,0.89606,0.0585579},{0.0026744,-0.0665188,0.997782}}, false }, + { "Land_PortableLight_double_F", {10861.3,9680.25,0}, {{0.164497,-0.986378,0},{0,0,1}}, false }, + { "Land_HBarrier_01_big_4_green_F", {10877.1,9670.13,0.0104904}, {{-0.88622,0.458203,-0.0683031},{-0.0850248,-0.0159396,0.996251}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10872.8,9670.63,0.0025177}, {{0.489307,-0.871265,0.0384179},{-0.0876595,-0.00530604,0.996136}}, false }, + { "Land_BasaltWall_01_d_right_F", {10879,9679.38,0.0148315}, {{-0.885806,0.458082,-0.074217},{-0.0903023,-0.0132797,0.995826}}, false }, + { "Land_BasaltWall_01_d_right_F", {10861.5,9663.5,2.7768}, {{-0.889184,0.457334,-0.0140248},{-0.0239937,-0.0159967,0.999584}}, false }, + { "Land_BasaltWall_01_d_right_F", {10870.4,9663.13,0.00610352}, {{-0.416069,-0.905614,-0.0821552},{-0.0981908,-0.0450745,0.994146}}, false }, + { "Land_BasaltWall_01_8m_F", {10882,9685.25,-2.7905}, {{-0.886793,0.458565,-0.0575902},{-0.0771019,-0.0239248,0.996736}}, false }, + { "Land_BasaltWall_01_8m_F", {10865.1,9665.63,-0.00147247}, {{-0.417088,-0.907583,-0.0482818},{-0.0691654,-0.0212732,0.997378}}, false }, + { "Land_PetroglyphWall_02_F", {10877.6,9676.63,0}, {{-0.88944,0.457051,0},{0,0,1}}, false }, + { "Land_PetroglyphWall_01_F", {10872.1,9665.75,-7.62939e-006}, {{0.900634,-0.434578,0},{0,0,1}}, false }, + { "Land_HBarrier_01_line_1_green_F", {10875,9673.88,0.00251007}, {{0,0.999872,0.0160013},{-0.0850248,-0.0159434,0.996251}}, false }, + { "Land_BarrelEmpty_F", {10865,9701.98,0.00120544}, {{-0.000454646,0.998585,0.0531787},{0.0131107,-0.0531681,0.9985}}, false }, + { "Land_GardenPavement_02_F", {10865.8,9705.83,-0.000434875}, {{0.895378,-0.444061,-0.0332858},{0.0159975,-0.0426236,0.998963}}, false }, + { "Land_GardenPavement_02_F", {10862,9707.58,-0.000434875}, {{0.895174,-0.443654,-0.0428221},{0.0266571,-0.0426124,0.998736}}, false }, + { "Land_WoodenWall_01_m_4m_F", {10865.9,9701.63,-7.62939e-006}, {{-0.905616,0.424098,0},{0,0,1}}, false }, + { "Land_WoodenWall_01_m_4m_F", {10863.9,9697.38,7.62939e-006}, {{0.900199,-0.43548,0},{0,0,1}}, false }, + { "Land_WoodenShelter_01_F", {10875.6,9713,0.525391}, {{0.897076,-0.441874,0.00139776},{-0.0159977,-0.0293164,0.999442}}, false }, + { "Land_WoodenWall_01_m_8m_F", {10870.9,9705.75,-7.62939e-006}, {{0.897813,-0.440377,0},{0,0,1}}, false }, + { "Land_WoodenWall_01_m_d_F", {10866.1,9704,0}, {{-0.468575,-0.883424,0},{0,0,1}}, false }, + { "Land_WoodenTable_large_F", {10861,9703.98,0.00175476}, {{0.89317,-0.447627,-0.0433214},{0.0216432,-0.0534336,0.998337}}, false }, + { "Land_Bench_F", {10860.5,9694.61,0.00366211}, {{-0.866069,0.496782,0.0559579},{0.0290434,-0.061745,0.997669}}, false }, + { "Land_LampSolar_F", {10881,9702.75,-7.62939e-006}, {{0.465048,0.885286,0},{0,0,1}}, false }, + { "Land_Atm_01_F", {10875.8,9712.88,0}, {{0.868467,-0.495747,0},{0,0,1}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10888.5,9698.5,0.000991821}, {{0.886155,-0.463361,0.00511642},{-0.0266571,-0.0399511,0.998846}}, false }, + { "Land_BasaltWall_01_d_left_F", {10885,9691.13,-0.00764465}, {{-0.888821,0.457591,-0.0246492},{-0.0373065,-0.0186434,0.99913}}, false }, + { "Land_BarrelSand_grey_F", {10864.5,9701.1,0.00133514}, {{-0.000354248,0.998452,0.0556136},{0.0132539,-0.0556041,0.998365}}, false }, + { "Land_Map_unfolded_F", {10860.4,9704.11,0.866005}, {{0,0.998581,0.0532597},{0.0213615,-0.0532476,0.998353}}, true }, + { "Land_Laptop_unfolded_F", {10861.6,9703.48,0.866547}, {{-0.790813,-0.609737,0.0532548},{0.0291257,0.0494215,0.998353}}, true }, + { "Land_DrillAku_F", {10860.4,9701.04,0.866127}, {{0,0.998719,0.0505931},{0.0293526,-0.0505713,0.998289}}, true }, + { "Land_WeldingTrolley_01_F", {10862.6,9696.45,0.00336456}, {{-0.907943,0.416424,0.0472224},{0.0213255,-0.0666253,0.99755}}, false }, + { "Land_PortableGenerator_01_F", {10877.2,9713.11,0.000518799}, {{-0.023463,0.99928,0.0297947},{-0.0166384,-0.0301891,0.999406}}, false }, + { "Land_PortableGenerator_01_F", {10863.9,9698.99,0.00256348}, {{0.725424,-0.686408,-0.0510239},{0.0176604,-0.0555441,0.9983}}, false }, + { "Land_PetroglyphWall_01_F", {10886.5,9694.13,0.00302124}, {{0.900429,-0.434999,0.00182592},{-0.02133,-0.0399591,0.998974}}, false }, + { "Land_Locomotive_01_v1_F", {10870.1,9690.42,0.0205154}, {{0.450021,0.891758,0.0474177},{-0.0206833,-0.0426757,0.998875}}, false }, + { "Land_Noticeboard_F", {10876.8,9717.75,0.000473022}, {{0.886803,-0.462138,0.00300443},{-0.0186628,-0.029315,0.999396}}, false }, + { "Land_GardenPavement_02_F", {10860.1,9734.75,0.000213623}, {{-0.459634,-0.888049,-0.0102768},{0.0239934,-0.0239841,0.999424}}, false }, + { "Land_GardenPavement_02_F", {10861.9,9738.38,0.000160217}, {{-0.459686,-0.88786,-0.0198261},{0.0186626,-0.0319774,0.999314}}, false }, + { "Land_Bench_05_F", {10879.5,9720,0}, {{-0.904399,0.426689,0},{0,0,1}}, false }, + { "Land_Bench_05_F", {10868.1,9725.88,-0.000816345}, {{-0.944023,-0.329564,0.0144257},{0.0319849,-0.04792,0.998339}}, false }, + { "Land_Bench_05_F", {10868.8,9731,-0.00114441}, {{-0.88058,0.470725,0.0547501},{0.0293221,-0.0611897,0.997695}}, false }, + { "Land_Bench_05_F", {10872.8,9733.88,-0.000274658}, {{-0.372798,0.927169,0.037142},{0.0266571,-0.0293097,0.999215}}, false }, + { "Land_VergeRock_01_F", {10884.5,9743.64,-0.00640106}, {{0.609174,0.744676,-0.272699},{0.262531,0.135112,0.955417}}, false }, + { "Land_VergeRock_01_F", {10887.2,9746.15,-0.00796509}, {{0.592685,0.768545,-0.24096},{0.231678,0.12385,0.964876}}, false }, + { "Land_VergeRock_01_F", {10882.2,9745.65,-0.00654602}, {{0.598647,0.753843,-0.270818},{0.25754,0.139002,0.956217}}, false }, + { "Land_VergeRock_01_F", {10889.4,9748.65,-0.00823975}, {{0.621156,0.74817,-0.233251},{0.232417,0.108376,0.966559}}, false }, + { "Land_VergeRock_01_F", {10884.8,9748.15,-0.00762177}, {{0.608705,0.754575,-0.245144},{0.243392,0.116485,0.962908}}, false }, + { "Land_WoodenWall_01_m_8m_F", {10883,9730.75,0}, {{0.897813,-0.440377,0},{0,0,1}}, false }, + { "Land_StoneTanoa_01_F", {10873.2,9727.89,0.00255585}, {{0.862749,-0.501393,-0.0653353},{0.0399748,-0.0611742,0.997326}}, false }, + { "Land_LampSolar_F", {10869.9,9746.63,0}, {{0.465048,0.885286,0},{0,0,1}}, false }, + { "Land_TouristShelter_01_F", {10879.7,9720.28,1.52588e-005}, {{0.895596,-0.444868,0},{0,0,1}}, false }, + { "Land_WoodenCounter_01_F", {10860.3,9739.59,0.00917816}, {{-0.888056,0.457106,0.0491099},{0.0360625,-0.0372309,0.998656}}, false }, + { "WaterPump_01_forest_F", {10884.9,9730.11,0.00270081}, {{-0.000194037,0.999588,0.0286976},{0.0234226,-0.0286851,0.999314}}, false }, + { "Campfire_burning_F", {10873.1,9728,0.623276}, {{0,0.998118,0.0613255},{0.0405127,-0.0612751,0.997298}}, false }, + { "Land_PetroglyphWall_02_F", {10879.9,9748.63,0.0188446}, {{-0.884909,0.458206,-0.0835669},{-0.100816,-0.0132681,0.994817}}, false }, + { "Sign_F", {10861.9,9749.63,0.000839233}, {{-0.893274,0.448603,-0.0285825},{-0.0319811,0,0.999488}}, false }, + { "Land_GardenPavement_02_F", {10871.4,9757.63,-0.000221252}, {{0.982605,0.185556,0.00755498},{-0.00265204,-0.026657,0.999641}}, false }, + { "Land_VergeRock_01_F", {10887,9750.65,-0.00829315}, {{0.616099,0.753013,-0.231071},{0.23139,0.107391,0.966915}}, false }, + { "Land_VergeRock_01_F", {10865.9,9754.54,-0.00767517}, {{-0.233037,0.93834,-0.255367},{0.0272748,0.2688,0.962809}}, false }, + { "Land_VergeRock_01_F", {10864.6,9761.17,-0.00765228}, {{-0.267799,0.931434,-0.246402},{0.0300176,0.263684,0.964142}}, false }, + { "Land_VergeRock_01_F", {10865.9,9769.66,-0.00740814}, {{-0.247736,0.933532,-0.259121},{0.028041,0.274256,0.961248}}, false }, + { "Land_VergeRock_01_F", {10868.9,9755.13,0.00389099}, {{-0.158381,0.985791,-0.0559612},{-0.315424,0.00319217,0.948945}}, false }, + { "Land_VergeRock_01_F", {10865.2,9758.15,-0.00796509}, {{-0.232588,0.940956,-0.245975},{0.0358176,0.261026,0.964667}}, false }, + { "Land_VergeRock_01_F", {10868.2,9758.74,0.0056076}, {{-0.162999,0.986595,0.0078377},{-0.324803,-0.0611598,0.943802}}, false }, + { "Land_VergeRock_01_F", {10867.6,9761.89,-0.00190735}, {{-0.194955,0.96792,-0.158503},{-0.191412,0.12095,0.974029}}, false }, + { "Land_VergeRock_01_F", {10889.8,9753.53,-0.00669098}, {{0.690016,0.673253,-0.265723},{0.270744,0.100387,0.957403}}, false }, + { "Land_VergeRock_01_F", {10862.9,9768.92,-0.00711823}, {{-0.251001,0.929777,-0.269283},{0.0157687,0.282079,0.959261}}, false }, + { "Land_WoodenShelter_01_F", {10870.9,9759.81,-7.62939e-006}, {{0.20459,-0.978848,0},{0,0,1}}, false }, + { "Land_WoodenTable_large_F", {10871.1,9759.11,-0.00174713}, {{0.982024,0.188476,0.0102803},{-0.0052846,-0.0269892,0.999622}}, false }, + { "Land_CampingChair_V1_folded_F", {10873.1,9759.88,7.62939e-006}, {{0.997423,0.0700731,-0.0153987},{0.0159975,-0.00799242,0.99984}}, false }, + { "Land_ClutterCutter_large_F", {10872.8,9758.88,0}, {{0.424727,0.904969,0.0252592},{-0.00265204,-0.026657,0.999641}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10882.8,9774.75,0.00100708}, {{-0.608735,0.791221,0.0584123},{-0.0080009,-0.0797436,0.996783}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10886.9,9776.88,-8.39233e-005}, {{-0.268694,0.962132,0.0458787},{-0.0106641,-0.0505987,0.998662}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10878.5,9772.5,0.000228882}, {{-0.455658,0.888414,0.055636},{-0.00267442,-0.0638675,0.997955}}, false }, + { "Land_BasaltWall_01_d_left_F", {10873.8,9768.25,0}, {{-0.224202,0.974543,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_d_left_F", {10888.3,9772.13,-3.79357}, {{-0.224163,0.973114,0.052908},{-0.0186565,-0.0585646,0.998109}}, false }, + { "Land_BasaltWall_01_d_left_F", {10882,9752.38,-0.00360107}, {{-0.876552,0.473565,-0.0859854},{-0.0876599,0.0185847,0.995977}}, false }, + { "Land_BasaltWall_01_d_right_F", {10870.9,9767.67,0}, {{0.224203,-0.974543,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_gate_F", {10865.4,9765.75,7.62939e-006}, {{-0.263872,0.964558,0},{0,0,1}}, false }, + { "Land_CampingChair_V1_F", {10871.6,9761.73,0.00373077}, {{-0.000834508,0.999489,0.0319671},{0.0160717,-0.0319496,0.99936}}, false }, + { "Land_CampingChair_V1_F", {10881,9762.85,0.00363159}, {{0.610889,0.791439,0.0209343},{0.00772941,-0.0324024,0.999445}}, false }, + { "Land_CampingChair_V1_F", {10869.9,9761.25,0.00804138}, {{-0.598486,0.800905,0.0191428},{-0.0164776,-0.0361957,0.999209}}, false }, + { "Land_CampingChair_V1_F", {10879.1,9763.26,0.00409698}, {{0.00303644,0.998967,0.0453332},{-0.00532354,-0.0453166,0.998959}}, false }, + { "Land_Suitcase_F", {10869.9,9759.24,0.000244141}, {{-0.986259,-0.164624,-0.0138857},{-0.00959668,-0.0268205,0.999594}}, false }, + { "Land_Canteen_F", {10870.3,9758.68,0.865021}, {{0,0.999645,0.026659},{-0.0080009,-0.0266582,0.999613}}, true }, + { "Land_WoodPile_F", {10883.6,9763.13,0.00524139}, {{0.341086,-0.93946,-0.0327907},{0.00800059,-0.0319801,0.999456}}, false }, + { "Land_Map_altis_F", {10871.6,9759.25,0.866913}, {{-0.911941,-0.409916,-0.018231},{-0.0080009,-0.0266582,0.999613}}, true }, + { "Land_PortableLongRangeRadio_F", {10870.1,9759.25,0.864899}, {{0.216923,-0.975886,-0.0242892},{-0.0080009,-0.0266582,0.999613}}, true }, + { "Land_Tablet_02_F", {10870.4,9759.12,0.864937}, {{0.153883,0.987704,0.0275723},{-0.0080009,-0.0266582,0.999613}}, true }, + { "Land_TentA_F", {10876.1,9764.63,0.000228882}, {{0.976109,0.216081,0.0228233},{-0.0133317,-0.0452827,0.998885}}, false }, + { "Land_WoodenLog_F", {10879.5,9758.99,0.000152588}, {{-0.00171486,0.999713,0.0239167},{-0.0106997,-0.0239338,0.999656}}, false }, + { "Land_WoodenLog_F", {10880.9,9759.49,9.91821e-005}, {{-0.00114873,0.999826,0.0185948},{-0.00536261,-0.0186007,0.999812}}, false }, + { "Land_PortableGenerator_01_F", {10869.3,9761.62,0.000816345}, {{-0.977944,-0.208106,-0.0178361},{-0.00800343,-0.0479953,0.998815}}, false }, + { "Land_Camping_Light_F", {10876.3,9764.86,-9.91821e-005}, {{-0.0460152,0.997994,0.0434835},{-0.0121376,-0.044085,0.998954}}, false }, + { "Land_Sleeping_bag_brown_F", {10876.9,9760.5,-0.011673}, {{0.129599,-0.991313,-0.0224069},{-0.0106641,-0.0239897,0.999655}}, false }, + { "Land_Sleeping_bag_blue_folded_F", {10872.5,9761.86,0.000808716}, {{-0.0174588,0.985105,0.171066},{0.0186754,-0.170741,0.985139}}, false }, + { "Land_Sleeping_bag_blue_F", {10874.8,9760.5,-0.00643921}, {{0.186456,-0.982404,-0.0108363},{0.0159975,-0.00799242,0.99984}}, false }, + { "Campfire_burning_F", {10879.5,9761.12,-0.000457764}, {{0,0.999826,0.018666},{-0.00533768,-0.0186657,0.999812}}, false }, + { "Land_BasaltWall_01_8m_F", {10860.8,9762.5,0.00164795}, {{-0.889184,0.456135,0.0359455},{0.023991,-0.0319738,0.999201}}, false }, + { "Land_VergePost_01_F", {10865.8,9764.13,0.000465393}, {{0,0.99885,0.0479432},{0.0159975,-0.047937,0.998722}}, false }, + { "Land_CncBarrierMedium_F", {10904.1,9713.5,0.253799}, {{0.289862,-0.957068,0},{0,0,1}}, false }, + { "Land_CncBarrierMedium_F", {10912.8,9716.88,0}, {{0.543791,-0.839221,0},{0,0,1}}, false }, + { "Land_HBarrier_01_wall_corner_green_F", {10907.9,9716.88,0.00104523}, {{0.89093,-0.451641,0.0475837},{-0.0479448,0.0106518,0.998793}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10890.5,9702.5,0.00183105}, {{0.883456,-0.464569,0.0606688},{-0.0823844,-0.0265665,0.996246}}, false }, + { "Land_LampSolar_F", {10895,9732.13,-7.62939e-006}, {{0.465048,0.885286,0},{0,0,1}}, false }, + { "Land_WaterTower_01_F", {10890.5,9740.75,0}, {{0.414572,0.910017,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_4m_F", {10903.8,9722.63,0.000274658}, {{0.88564,-0.457266,0.0809287},{-0.113921,-0.0449919,0.992471}}, false }, + { "Land_HBarrier_01_big_4_green_F", {10902.8,9736.13,0.0132217}, {{-0.885807,0.459729,-0.0632045},{-0.0902951,-0.0371556,0.995222}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10915.4,9727.13,0.000328064}, {{0.88647,-0.462727,-0.00740166},{0,-0.0159937,0.999872}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10914.9,9732,0.00177765}, {{0.885762,-0.464016,0.0107343},{-0.0399685,-0.0532138,0.997783}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10910.6,9729.5,0.0016098}, {{0.885853,-0.463866,0.00961088},{-0.0373063,-0.0505664,0.998024}}, false }, + { "Land_BasaltWall_01_d_left_F", {10915.2,9720.58,2.95291}, {{0.890565,-0.454855,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_d_left_F", {10912.3,9739.25,2.83707}, {{-0.877137,0.478149,-0.0447681},{-0.0797432,-0.0530868,0.995401}}, false }, + { "Land_BasaltWall_01_d_right_F", {10904.9,9725.75,2.86819}, {{-0.874211,0.479139,-0.0786252},{-0.113921,-0.0449919,0.992471}}, false }, + { "Land_ConcreteWell_01_F", {10892.4,9745.63,-7.62939e-006}, {{0,1,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_8m_F", {10910.4,9723.75,0}, {{0.471086,0.882088,0},{0,0,1}}, false }, + { "Land_BasaltWall_01_8m_F", {10917.1,9736.5,0.00325775}, {{0.470605,0.881534,0.0377931},{-0.0452881,-0.0186435,0.9988}}, false }, + { "Land_BasaltWall_01_8m_F", {10915.4,9744.38,-0.00336456}, {{0.887584,-0.455733,0.0670917},{-0.0929287,-0.0344957,0.995075}}, false }, + { "Land_VergeRock_01_F", {10893.2,9756.51,-0.00756836}, {{0.724235,0.641405,-0.253147},{0.258814,0.0874263,0.961962}}, false }, + { "Land_VergeRock_01_F", {10895.2,9754.14,-0.00758362}, {{0.725727,0.639749,-0.253063},{0.258925,0.0868062,0.961989}}, false }, + { "Land_VergeRock_01_F", {10891.9,9751.27,-0.00723267}, {{0.690788,0.675353,-0.258284},{0.260553,0.10071,0.960193}}, false }, + { "Land_LampSolar_F", {10897.6,9755.13,0}, {{0.465048,0.885286,0},{0,0,1}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10910.6,9770.38,0.00448608}, {{-0.41975,-0.904823,-0.0714486},{-0.06652,-0.0478398,0.996638}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10913.9,9768.75,0.00409698}, {{-0.484202,-0.872699,-0.0628041},{-0.0718131,-0.0318985,0.996908}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10913.4,9750.63,0.0062561}, {{-0.994588,0.0367304,-0.0971889},{-0.0981907,-0.0265302,0.994814}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10906.6,9769.13,0.00273895}, {{-0.4561,-0.888081,-0.0573071},{-0.0373095,-0.0452566,0.998278}}, false }, + { "Land_HBarrier_01_line_3_green_F", {10905.1,9773,0.00256348}, {{-0.408824,-0.911084,-0.0528097},{-0.0399685,-0.0399362,0.998403}}, false }, + { "Land_VergePost_01_F", {10908.7,9773.14,0.0229645}, {{0,0.999201,0.0399667},{-0.039967,-0.0399348,0.998403}}, false }, + { "Land_BasaltWall_01_d_right_F", {10922.3,9734.25,2.93697}, {{0.890565,-0.454855,0},{0,0,1}}, false }, + { "Land_HBarrier_01_big_4_green_F", {10922.3,9725.63,0.00773621}, {{-0.887624,0.458159,-0.0470473},{-0.0638707,-0.0212864,0.997731}}, false }, + { "Land_BasaltWall_01_d_left_F", {10924.3,9760.38,-2.77207}, {{0.887585,-0.457779,0.0512995},{-0.0929267,-0.0688653,0.993289}}, false }, + { "ProtectionZone_Invisible_F", {10845.625,9676.25,0}, 116.792, true }, + { "ProtectionZone_Invisible_F", {10875.375,9693.5,0}, 296.730, true }, + { "ProtectionZone_Invisible_F", {10838,9712.25,0}, 296.730, true }, + { "ProtectionZone_Invisible_F", {10858,9755.375,0}, 296.730, true }, + { "ProtectionZone_Invisible_F", {10903,9734.5,0}, 296.730, true } + }; + staticNpcPos[] = { + //Central + { "C_man_w_worker_F", { 10871, 9760.375, 0 }, 165.239 }, + { "C_man_w_worker_F", { 10855.375, 9732.125, 0 }, 111.732 }, + { "C_Orestes", { 10859.625, 9740.125, 0 }, 118.274 }, + { "C_man_shorts_4_F_asia", { 10860.75, 9702.875, 0 }, 26.183 } + }; + // Prefered locations for vehicles + class whitelistedVehiclePos {}; +}; diff --git a/Sources/epoch_server_settings/configs/maps/vr.h b/Sources/epoch_server_settings/configs/maps/vr.h index 0d1fbf4f..8489b484 100644 --- a/Sources/epoch_server_settings/configs/maps/vr.h +++ b/Sources/epoch_server_settings/configs/maps/vr.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/vr.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/vr.h */ class VR : Default { diff --git a/Sources/epoch_server_settings/configs/maps/zargabad.h b/Sources/epoch_server_settings/configs/maps/zargabad.h index 759aa3a8..e0552d0e 100644 --- a/Sources/epoch_server_settings/configs/maps/zargabad.h +++ b/Sources/epoch_server_settings/configs/maps/zargabad.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/maps/zargabad.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/maps/zargabad.h */ class Zargabad : Default { diff --git a/Sources/epoch_server_settings/configs/security/data/custom_vars.h b/Sources/epoch_server_settings/configs/security/data/custom_vars.h index 55fa5e32..080f4c37 100644 --- a/Sources/epoch_server_settings/configs/security/data/custom_vars.h +++ b/Sources/epoch_server_settings/configs/security/data/custom_vars.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/securty/data/custom_vars.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/securty/data/custom_vars.h */ // all var names must be lowercase diff --git a/Sources/epoch_server_settings/configs/security/security_checks.h b/Sources/epoch_server_settings/configs/security/security_checks.h index 15e16211..a5e33e52 100644 --- a/Sources/epoch_server_settings/configs/security/security_checks.h +++ b/Sources/epoch_server_settings/configs/security/security_checks.h @@ -10,7 +10,7 @@ Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike Github: - https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settngs/configs/securty/security_checks.h + https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settngs/configs/securty/security_checks.h */ class CfgSecConf { diff --git a/Sources/epoch_server_settings/treeView.txt b/Sources/epoch_server_settings/treeView.txt new file mode 100644 index 00000000..302204a0 Binary files /dev/null and b/Sources/epoch_server_settings/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Altis/treeView.txt b/Sources/mpmissions/epoch.Altis/treeView.txt new file mode 100644 index 00000000..f2e381a0 Binary files /dev/null and b/Sources/mpmissions/epoch.Altis/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Australia/treeView.txt b/Sources/mpmissions/epoch.Australia/treeView.txt new file mode 100644 index 00000000..f6ddb2c8 Binary files /dev/null and b/Sources/mpmissions/epoch.Australia/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt b/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt new file mode 100644 index 00000000..8908e28f Binary files /dev/null and b/Sources/mpmissions/epoch.Bootcamp_ACR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Bornholm/treeView.txt b/Sources/mpmissions/epoch.Bornholm/treeView.txt new file mode 100644 index 00000000..b6e4a385 Binary files /dev/null and b/Sources/mpmissions/epoch.Bornholm/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Chernarus/treeView.txt b/Sources/mpmissions/epoch.Chernarus/treeView.txt new file mode 100644 index 00000000..e40e8af0 Binary files /dev/null and b/Sources/mpmissions/epoch.Chernarus/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt b/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt new file mode 100644 index 00000000..cbc3ac67 Binary files /dev/null and b/Sources/mpmissions/epoch.Chernarus_Summer/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Desert_E/treeView.txt b/Sources/mpmissions/epoch.Desert_E/treeView.txt new file mode 100644 index 00000000..0b876240 Binary files /dev/null and b/Sources/mpmissions/epoch.Desert_E/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Esseker/treeView.txt b/Sources/mpmissions/epoch.Esseker/treeView.txt new file mode 100644 index 00000000..9d534e29 Binary files /dev/null and b/Sources/mpmissions/epoch.Esseker/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt b/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt new file mode 100644 index 00000000..d595222a Binary files /dev/null and b/Sources/mpmissions/epoch.Mountains_ACR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Napf/treeView.txt b/Sources/mpmissions/epoch.Napf/treeView.txt new file mode 100644 index 00000000..440e8dbc Binary files /dev/null and b/Sources/mpmissions/epoch.Napf/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Porto/treeView.txt b/Sources/mpmissions/epoch.Porto/treeView.txt new file mode 100644 index 00000000..48ecb858 Binary files /dev/null and b/Sources/mpmissions/epoch.Porto/treeView.txt differ diff --git a/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt b/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt new file mode 100644 index 00000000..d12bb19e Binary files /dev/null and b/Sources/mpmissions/epoch.ProvingGrounds_PMC/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Sara/treeView.txt b/Sources/mpmissions/epoch.Sara/treeView.txt new file mode 100644 index 00000000..a740549b Binary files /dev/null and b/Sources/mpmissions/epoch.Sara/treeView.txt differ diff --git a/Sources/mpmissions/epoch.SaraLite/treeView.txt b/Sources/mpmissions/epoch.SaraLite/treeView.txt new file mode 100644 index 00000000..00bcbf9d Binary files /dev/null and b/Sources/mpmissions/epoch.SaraLite/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt b/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt new file mode 100644 index 00000000..ed49bab1 Binary files /dev/null and b/Sources/mpmissions/epoch.Sara_dbe1/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt b/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt new file mode 100644 index 00000000..da5630a0 Binary files /dev/null and b/Sources/mpmissions/epoch.Shapur_BAF/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Stratis/treeView.txt b/Sources/mpmissions/epoch.Stratis/treeView.txt new file mode 100644 index 00000000..5cc6b264 Binary files /dev/null and b/Sources/mpmissions/epoch.Stratis/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Takistan/treeView.txt b/Sources/mpmissions/epoch.Takistan/treeView.txt new file mode 100644 index 00000000..06815a9e Binary files /dev/null and b/Sources/mpmissions/epoch.Takistan/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Tanoa/mission.sqm b/Sources/mpmissions/epoch.Tanoa/mission.sqm new file mode 100644 index 00000000..34e03123 --- /dev/null +++ b/Sources/mpmissions/epoch.Tanoa/mission.sqm @@ -0,0 +1,3100 @@ +version=52; +class EditorData +{ + moveGridStep=1; + angleGridStep=0.2617994; + scaleGridStep=1; + autoGroupingDist=10; + toggles=1; + class ItemIDProvider + { + nextID=4; + }; + class Camera + { + pos[]={9954.9746,38.138557,2584.3123}; + dir[]={0.9258346,-0.32359165,-0.19526258}; + up[]={0.31662911,0.94619668,-0.066778876}; + aside[]={-0.20636635,-1.7823186e-007,-0.97848046}; + }; +}; +binarizationWanted=0; +addons[]= +{ + "A3_epoch_config" +}; +class AddonsMetaData +{ + class List + { + items=1; + class Item0 + { + className="A3_epoch_config"; + name="A3_epoch_config"; + }; + }; +}; +randomSeed=12032465; +class ScenarioData +{ + author="[VB]AWOL"; +}; +class Mission +{ + class Intel + { + briefingName="Epoch Mod"; + timeOfChanges=28800; + startWeather=0; + startWind=0; + forecastWeather=0; + forecastWind=0; + forecastWaves=0; + forecastLightnings=1; + year=2035; + month=6; + day=24; + hour=12; + minute=0; + startFogDecay=0.013; + forecastFogDecay=0.013; + }; + class Entities + { + items=104; + class Item0 + { + dataType="Marker"; + position[]={7708.6831,6.9953003,7519.856}; + name="center"; + type="Empty"; + id=0; + }; + class Item1 + { + dataType="Marker"; + position[]={9969.2129,298.72034,12166.665}; + name="respawn_east"; + type="Empty"; + id=1; + }; + class Item2 + { + dataType="Marker"; + position[]={9969.2129,298.72034,12166.665}; + name="respawn_west"; + type="Empty"; + id=2; + }; + class Item3 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=4; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=3; + }; + class Item4 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=6; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=5; + }; + class Item5 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=8; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=7; + }; + class Item6 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=10; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=9; + }; + class Item7 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=12; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=11; + }; + class Item8 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=14; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=13; + }; + class Item9 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=16; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=15; + }; + class Item10 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=18; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=17; + }; + class Item11 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=20; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=19; + }; + class Item12 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=22; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=21; + }; + class Item13 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=24; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=23; + }; + class Item14 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=26; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=25; + }; + class Item15 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=28; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=27; + }; + class Item16 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=30; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=29; + }; + class Item17 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=32; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=31; + }; + class Item18 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=34; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=33; + }; + class Item19 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=36; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=35; + }; + class Item20 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=38; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=37; + }; + class Item21 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=40; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=39; + }; + class Item22 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=42; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=41; + }; + class Item23 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=44; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=43; + }; + class Item24 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=46; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=45; + }; + class Item25 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=48; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=47; + }; + class Item26 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=50; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=49; + }; + class Item27 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=52; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=51; + }; + class Item28 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=54; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=53; + }; + class Item29 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=56; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=55; + }; + class Item30 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=58; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=57; + }; + class Item31 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=60; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=59; + }; + class Item32 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=62; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=61; + }; + class Item33 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=64; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=63; + }; + class Item34 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=66; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=65; + }; + class Item35 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=68; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=67; + }; + class Item36 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=70; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=69; + }; + class Item37 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=72; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=71; + }; + class Item38 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=74; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=73; + }; + class Item39 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=76; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=75; + }; + class Item40 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=78; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=77; + }; + class Item41 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=80; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=79; + }; + class Item42 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=82; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=81; + }; + class Item43 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=84; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=83; + }; + class Item44 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=86; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=85; + }; + class Item45 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=88; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=87; + }; + class Item46 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=90; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=89; + }; + class Item47 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=92; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=91; + }; + class Item48 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=94; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=93; + }; + class Item49 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=96; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=95; + }; + class Item50 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=98; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=97; + }; + class Item51 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=100; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=99; + }; + class Item52 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=102; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=101; + }; + class Item53 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=104; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=103; + }; + class Item54 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=106; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=105; + }; + class Item55 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=108; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=107; + }; + class Item56 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=110; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=109; + }; + class Item57 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=112; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=111; + }; + class Item58 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=114; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=113; + }; + class Item59 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=116; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=115; + }; + class Item60 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=118; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=117; + }; + class Item61 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=120; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=119; + }; + class Item62 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=122; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=121; + }; + class Item63 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=124; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=123; + }; + class Item64 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=126; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=125; + }; + class Item65 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=128; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=127; + }; + class Item66 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=130; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=129; + }; + class Item67 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=132; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=131; + }; + class Item68 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=134; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=133; + }; + class Item69 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=136; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=135; + }; + class Item70 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=138; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=137; + }; + class Item71 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=140; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=139; + }; + class Item72 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=142; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=141; + }; + class Item73 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=144; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=143; + }; + class Item74 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=146; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=145; + }; + class Item75 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=148; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=147; + }; + class Item76 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=150; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=149; + }; + class Item77 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=152; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=151; + }; + class Item78 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=154; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=153; + }; + class Item79 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=156; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=155; + }; + class Item80 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=158; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=157; + }; + class Item81 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=160; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=159; + }; + class Item82 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=162; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=161; + }; + class Item83 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=164; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=163; + }; + class Item84 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=166; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=165; + }; + class Item85 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=168; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=167; + }; + class Item86 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=170; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=169; + }; + class Item87 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=172; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=171; + }; + class Item88 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=174; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=173; + }; + class Item89 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=176; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=175; + }; + class Item90 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=178; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=177; + }; + class Item91 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=180; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=179; + }; + class Item92 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=182; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=181; + }; + class Item93 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=184; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=183; + }; + class Item94 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=186; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=185; + }; + class Item95 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=188; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=187; + }; + class Item96 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=190; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=189; + }; + class Item97 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=192; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=191; + }; + class Item98 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=194; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=193; + }; + class Item99 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=196; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=195; + }; + class Item100 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=198; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=197; + }; + class Item101 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=200; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=199; + }; + class Item102 + { + dataType="Group"; + side="Civilian"; + class Entities + { + items=1; + class Item0 + { + dataType="Object"; + class PositionInfo + { + position[]={9969.2129,298.72415,12166.665}; + angles[]={0,4.7169838,0}; + }; + side="Civilian"; + flags=7; + class Attributes + { + isPlayable=1; + }; + id=202; + type="VirtualMan_EPOCH"; + }; + }; + class Attributes + { + }; + id=201; + }; + class Item103 + { + dataType="Marker"; + position[]={9958.0127,10461.262,12858.563}; + name="north"; + type="Empty"; + id=2; + atlOffset=10359.609; + }; + }; +}; diff --git a/Sources/mpmissions/epoch.Tanoa/treeView.txt b/Sources/mpmissions/epoch.Tanoa/treeView.txt new file mode 100644 index 00000000..9f6b3d2e Binary files /dev/null and b/Sources/mpmissions/epoch.Tanoa/treeView.txt differ diff --git a/Sources/mpmissions/epoch.VR/treeView.txt b/Sources/mpmissions/epoch.VR/treeView.txt new file mode 100644 index 00000000..3ed445fb Binary files /dev/null and b/Sources/mpmissions/epoch.VR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt b/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt new file mode 100644 index 00000000..b7cb99f4 Binary files /dev/null and b/Sources/mpmissions/epoch.Woodland_ACR/treeView.txt differ diff --git a/Sources/mpmissions/epoch.Zargabad/treeView.txt b/Sources/mpmissions/epoch.Zargabad/treeView.txt new file mode 100644 index 00000000..df752365 Binary files /dev/null and b/Sources/mpmissions/epoch.Zargabad/treeView.txt differ diff --git a/Sources/mpmissions/epoch.utes/treeView.txt b/Sources/mpmissions/epoch.utes/treeView.txt new file mode 100644 index 00000000..2e78286e Binary files /dev/null and b/Sources/mpmissions/epoch.utes/treeView.txt differ diff --git a/Tools/Build/build_epoch.bat b/Tools/Build/build_epoch.bat index 743b4dde..2e7e9797 100644 --- a/Tools/Build/build_epoch.bat +++ b/Tools/Build/build_epoch.bat @@ -80,9 +80,9 @@ echo building server pbo echo build=%BUILDNUMBER%; > !serverBuildInc! SET SOURCE_PATH=%MAIN_PATH%\Sources\epoch_server SET OUTPUT_PATH=%MAIN_PATH%\Server_Install_Pack\@EpochHive\addons -SET TEMP_PATH=x\addons\a3_epoch_server -rd /s/q p:\!TEMP_PATH! -xcopy /s/e/y/q/i "!SOURCE_PATH!" p:\!TEMP_PATH! +SET TEMP_PATH=epoch_server +rd /s/q P:\!TEMP_PATH! +xcopy /s/e/y/q/i "!SOURCE_PATH!" P:\!TEMP_PATH! START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!TEMP_PATH!" "!OUTPUT_PATH!" -clear -prefix="!TEMP_PATH!" -project="P:\!TEMP_PATH!" -include=!AB_includes_path! if '%choice%'=='5' ( call :settings @@ -94,9 +94,9 @@ echo building settings pbo echo build=%BUILDNUMBER%; > !settingsBuildInc! SET SOURCE_PATH=%MAIN_PATH%\Sources\epoch_server_settings SET OUTPUT_PATH=%MAIN_PATH%\Server_Install_Pack\@EpochHive\addons -SET TEMP_PATH=a3_epoch_server_settings -rd /s/q p:\!TEMP_PATH! -xcopy /s/e/y/q/i "!SOURCE_PATH!" p:\!TEMP_PATH! +SET TEMP_PATH=epoch_server_settings +rd /s/q P:\!TEMP_PATH! +xcopy /s/e/y/q/i "!SOURCE_PATH!" P:\!TEMP_PATH! START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!TEMP_PATH!" "!OUTPUT_PATH!" -packonly -clear -prefix="!TEMP_PATH!" -project="P:\!TEMP_PATH!" -include=!AB_includes_path! if '%choice%'=='5' ( call :core @@ -109,8 +109,8 @@ echo build=%BUILDNUMBER%; > !coreBuildInc! SET SOURCE_PATH=%MAIN_PATH%\Sources\epoch_server_core SET OUTPUT_PATH=%MAIN_PATH%\Server_Install_Pack\@EpochHive\addons SET TEMP_PATH=epoch_server_core -rd /s/q p:\!TEMP_PATH! -xcopy /s/e/y/q/i "!SOURCE_PATH!" p:\!TEMP_PATH! +rd /s/q P:\!TEMP_PATH! +xcopy /s/e/y/q/i "!SOURCE_PATH!" P:\!TEMP_PATH! START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!TEMP_PATH!" "!OUTPUT_PATH!" -clear -prefix="!TEMP_PATH!" -project="P:\!TEMP_PATH!" -include=!AB_includes_path! if '%choice%'=='5' ( call :allmaps @@ -127,10 +127,10 @@ for /f "tokens=*" %%G in ('dir /b /s /a:d "!SOURCE_PATH!\mpmissions\epoch.*"') d echo building !MISSION! pbo rd /s/q p:\!MISSION! rem Moving files into temp folder - xcopy /s/e/y/q/i/d "!SOURCE_PATH!\mpmissions\!MISSION!" p:\!MISSION! - xcopy /s/y/q/i/f "!SOURCE_PATH!\description.ext" p:\!MISSION! - xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_code" p:\!MISSION!\epoch_code - xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_config" p:\!MISSION!\epoch_config + xcopy /s/e/y/q/i/d "!SOURCE_PATH!\mpmissions\!MISSION!" P:\!MISSION! + xcopy /s/y/q/i/f "!SOURCE_PATH!\description.ext" P:\!MISSION! + xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_code" P:\!MISSION!\epoch_code + xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_config" P:\!MISSION!\epoch_config START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!MISSION!" "!OUTPUT_PATH!" -clear -prefix=\ -project=P:\ -include=!AB_includes_path! ) goto end diff --git a/Tools/Install/InstallRyanZombies.cmd b/Tools/Install/InstallRyanZombies.cmd new file mode 100644 index 00000000..67ac8617 --- /dev/null +++ b/Tools/Install/InstallRyanZombies.cmd @@ -0,0 +1,28 @@ +@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;@Zombies and Demons;" + +:: Install Ryans Zombies and Demons + +SET MODFOLDER=@Zombies and Demons +SET ARMAWORKSHOPID=501966277 + +:: 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%" + +:: remove old bikey key +del "%ARMASVRPATH%\Keys\RyanD.bikey" + +:: copy latest bikey to server +xcopy /s/e/y/q/i "%ARMASVRPATH%\%MODFOLDER%\Keys" "%ARMASVRPATH%\Keys" diff --git a/Tools/PowerShell/PBO_packaging_tool_GUI.exe b/Tools/PowerShell/PBO_packaging_tool_GUI.exe new file mode 100644 index 00000000..689625d8 Binary files /dev/null and b/Tools/PowerShell/PBO_packaging_tool_GUI.exe differ diff --git a/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 b/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 new file mode 100644 index 00000000..976af4fb --- /dev/null +++ b/Tools/PowerShell/PBO_packaging_tool_GUI.ps1 @@ -0,0 +1,1210 @@ +#region Script Settings +# +# +# powershell.exe +# +# %TEMP% +# +# false +# F:\ARCHIVE\Downloads\logo_only_1024.ico +# false +# Epoch Mod PBO Packer +# false +# true +# true +# false +# true +# Epoch PBO Packing Tool +# Epoch PBO Packing Tool +# 1.0.0.1 +# 1.0 +# Tool to aid in the packing of Epoch Mod source files +# By Raimonds Virtoss and Aaron Clark +# EpochMod.com +# false +# false +# false +# false +# false +# false +# false +# 2 +# +# 1 +# false +# +# +#endregion + +#region ScriptForm Designer + +#region Constructor + +[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") +[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") + +#endregion + +#region Post-Constructor Custom Code + +#endregion + +#region Form Creation +#Warning: It is recommended that changes inside this region be handled using the ScriptForm Designer. +#When working with the ScriptForm designer this region and any changes within may be overwritten. +#~~< Form1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Form1 = New-Object System.Windows.Forms.Form +$Form1.ClientSize = New-Object System.Drawing.Size(832, 582) +$Form1.Text = "Epoch PBO Packing Tool" +#~~< ProgressBar1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ProgressBar1 = New-Object System.Windows.Forms.ProgressBar +$ProgressBar1.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$ProgressBar1.Location = New-Object System.Drawing.Point(12, 554) +$ProgressBar1.Size = New-Object System.Drawing.Size(808, 16) +$ProgressBar1.TabIndex = 2 +$ProgressBar1.Text = "" +#~~< Label4 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label4 = New-Object System.Windows.Forms.Label +$Label4.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Label4.Location = New-Object System.Drawing.Point(12, 9) +$Label4.Size = New-Object System.Drawing.Size(808, 18) +$Label4.TabIndex = 1 +$Label4.Text = "" +$Label4.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter +#~~< TabControl1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TabControl1 = New-Object System.Windows.Forms.TabControl +$TabControl1.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TabControl1.Location = New-Object System.Drawing.Point(12, 30) +$TabControl1.Size = New-Object System.Drawing.Size(808, 518) +$TabControl1.TabIndex = 0 +$TabControl1.Text = "" +#~~< TabPage1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TabPage1 = New-Object System.Windows.Forms.TabPage +$TabPage1.BorderStyle = [System.Windows.Forms.BorderStyle]::FixedSingle +$TabPage1.Location = New-Object System.Drawing.Point(4, 22) +$TabPage1.Padding = New-Object System.Windows.Forms.Padding(3) +$TabPage1.Size = New-Object System.Drawing.Size(800, 492) +$TabPage1.TabIndex = 0 +$TabPage1.Text = "Packager" +$TabPage1.BackColor = [System.Drawing.SystemColors]::Control +#~~< Button16 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button16 = New-Object System.Windows.Forms.Button +$Button16.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button16.Location = New-Object System.Drawing.Point(717, 64) +$Button16.Size = New-Object System.Drawing.Size(75, 23) +$Button16.TabIndex = 4 +$Button16.Text = "Selected" +$Button16.UseVisualStyleBackColor = $true +#~~< Button6 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button6 = New-Object System.Windows.Forms.Button +$Button6.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button6.Location = New-Object System.Drawing.Point(717, 461) +$Button6.Size = New-Object System.Drawing.Size(75, 23) +$Button6.TabIndex = 3 +$Button6.Text = "Create PBO" +$Button6.UseVisualStyleBackColor = $true +#~~< Button5 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button5 = New-Object System.Windows.Forms.Button +$Button5.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button5.Location = New-Object System.Drawing.Point(717, 35) +$Button5.Size = New-Object System.Drawing.Size(75, 23) +$Button5.TabIndex = 2 +$Button5.Text = "Select none" +$Button5.UseVisualStyleBackColor = $true +#~~< Button7 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button7 = New-Object System.Windows.Forms.Button +$Button7.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button7.Location = New-Object System.Drawing.Point(717, 6) +$Button7.Size = New-Object System.Drawing.Size(75, 23) +$Button7.TabIndex = 1 +$Button7.Text = "Select all" +$Button7.UseVisualStyleBackColor = $true +#~~< ListView1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ListView1 = New-Object System.Windows.Forms.ListView +$ListView1.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$ListView1.Location = New-Object System.Drawing.Point(6, 6) +$ListView1.Size = New-Object System.Drawing.Size(705, 478) +$ListView1.TabIndex = 0 +$ListView1.Text = "ListView1" +$ListView1.UseCompatibleStateImageBehavior = $false +$ListView1.View = [System.Windows.Forms.View]::Details +#~~< ColumnHeader1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ColumnHeader1 = New-Object System.Windows.Forms.ColumnHeader +$ColumnHeader1.Text = "Source" +$ColumnHeader1.Width = 205 +#~~< ColumnHeader2 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ColumnHeader2 = New-Object System.Windows.Forms.ColumnHeader +$ColumnHeader2.Text = "Full Path" +$ColumnHeader2.Width = 659 +$ListView1.Columns.AddRange([System.Windows.Forms.ColumnHeader[]](@($ColumnHeader1, $ColumnHeader2))) +#~~< ListViewGroup11 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ListViewGroup11 = New-Object System.Windows.Forms.ListViewGroup("Server", [System.Windows.Forms.HorizontalAlignment]::Left) +$ListViewGroup11.Header = "Server" +#~~< ListViewGroup12 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ListViewGroup12 = New-Object System.Windows.Forms.ListViewGroup("Client", [System.Windows.Forms.HorizontalAlignment]::Left) +$ListViewGroup12.Header = "Client" +#~~< ListViewGroup13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ListViewGroup13 = New-Object System.Windows.Forms.ListViewGroup("Missions", [System.Windows.Forms.HorizontalAlignment]::Left) +$ListViewGroup13.Header = "Missions" +$ListView1.Groups.AddRange([System.Windows.Forms.ListViewGroup[]](@($ListViewGroup11, $ListViewGroup12, $ListViewGroup13))) +$TabPage1.Controls.Add($Button16) +$TabPage1.Controls.Add($Button6) +$TabPage1.Controls.Add($Button5) +$TabPage1.Controls.Add($Button7) +$TabPage1.Controls.Add($ListView1) +#~~< TabPage2 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TabPage2 = New-Object System.Windows.Forms.TabPage +$TabPage2.BorderStyle = [System.Windows.Forms.BorderStyle]::FixedSingle +$TabPage2.Location = New-Object System.Drawing.Point(4, 22) +$TabPage2.Padding = New-Object System.Windows.Forms.Padding(3) +$TabPage2.Size = New-Object System.Drawing.Size(800, 492) +$TabPage2.TabIndex = 1 +$TabPage2.Text = "Settings" +$TabPage2.BackColor = [System.Drawing.SystemColors]::Control +#~~< Label19 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label19 = New-Object System.Windows.Forms.Label +$Label19.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label19.Location = New-Object System.Drawing.Point(6, 376) +$Label19.Size = New-Object System.Drawing.Size(145, 14) +$Label19.TabIndex = 38 +$Label19.Text = "BIPrivatekey Location:" +#~~< TextBox13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox13 = New-Object System.Windows.Forms.TextBox +$TextBox13.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$TextBox13.Location = New-Object System.Drawing.Point(308, 353) +$TextBox13.ReadOnly = $true +$TextBox13.Size = New-Object System.Drawing.Size(145, 20) +$TextBox13.TabIndex = 33 +$TextBox13.Text = "" +#~~< Label18 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label18 = New-Object System.Windows.Forms.Label +$Label18.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label18.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 12.0, [System.Drawing.FontStyle]::Bold, [System.Drawing.GraphicsUnit]::Point, ([System.Byte](0))) +$Label18.Location = New-Object System.Drawing.Point(6, 267) +$Label18.Size = New-Object System.Drawing.Size(235, 29) +$Label18.TabIndex = 37 +$Label18.Text = "Sign File Settings" +#~~< Label5 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label5 = New-Object System.Windows.Forms.Label +$Label5.Location = New-Object System.Drawing.Point(5, 126) +$Label5.Size = New-Object System.Drawing.Size(230, 15) +$Label5.TabIndex = 12 +$Label5.Text = "Path to EpochCore Github" +#~~< Button4 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button4 = New-Object System.Windows.Forms.Button +$Button4.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button4.Location = New-Object System.Drawing.Point(737, 144) +$Button4.Size = New-Object System.Drawing.Size(54, 21) +$Button4.TabIndex = 13 +$Button4.Text = "Browse" +$Button4.UseVisualStyleBackColor = $true +#~~< Label16 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label16 = New-Object System.Windows.Forms.Label +$Label16.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label16.Location = New-Object System.Drawing.Point(5, 296) +$Label16.Size = New-Object System.Drawing.Size(643, 14) +$Label16.TabIndex = 34 +$Label16.Text = "Path to Arma 3 Tools (DSCreateKey):" +#~~< TextBox4 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox4 = New-Object System.Windows.Forms.TextBox +$TextBox4.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox4.Location = New-Object System.Drawing.Point(5, 144) +$TextBox4.Size = New-Object System.Drawing.Size(726, 20) +$TextBox4.TabIndex = 11 +$TextBox4.Text = "" +#~~< Label15 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label15 = New-Object System.Windows.Forms.Label +$Label15.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label15.Location = New-Object System.Drawing.Point(308, 336) +$Label15.Size = New-Object System.Drawing.Size(145, 14) +$Label15.TabIndex = 32 +$Label15.Text = "Sign Version:" +#~~< Label13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label13 = New-Object System.Windows.Forms.Label +$Label13.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label13.Location = New-Object System.Drawing.Point(5, 390) +$Label13.Size = New-Object System.Drawing.Size(785, 15) +$Label13.TabIndex = 29 +$Label13.Text = "" +#~~< Label17 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label17 = New-Object System.Windows.Forms.Label +$Label17.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label17.Location = New-Object System.Drawing.Point(157, 336) +$Label17.Size = New-Object System.Drawing.Size(145, 14) +$Label17.TabIndex = 36 +$Label17.Text = "PBO prefix:" +#~~< Button17 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button17 = New-Object System.Windows.Forms.Button +$Button17.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button17.Location = New-Object System.Drawing.Point(737, 313) +$Button17.Size = New-Object System.Drawing.Size(54, 21) +$Button17.TabIndex = 28 +$Button17.Text = "Browse" +$Button17.UseVisualStyleBackColor = $true +#~~< Label14 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label14 = New-Object System.Windows.Forms.Label +$Label14.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label14.Location = New-Object System.Drawing.Point(6, 336) +$Label14.Size = New-Object System.Drawing.Size(145, 14) +$Label14.TabIndex = 31 +$Label14.Text = "Authority Name Prefix:" +#~~< TextBoxBISignPrefix >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBoxBISignPrefix = New-Object System.Windows.Forms.TextBox +$TextBoxBISignPrefix.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$TextBoxBISignPrefix.Location = New-Object System.Drawing.Point(6, 353) +$TextBoxBISignPrefix.Size = New-Object System.Drawing.Size(145, 20) +$TextBoxBISignPrefix.TabIndex = 30 +$TextBoxBISignPrefix.Text = "epoch" +#~~< Button14 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button14 = New-Object System.Windows.Forms.Button +$Button14.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button14.Location = New-Object System.Drawing.Point(737, 226) +$Button14.Size = New-Object System.Drawing.Size(54, 21) +$Button14.TabIndex = 18 +$Button14.Text = "Browse" +$Button14.UseVisualStyleBackColor = $true +#~~< TextBoxPboPrefix >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBoxPboPrefix = New-Object System.Windows.Forms.TextBox +$TextBoxPboPrefix.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$TextBoxPboPrefix.Location = New-Object System.Drawing.Point(157, 353) +$TextBoxPboPrefix.Size = New-Object System.Drawing.Size(145, 20) +$TextBoxPboPrefix.TabIndex = 35 +$TextBoxPboPrefix.Text = "x\addons" +#~~< Label12 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label12 = New-Object System.Windows.Forms.Label +$Label12.Location = New-Object System.Drawing.Point(5, 208) +$Label12.Size = New-Object System.Drawing.Size(230, 15) +$Label12.TabIndex = 17 +$Label12.Text = "Server PBO Output Folder:" +#~~< TextBox11 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox11 = New-Object System.Windows.Forms.TextBox +$TextBox11.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox11.Location = New-Object System.Drawing.Point(6, 313) +$TextBox11.Size = New-Object System.Drawing.Size(725, 20) +$TextBox11.TabIndex = 27 +$TextBox11.Text = "" +#~~< TextBox10 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox10 = New-Object System.Windows.Forms.TextBox +$TextBox10.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox10.Location = New-Object System.Drawing.Point(5, 226) +$TextBox10.Size = New-Object System.Drawing.Size(726, 20) +$TextBox10.TabIndex = 16 +$TextBox10.Text = "" +#~~< Button13 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button13 = New-Object System.Windows.Forms.Button +$Button13.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button13.Location = New-Object System.Drawing.Point(737, 185) +$Button13.Size = New-Object System.Drawing.Size(54, 21) +$Button13.TabIndex = 15 +$Button13.Text = "Browse" +$Button13.UseVisualStyleBackColor = $true +#~~< Label11 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label11 = New-Object System.Windows.Forms.Label +$Label11.Location = New-Object System.Drawing.Point(5, 167) +$Label11.Size = New-Object System.Drawing.Size(230, 15) +$Label11.TabIndex = 14 +$Label11.Text = "Output Folder MpMissions:" +#~~< TextBox9 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox9 = New-Object System.Windows.Forms.TextBox +$TextBox9.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox9.Location = New-Object System.Drawing.Point(5, 185) +$TextBox9.Size = New-Object System.Drawing.Size(726, 20) +$TextBox9.TabIndex = 13 +$TextBox9.Text = "" +#~~< Button9 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button9 = New-Object System.Windows.Forms.Button +$Button9.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button9.Location = New-Object System.Drawing.Point(678, 453) +$Button9.Size = New-Object System.Drawing.Size(54, 21) +$Button9.TabIndex = 12 +$Button9.Text = "Save" +$Button9.UseVisualStyleBackColor = $true +#~~< Button8 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button8 = New-Object System.Windows.Forms.Button +$Button8.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button8.Location = New-Object System.Drawing.Point(738, 453) +$Button8.Size = New-Object System.Drawing.Size(54, 21) +$Button8.TabIndex = 11 +$Button8.Text = "Delete" +$Button8.UseVisualStyleBackColor = $true +#~~< Label7 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label7 = New-Object System.Windows.Forms.Label +$Label7.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left)) +$Label7.Location = New-Object System.Drawing.Point(6, 435) +$Label7.Size = New-Object System.Drawing.Size(230, 15) +$Label7.TabIndex = 10 +$Label7.Text = "Save Settings:" +#~~< TextBox5 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox5 = New-Object System.Windows.Forms.TextBox +$TextBox5.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Bottom -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox5.Enabled = $false +$TextBox5.Location = New-Object System.Drawing.Point(6, 453) +$TextBox5.Size = New-Object System.Drawing.Size(666, 20) +$TextBox5.TabIndex = 9 +$TextBox5.Text = "" +#~~< Button3 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button3 = New-Object System.Windows.Forms.Button +$Button3.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button3.Location = New-Object System.Drawing.Point(738, 62) +$Button3.Size = New-Object System.Drawing.Size(54, 21) +$Button3.TabIndex = 8 +$Button3.Text = "Browse" +$Button3.UseVisualStyleBackColor = $true +#~~< Label3 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label3 = New-Object System.Windows.Forms.Label +$Label3.Location = New-Object System.Drawing.Point(6, 44) +$Label3.Size = New-Object System.Drawing.Size(230, 15) +$Label3.TabIndex = 7 +$Label3.Text = "Path to Arma 3 Addon builder:" +#~~< TextBox3 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox3 = New-Object System.Windows.Forms.TextBox +$TextBox3.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox3.Location = New-Object System.Drawing.Point(6, 62) +$TextBox3.Size = New-Object System.Drawing.Size(726, 20) +$TextBox3.TabIndex = 6 +$TextBox3.Text = "" +#~~< Button2 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button2 = New-Object System.Windows.Forms.Button +$Button2.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button2.Location = New-Object System.Drawing.Point(738, 103) +$Button2.Size = New-Object System.Drawing.Size(54, 21) +$Button2.TabIndex = 5 +$Button2.Text = "Browse" +$Button2.UseVisualStyleBackColor = $true +#~~< Label2 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label2 = New-Object System.Windows.Forms.Label +$Label2.Location = New-Object System.Drawing.Point(6, 85) +$Label2.Size = New-Object System.Drawing.Size(230, 15) +$Label2.TabIndex = 4 +$Label2.Text = "Path to Epoch Github:" +#~~< TextBox2 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox2 = New-Object System.Windows.Forms.TextBox +$TextBox2.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox2.Location = New-Object System.Drawing.Point(6, 103) +$TextBox2.Size = New-Object System.Drawing.Size(726, 20) +$TextBox2.TabIndex = 3 +$TextBox2.Text = "" +#~~< Button1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button1 = New-Object System.Windows.Forms.Button +$Button1.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Button1.Location = New-Object System.Drawing.Point(738, 21) +$Button1.Size = New-Object System.Drawing.Size(54, 21) +$Button1.TabIndex = 2 +$Button1.Text = "Browse" +$Button1.UseVisualStyleBackColor = $true +#~~< Label1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label1 = New-Object System.Windows.Forms.Label +$Label1.Location = New-Object System.Drawing.Point(6, 3) +$Label1.Size = New-Object System.Drawing.Size(230, 15) +$Label1.TabIndex = 1 +$Label1.Text = "Path to Arma 3:" +#~~< TextBox1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox1 = New-Object System.Windows.Forms.TextBox +$TextBox1.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right)) +$TextBox1.Location = New-Object System.Drawing.Point(6, 21) +$TextBox1.Size = New-Object System.Drawing.Size(726, 20) +$TextBox1.TabIndex = 0 +$TextBox1.Text = "" +$TabPage2.Controls.Add($Label19) +$TabPage2.Controls.Add($TextBox13) +$TabPage2.Controls.Add($Label18) +$TabPage2.Controls.Add($Label5) +$TabPage2.Controls.Add($Button4) +$TabPage2.Controls.Add($Label16) +$TabPage2.Controls.Add($TextBox4) +$TabPage2.Controls.Add($Label15) +$TabPage2.Controls.Add($Label13) +$TabPage2.Controls.Add($Label17) +$TabPage2.Controls.Add($Button17) +$TabPage2.Controls.Add($Label14) +$TabPage2.Controls.Add($TextBoxBISignPrefix) +$TabPage2.Controls.Add($Button14) +$TabPage2.Controls.Add($TextBoxPboPrefix) +$TabPage2.Controls.Add($Label12) +$TabPage2.Controls.Add($TextBox11) +$TabPage2.Controls.Add($TextBox10) +$TabPage2.Controls.Add($Button13) +$TabPage2.Controls.Add($Label11) +$TabPage2.Controls.Add($TextBox9) +$TabPage2.Controls.Add($Button9) +$TabPage2.Controls.Add($Button8) +$TabPage2.Controls.Add($Label7) +$TabPage2.Controls.Add($TextBox5) +$TabPage2.Controls.Add($Button3) +$TabPage2.Controls.Add($Label3) +$TabPage2.Controls.Add($TextBox3) +$TabPage2.Controls.Add($Button2) +$TabPage2.Controls.Add($Label2) +$TabPage2.Controls.Add($TextBox2) +$TabPage2.Controls.Add($Button1) +$TabPage2.Controls.Add($Label1) +$TabPage2.Controls.Add($TextBox1) +#~~< TabPage3 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TabPage3 = New-Object System.Windows.Forms.TabPage +$TabPage3.BorderStyle = [System.Windows.Forms.BorderStyle]::FixedSingle +$TabPage3.Location = New-Object System.Drawing.Point(4, 22) +$TabPage3.Padding = New-Object System.Windows.Forms.Padding(3) +$TabPage3.Size = New-Object System.Drawing.Size(800, 492) +$TabPage3.TabIndex = 2 +$TabPage3.Text = "Developers" +$TabPage3.BackColor = [System.Drawing.SystemColors]::Control +#~~< CheckBox2 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$CheckBox2 = New-Object System.Windows.Forms.CheckBox +$CheckBox2.Location = New-Object System.Drawing.Point(78, 6) +$CheckBox2.Size = New-Object System.Drawing.Size(178, 24) +$CheckBox2.TabIndex = 27 +$CheckBox2.Text = "Update versions when packing" +$CheckBox2.UseVisualStyleBackColor = $true +#~~< Button15 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button15 = New-Object System.Windows.Forms.Button +$Button15.Location = New-Object System.Drawing.Point(6, 173) +$Button15.Size = New-Object System.Drawing.Size(96, 21) +$Button15.TabIndex = 26 +$Button15.Text = "Reload Versions" +$Button15.UseVisualStyleBackColor = $true +#~~< Button12 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Button12 = New-Object System.Windows.Forms.Button +$Button12.Location = New-Object System.Drawing.Point(6, 200) +$Button12.Size = New-Object System.Drawing.Size(96, 21) +$Button12.TabIndex = 25 +$Button12.Text = "Update Versions" +$Button12.UseVisualStyleBackColor = $true +#~~< Label6 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label6 = New-Object System.Windows.Forms.Label +$Label6.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$Label6.Location = New-Object System.Drawing.Point(508, 9) +$Label6.Size = New-Object System.Drawing.Size(141, 21) +$Label6.TabIndex = 15 +$Label6.Text = "Arma 3 Mod Output Folder:" +#~~< TextBox8 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox8 = New-Object System.Windows.Forms.TextBox +$TextBox8.Location = New-Object System.Drawing.Point(6, 147) +$TextBox8.Size = New-Object System.Drawing.Size(96, 20) +$TextBox8.TabIndex = 24 +$TextBox8.Text = "" +#~~< ComboBox1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$ComboBox1 = New-Object System.Windows.Forms.ComboBox +$ComboBox1.Anchor = ([System.Windows.Forms.AnchorStyles]([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Right)) +$ComboBox1.FormattingEnabled = $true +$ComboBox1.Location = New-Object System.Drawing.Point(655, 6) +$ComboBox1.SelectedIndex = -1 +$ComboBox1.Size = New-Object System.Drawing.Size(137, 21) +$ComboBox1.TabIndex = 14 +$ComboBox1.Text = "Select Arma Mod" +#~~< TextBox7 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox7 = New-Object System.Windows.Forms.TextBox +$TextBox7.Location = New-Object System.Drawing.Point(6, 107) +$TextBox7.Size = New-Object System.Drawing.Size(96, 20) +$TextBox7.TabIndex = 22 +$TextBox7.Text = "" +#~~< Label10 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label10 = New-Object System.Windows.Forms.Label +$Label10.Location = New-Object System.Drawing.Point(6, 130) +$Label10.Size = New-Object System.Drawing.Size(145, 14) +$Label10.TabIndex = 21 +$Label10.Text = "Public Build:" +#~~< Label9 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label9 = New-Object System.Windows.Forms.Label +$Label9.Location = New-Object System.Drawing.Point(6, 90) +$Label9.Size = New-Object System.Drawing.Size(145, 14) +$Label9.TabIndex = 18 +$Label9.Text = "Private Build:" +#~~< TextBox6 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$TextBox6 = New-Object System.Windows.Forms.TextBox +$TextBox6.Location = New-Object System.Drawing.Point(6, 67) +$TextBox6.Size = New-Object System.Drawing.Size(96, 20) +$TextBox6.TabIndex = 16 +$TextBox6.Text = "" +#~~< Label8 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Label8 = New-Object System.Windows.Forms.Label +$Label8.Location = New-Object System.Drawing.Point(6, 50) +$Label8.Size = New-Object System.Drawing.Size(145, 14) +$Label8.TabIndex = 15 +$Label8.Text = "Mod Version:" +#~~< CheckBox1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$CheckBox1 = New-Object System.Windows.Forms.CheckBox +$CheckBox1.Location = New-Object System.Drawing.Point(6, 6) +$CheckBox1.Size = New-Object System.Drawing.Size(66, 24) +$CheckBox1.TabIndex = 14 +$CheckBox1.Text = "Enable" +$CheckBox1.UseVisualStyleBackColor = $true +$TabPage3.Controls.Add($CheckBox2) +$TabPage3.Controls.Add($Button15) +$TabPage3.Controls.Add($Button12) +$TabPage3.Controls.Add($Label6) +$TabPage3.Controls.Add($TextBox8) +$TabPage3.Controls.Add($ComboBox1) +$TabPage3.Controls.Add($TextBox7) +$TabPage3.Controls.Add($Label10) +$TabPage3.Controls.Add($Label9) +$TabPage3.Controls.Add($TextBox6) +$TabPage3.Controls.Add($Label8) +$TabPage3.Controls.Add($CheckBox1) +$TabControl1.Controls.Add($TabPage1) +$TabControl1.Controls.Add($TabPage2) +$TabControl1.Controls.Add($TabPage3) +$TabControl1.SelectedIndex = 0 +$Form1.Controls.Add($ProgressBar1) +$Form1.Controls.Add($Label4) +$Form1.Controls.Add($TabControl1) +#region$Form1.Icon = ([System.Drawing.Icon](...) +$Form1.Icon = ([System.Drawing.Icon](New-Object System.Drawing.Icon((New-Object System.IO.MemoryStream(($$ = [System.Convert]::FromBase64String( +"AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAA"+ + "AAAAAAD///8AAAAAAAAAAAAAAAAAAAAACQAAAHEAAADLAAAA6wAAAOkAAADHAAAAbwAAAAcAAAAA"+ + "AAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAKQAAANgAAACLAAAAKgAAAAEAAAABAAAALQAAAJYA"+ + "AADSAAAAJgAAAAAAAAAAAAAAAP///wAAAAAAAAAAIAAAANoAAAA7AAAAAAAAAAAAAAAAAAAAAAAA"+ + "AAAAAAAAAAAAQQAAAN0AAAAaAAAAAAAAAAD///8AAAAAygAAAOgAAADcAAAAqgAAAJ4AAACEAAAA"+ + "dQAAAF8AAABDAAAAOwAAAB4AAABeAAAArwAAAAAAAAAA////AAAAAOEAAAD/AAAA/wAAAP8AAAD/"+ + "AAAA/AAAAP0AAADgAAAA1wAAAMEAAACwAAAAlQAAAM4AAACQAAAAN////wAAAADAAAAAdAAAAEcA"+ + "AAAwAAAAJgAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAmgAAAAD///8AAAAA0wAA"+ + "AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAM8AAAAA////"+ + "AAAAAPQAAADgAAAAzQAAALkAAACmAAAAkQAAAH4AAABjAAAAUQAAAD8AAAArAAAAAQAAAAAAAADT"+ + "AAAAAP///wAAAAD3AAAAzwAAAMkAAACjAAAAoAAAAIwAAABzAAAAYwAAAFAAAAA9AAAAHgAAAAQA"+ + "AAAAAAAA1QAAAAD///8AAAAA0wAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"+ + "AAAAAAAAAAAACQAAAMcAAAAA////AAAAALkAAABhAAAAGwAAAA0AAAABAAAAAAAAAAAAAAAAAAAA"+ + "AAAAAAAAAAAAAAAAAAAAAEoAAACUAAAAAP///wAAAADhAAAA/wAAAP8AAAD/AAAA/QAAAOYAAADV"+ + "AAAAwQAAAK4AAACYAAAAfQAAAG8AAAC9AAAAewAAABr///8AAAAA3wAAAPoAAADwAAAAzQAAALwA"+ + "AACpAAAAlQAAAIEAAABpAAAAWgAAAEYAAAB7AAAAuAAAAAkAAAAA////AAAAAAoAAAAgAAAA1AAA"+ + "AD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAAA3QAAABkAAAAAAAAAAP///wAAAAAAAAAA"+ + "AAAAACkAAADXAAAAkgAAACkAAAABAAAAAgAAAC4AAACWAAAA0wAAACkAAAAAAAAAAAAAAAD///8A"+ + "AAAAAAAAAAAAAAAAAAAACAAAAF0AAADLAAAA6gAAAOYAAADHAAAAbgAAAAEAAAAAAAAAAAAAAAAA"+ + "AAAA8A8AAOAHAADH4wAAgAMAAIAAAACB+QAAn/kAAIAFAACABQAAn/kAAIP5AACAAAAAgAEAAIfj"+ + "AADgBwAA8A8AAA==")),0,$$.Length))))) +#endregion +#~~< components >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$components = New-Object System.ComponentModel.Container +#~~< Timer1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$Timer1 = New-Object System.Windows.Forms.Timer($components) +#~~< FolderBrowserDialog1 >~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +$FolderBrowserDialog1 = New-Object System.Windows.Forms.FolderBrowserDialog + +#endregion + +#region Custom Code + + # Defines + + $Label4.Text = Get-Random -InputObject "Bug? That's not a bug, that's a feature.", "A bug in the code is worth two in the documentation." + + $ListView1.CheckBoxes = $true + $FolderBrowserDialog1.ShowNewFolderButton = $false + $TextBox1.Text = "Arma 3 not found" + $TextBox3.Text = "Arma Tools not found" + $TextBox11.Text = "Arma Tools not found" + $TextBox2.Text = "C:\" + $TextBox4.Text = "C:\" + $TextBox5.Text = (Join-Path $env:APPDATA "\Epoch_PBO.ini") + + $OS = (Get-WmiObject Win32_OperatingSystem).OSArchitecture + + $armaPathArr = switch($OS) #gets array of objects from registry + { + "64-bit" { Get-ChildItem "HKLM:\SOFTWARE\WOW6432Node\Bohemia Interactive\" | ForEach-Object { Get-ItemProperty $_.pspath } } + "32-bit" { Get-ChildItem "HKLM:\SOFTWARE\Bohemia Interactive Studio\" | ForEach-Object { Get-ItemProperty $_.pspath } } + default { @( ) } #OS Architecture not recognized, might need to update Powershell version, should work with 2.0 (win7) + } + + $TextBox1.Text = $armaPathArr.main | ForEach-Object { if ($_ -match "Arma 3") { return $_ } } + $TextBox3.Text = $armaPathArr.path | ForEach-Object { if ($_ -match "AddonBuilder") { return $_ } } + $TextBox11.Text = (Get-ItemProperty 'HKCU:\SOFTWARE\Bohemia Interactive\dscreatekey').path + + + # Functions + + function fnc_populateListView + { + $Script:listarr = @() #empty arr + $folders = Get-ChildItem $TextBox2.Text -directory + + if ($Checkbox1.Checked) + { + if (Test-Path $TextBox4.Text) + { + $priv = Get-ChildItem $TextBox4.Text -directory + $folders +=, $priv + } + } + + foreach ($x in $folders) + { + $y = Get-ChildItem $x.fullname -directory + + if ($y) #If subfolders exist + { + foreach ($z in $y) + { + switch($z.name) + { + #Groups: 11 server 12 client 13 mission + { $_.contains("server") } + { + $tmp = New-Object System.Windows.Forms.ListViewItem([System.String[]] ( @($_, $z.fullname) ), -1) + $tmp.Name = $_ + $tmp.Group = $ListViewGroup11 + $Script:listarr +=, $tmp + } + { $_.contains("mpmissions") } + { + $missions = Get-ChildItem $z.fullname -directory + foreach ($mission in $missions) + { + $tmp = New-Object System.Windows.Forms.ListViewItem([System.String[]] ( @($mission.name, $mission.fullname) ), -1) + $tmp.Name = $_ + $tmp.Group = $ListViewGroup13 + $Script:listarr +=, $tmp + } + } + default + { + $ok = Test-Path(Join-Path $z.fullname "\config.cpp") + if ($ok) + { + $tmp = New-Object System.Windows.Forms.ListViewItem([System.String[]] ( @($_, $z.fullname) ), -1) + $tmp.Name = $_ + $tmp.Group = $ListViewGroup12 + $Script:listarr +=, $tmp + } + } + } + } + } + } + $ListView1.Items.AddRange([System.Windows.Forms.ListViewItem[]] ( $Script:listarr )) + } + + function fnc_enableControls + { + $c1 = Test-Path (Join-Path $TextBox1.Text "\Arma3.exe") + $c2 = Test-Path (Join-Path $TextBox2.Text "\Sources") + $c3 = Test-Path (Join-Path $TextBox3.Text "\AddonBuilder.exe") -ErrorAction SilentlyContinue + $c4 = Test-Path (Join-Path $TextBox4.Text "\Sources") + $c5 = Test-Path "P:\" + + if ($c1 -and ($c2 -or $c4) -and $c3 -and $c5) + { + $Button5.Enabled = $true + $Button6.Enabled = $true + $Button7.Enabled = $true + $Button16.Enabled = $true + $ListView1.Enabled = $true + } + else + { + $Button5.Enabled = $false + $Button6.Enabled = $false + $Button7.Enabled = $false + $Button16.Enabled = $false + $ListView1.Enabled = $false + } + $Label4.Text = if (!$c5) + { + "P:\ drive not mounted" + } + elseif (Get-Process Arma3 -ErrorAction SilentlyContinue) #not a boolean, but any variable equals true and null equals false + { + "(WARNING) Arma 3 is running" + } + elseif ( !$c2 -and !$c4 ) + { + "Please add at least one Github source under SETTINGS tab" + } + else + { + #"EPOCH_CODE and EPOCH_CONFIG are automatically merged into MPMissions PBO packs" + "Tool is Ready! Please check items from the list you want to PBO" + } + } + + function fnc_reloadVersions + { + $p6 = Join-Path $Textbox4.Text "\version.txt" + $p7 = Join-Path $Textbox4.Text "\build.txt" + $p8 = Join-Path $Textbox2.Text "\build.txt" + $Textbox6.Text = if (Test-Path $p6) { Get-Content $p6 } else { "Path not set" } + $Textbox7.Text = if (Test-Path $p7) { Get-Content $p7 } else { "Path not set" } + $Textbox8.Text = if (Test-Path $p8) { Get-Content $p8 } else { "Path not set" } + $Textbox13.Text = if (Test-Path $p6) { (Get-Content $p6) -replace '[.]','' } else { "" } + } + + function fnc_updateBuildNumber($inpath, $outpath, $increment) + { + if ($Checkbox1.Checked -and $checkbox2.Checked ) + { + $path = Join-Path $inpath "\build.txt" + if (Test-Path $path) + { + $in = Get-Content $path + + $newBuild = [int]$in + $increment + $Out = @( + 'build=' + [string]$newBuild + ';' + ) + + $Out | Out-File(Join-Path $outpath "\build.hpp") -Encoding "UTF8" + $newBuild | Out-File $path -Encoding "UTF8" + if ($increment -eq 1) + { + fnc_reloadVersions + } + } + } + } + + function fnc_updateVersions + { + $p6 = Join-Path $Textbox4.Text "\version.txt" + $p7 = Join-Path $Textbox4.Text "\build.txt" + $p8 = Join-Path $Textbox2.Text "\build.txt" + + if (($Textbox6.Text -ne "Path not set") -and (Test-Path $p6)) + { + $TextBox6.Text | Out-File $p6 -Encoding "UTF8" + } + if (($Textbox7.Text -ne "Path not set") -and (Test-Path $p7)) + { + $TextBox7.Text | Out-File $p7 -Encoding "UTF8" + } + if (($Textbox8.Text -ne "Path not set") -and (Test-Path $p8)) + { + $TextBox8.Text | Out-File $p8 -Encoding "UTF8" + } + } + + function fnc_getSetPath($switch) + { + $FolderBrowserDialog1.ShowNewFolderButton = $true + $FolderBrowserDialog1.ShowDialog() + if ($FolderBrowserDialog1.SelectedPath) + { + $p = $FolderBrowserDialog1.SelectedPath + switch($switch) + { + 1 # Location of Arma 3 + { + $TextBox1.Text = $p + $tp = Join-Path $p "\Arma3.exe" + if (!(Test-Path $tp)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + } + + 2 # Location of Public Github + { + $TextBox2.Text = $p + $tp = Join-Path $p "\Sources" + if (!(Test-Path $tp)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + else + { + $ListView1.Items.Clear() + fnc_populateListView + } + } + + 3 # Location of Addob Builder + { + $TextBox3.Text = $p + $tp = Join-Path $p "\AddonBuilder.exe" + if (!(Test-Path $tp)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + } + + 4 # Location of Private Github + { + $TextBox4.Text = $p + $tp = Join-Path $p "\Sources" + if (!(Test-Path $tp)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + else + { + $ListView1.Items.Clear() + fnc_populateListView + } + } + + 5 # Location of Packed missions + { + $TextBox9.Text = $p + if (!(Test-Path $p)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + } + + 6 # Location of Packed missions + { + $TextBox10.Text = $p + if (!(Test-Path $p)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + } + + 7 # Location of Addob Builder + { + $TextBox11.Text = $p + $tp = Join-Path $p "\DSCreateKey.exe" + if (!(Test-Path $tp)) + { + [System.Windows.Forms.MessageBox]::Show(($tp + " Not found."), "Warning") + } + } + } + $FolderBrowserDialog1.SelectedPath = $null + } + } + + function fnc_selectAll($boo) + { + foreach ($x in $Script:listarr) + { + $x.checked = $boo + } + } + + function fnc_selectSelected + { + foreach ($x in $Script:listarr) + { + $x.checked = $x.selected + } + } + + function fnc_devEnableDisable + { + $cbstate = $CheckBox1.Checked + + $TextBox6.Enabled = $cbstate + $TextBox7.Enabled = $cbstate + $TextBox8.Enabled = $cbstate + $TextBox13.Enabled = $cbstate + $TextBox11.Enabled = $cbstate + $TextBoxPboPrefix.Enabled = $cbstate + $TextBoxBISignPrefix.Enabled = $cbstate + + $Button15.Enabled = $cbstate + $Button12.Enabled = $cbstate + $Button17.Enabled = $cbstate + + $ComboBox1.Enabled = $cbstate + + $ListView1.Items.Clear() + fnc_populateListView + } + + function fnc_outputmodcpp + { + $Output = Join-Path $TextBox1.Text $ComboBox1.SelectedItem + $Out = @( + 'dir = "@Epoch";' + 'name = "Epoch Mod ' + $Textbox6.Text + '";' + 'actionName = "Website";' + 'picture = "mod.paa";' + 'action = "http://www.epochmod.com";' + 'overview = "Open world survival mod set in the year 2035, Just two years after the mass extinction of billions of people. Those that remain are left with remnants of a once technological society. Try to survive, build, or explore your way through the harsh dynamic environment.";' + ) + + $Out | Out-File (Join-Path $Output "mod.cpp") + } + + function fnc_settingsSave + { + $Out = @( + + $ComboBox1.SelectedIndex + $TextBox1.Text + $TextBox3.Text + $TextBox2.Text + $TextBox9.Text + $TextBox1.Text + $TextBox10.Text + $TextBox4.Text + $CheckBox1.Checked + $TextBox11.Text + $TextBoxPboPrefix.Text + $TextBoxBISignPrefix.Text + $CheckBox2.Checked + ) + + $Out | Out-File $TextBox5.Text + } + + function fnc_settingsLoad + { + if (Test-Path $TextBox5.Text) + { + Write-Host @("Loading application settings from:", $TextBox5.Text) -BackgroundColor darkcyan -ForegroundColor cyan + $in = Get-Content $TextBox5.Text + + $ComboBox1.SelectedIndex = $in[0] + $TextBox1.Text = $in[1] + $TextBox3.Text = $in[2] + $TextBox2.Text = $in[3] + $TextBox9.Text = $in[4] + $TextBox1.Text = $in[5] + $TextBox10.Text = $in[6] + $TextBox4.Text = $in[7] + + #Hacky Convert str to bool + $state = if ($in[8] -eq "True") { $true } else { $false } + $CheckBox1.Checked = $state + + $TextBox11.Text = $in[9] + + $TextBoxPboPrefix.Text = if ($in[10]) { $in[10] } else { "x\addons" } + $TextBoxBISignPrefix.Text = if ($in[11]) { $in[11] } else { "epoch" } + + $state = if ($in[12] -eq "True") { $true } else { $false } + $CheckBox2.Checked = $state + + } + else + { + Write-Host "Settings file not found, please save your changes under SETTINGS tab!" -BackgroundColor darkred -ForegroundColor red + } + } + + function fnc_CreatePBO + { + + # + $signName = ($TextBoxBISignPrefix.Text + $TextBox13.Text) + $signFileName = ($signName + ".biprivatekey") + $signfile = Join-Path $TextBox11.Text $signFileName + + # make privatekey if it does not exist + if (!(Test-Path $signfile)) + { + $createKeyExecutable = Join-Path $TextBox11.Text "DSCreateKey.exe" + $argz = @($signName) + Start-Process -FilePath $createKeyExecutable -WorkingDirectory $TextBox11.Text -ArgumentList $argz -WindowStyle Hidden -Wait + Write-Host @("Creating new Private Key:", $signfile) -BackgroundColor darkcyan -ForegroundColor cyan + } + + fnc_outputmodcpp + # increase build numbers + + $incrementClientBuild = 1 + $incrementServerBuild = 1 + + + $Bob = Join-Path $TextBox3.Text "\AddonBuilder.exe" + $includes = "P:\includes.txt" + if (!(Test-Path $includes)) + { + Write-Host @("Creating new includes file:", $includes) -BackgroundColor darkcyan -ForegroundColor cyan + "*.xml;*.pac;*.paa;*.sqf;*.sqs;*.bikb;*.fsm;*.wss;*.ogg;*.wav;*.fxy;*.csv;*.html;*.lip;*.txt;*.wrp;*.bisurf;*.rvmat;*.sqm;*.ext;*.hpp" | Out-File $includes -Encoding "UTF8" + } + + foreach ($i in $Script:listarr) {if ($i.checked) { $ct++ }} + $cnt = 100 / $ct + + Write-Host "Building Selected PBO files ..." -BackgroundColor darkcyan -ForegroundColor cyan + + foreach ($x in $Script:listarr) + { + if ($x.checked) + { + $name = $x.subitems[0].Text + $tmp = "P:\$name" + $ProgressBar1.Value = $ProgressBar1.Value + [Math]::Floor($cnt) + $ProgressBar1.Refresh() + + switch($x.group.header) + { + "Server" + { + $Output = $TextBox10.Text + if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } + Copy-Item -Path $x.subitems[1].Text -Destination $tmp -Recurse + + fnc_updateBuildNumber $TextBox2.Text ($x.subitems[1].Text) $incrementServerBuild + $incrementServerBuild = 0 + + if ($checkbox2.Checked) + { + $txt = "Building Server PBO (" + $x.subitems[0].Text + ".pbo) ... Please wait" + $tree = Join-Path $x.subitems[1].Text "treeView.txt" + tree /A /F $tmp > $tree + fnc_pboWriteHostAndTree $txt $tree + } + + $argz = @($tmp, ( '"' + $Output + '"' ), "-packonly", "-clear", "-prefix=$name", "-project=P:\", "-include=$includes") + Start-Process -FilePath $Bob -ArgumentList $argz -WindowStyle Hidden -Wait + } + "Client" + { + $name = Join-Path $TextBoxPboPrefix.Text $name + $tmp = "P:\$name" + + fnc_updateBuildNumber $TextBox4.Text ($x.subitems[1].Text) $incrementClientBuild + $incrementClientBuild = 0 + + $Output = $TextBox1.Text + "\" + $ComboBox1.SelectedItem + "\Addons" + if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } + Copy-Item -Path $x.subitems[1].Text -Destination $tmp -Recurse + + if ($checkbox2.Checked) + { + $txt = "Building Client PBO (" + $x.subitems[0].Text + ".pbo) ... Please wait" + $tree = Join-Path $x.subitems[1].Text "treeView.txt" + tree /A /F $tmp > $tree + fnc_pboWriteHostAndTree $txt $tree + } + + $signFlag = "" + if (Test-Path $signfile) { $signFlag = ('-sign="' + $signfile + '"') } + + $argz = @($tmp, ( '"' + $Output + '"' ), "-clear", "-prefix=$name", "-project=P:\", "-include=$includes", $signFlag) + Start-Process -FilePath $Bob -ArgumentList $argz -WindowStyle Hidden -Wait + } + "Missions" + { + $Output = $TextBox9.Text + $src = $TextBox2.Text + "\Sources\" + + fnc_updateBuildNumber $TextBox2.Text ($src + "epoch_config") $incrementServerBuild + $incrementServerBuild = 0 + + if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } + Copy-Item -Path $x.subitems[1].Text -Destination $tmp -Recurse + Copy-Item($src + "epoch_code") -Destination $tmp -Recurse + Copy-Item($src + "epoch_config") -Destination $tmp -Recurse + Copy-Item($src + "description.ext") -Destination $tmp + + if ($checkbox2.Checked) + { + $txt = "Building MPMission PBO (" + $x.subitems[0].Text + ".pbo) ... Please wait" + $tree = Join-Path $x.subitems[1].Text "treeView.txt" + tree /A /F $tmp > $tree + fnc_pboWriteHostAndTree $txt $tree + } + + $argz = @($tmp, ( '"' + $Output + '"' ), "-clear", "-prefix=\", "-project=P:\", "-include=$includes") + Start-Process -FilePath $Bob -ArgumentList $argz -WindowStyle Hidden -Wait + } + } + #cleanup + if (Test-Path $tmp) { Remove-Item -Path $tmp -Recurse } + if (Test-Path($env:temp + "\" + $name)) { Remove-Item -Path($env:temp + "\" + $name) -Recurse } + } + } + $ProgressBar1.Value = 0 + $ProgressBar1.Refresh() + + Write-Host "All done!" -BackgroundColor darkcyan -ForegroundColor cyan + } + + function fnc_pboWriteHostAndTree ($txt, $tree) + { + Write-Host "" + Write-Host $txt -ForegroundColor yellow + foreach ($w in (Get-Content $tree)) + { + Write-Host $w + } + $Label4.Text = $txt + $Label4.Refresh() + } + + # Event Handlers + $Button1.Add_Click({ fnc_getSetPath(1) }) + $Button2.Add_Click({ fnc_getSetPath(2) }) + $Button3.Add_Click({ fnc_getSetPath(3) }) + $Button4.Add_Click({ fnc_getSetPath(4) }) + $Button13.Add_Click({ fnc_getSetPath(5) }) + $Button14.Add_Click({ fnc_getSetPath(6) }) + $Button17.Add_Click({ fnc_getSetPath(7) }) + $Button6.Add_Click({ fnc_CreatePBO }) + + $Button7.Add_Click({ fnc_selectAll($true) }) + $Button5.Add_Click({ fnc_selectAll($false) }) + $Button12.Add_Click({ fnc_updateVersions }) + $Button15.Add_Click({ fnc_reloadVersions }) + $Button16.Add_Click({ fnc_selectSelected }) + $Button8.Add_Click({ Remove-Item -Path $TextBox5.Text -ErrorAction SilentlyContinue }) + $Button9.Add_Click({ fnc_settingsSave }) + $CheckBox1.Add_CheckedChanged({ fnc_devEnableDisable }) + + + # Main code + + $mods = Get-ChildItem $TextBox1.Text -directory + $modsarr = @() + foreach ($x in $mods) + { + if (Test-Path($x.fullname + "\mod.cpp")) + { + $modsarr += ,$x.name + } + } + + $ComboBox1.Items.AddRange([System.Object[]] ( $modsarr )) + + fnc_settingsLoad + + # Fake endless loop, spawned thread + $Timer1.Start() + $Timer1.Interval = 1000 + $Timer1.Add_tick({ fnc_enableControls }) + + if ($TextBox2.Text) + { + fnc_populateListView + } + + fnc_devEnableDisable + fnc_reloadVersions + + + $signName = ($TextBoxBISignPrefix.Text + $TextBox13.Text) + $signFileName = ($signName + ".biprivatekey") + $signfile = Join-Path $TextBox11.Text $signFileName + $signFlag = "" + if (Test-Path $signfile) { + $Label13.Text = $signfile + $signFlag = ('-sign="' + $signfile + '"') + } + else + { + $Label13.Text = "Path Not Found!" + } + +#endregion + +#region Event Loop + +function Main{ + [System.Windows.Forms.Application]::EnableVisualStyles() + [System.Windows.Forms.Application]::Run($Form1) +} + +#endregion + +#endregion + +#region Event Handlers + +Main # This call must remain below all other event functions + +#endregion +# ======================================================== +# +# Script Information +# +# Title: Epoch PBO Packing Tool - EpochMod.com +# Author: Raimonds Virtoss - Raymix @ Epoch UI code +# Contributors: Aaron Clark - [VB]AWOL +# Originally created: 4/24/2016 - 17:56:19 +# Description: Form based (GUI) Tool to Pack or binarize Epoch PBOs. Scans your github repos and automatically creates a list of relevant folders for packaging +# Usage: .EXE file will be provided when script is done, for now simply right click it and run with powershell. +# +# ======================================================== + diff --git a/Tools/SQF/getBuildingsNotSetupYet.sqf b/Tools/SQF/getBuildingsNotSetupYet.sqf index 4b286732..8d18ced9 100644 --- a/Tools/SQF/getBuildingsNotSetupYet.sqf +++ b/Tools/SQF/getBuildingsNotSetupYet.sqf @@ -2,12 +2,10 @@ EP_notSetup = []; EP_setup = []; -_all = nearestObjects [player, ["building"], 20000]; +_all = nearestTerrainObjects [player, [], 40000, false]; { _typeOf = typeof _x; - - - if !(isClass(configfile >> "CfgBuildingLootPos" >> _typeOf)) then { + if !(isClass(getMissionConfig "CfgBuildingLootPos" >> _typeOf)) then { if !(_typeOf in EP_notSetup) then { EP_notSetup pushBack _typeOf; }; @@ -17,5 +15,4 @@ _all = nearestObjects [player, ["building"], 20000]; }; } - } foreach _all; \ No newline at end of file diff --git a/Tools/SQF/getCfgPatches.sqf b/Tools/SQF/getCfgPatches.sqf index ca60cd0f..53fcd5c2 100644 --- a/Tools/SQF/getCfgPatches.sqf +++ b/Tools/SQF/getCfgPatches.sqf @@ -1,4 +1,4 @@ -_knownCfgPatches = ["A3Data","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","Map_VR","A3_Map_VR_Scenes","Enhanced_Epoch_AiASupport","A3_epoch_assets_1","epoch_objects","A3_epoch_assets_3","Underground_Epoch","A3_epoch_vehicles","a3_epoch_weapons","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Data_F_Bootcamp","A3_Data_F_Kart_ParticleEffects","A3_Editor_F","A3_Functions_F_Bootcamp","A3_Functions_F_Curator","A3_Functions_F_Heli","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_Language_F_Heli","A3_Language_F_Kart","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_LanguageMissions_F_Kart","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi","A3_Music_F","A3_Music_F_Bootcamp","A3_Music_F_EPA","A3_Music_F_EPB","A3_Music_F_EPC","A3_Music_F_Heli","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_Bootcamp","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_UIFonts_F","a3_epoch_structures","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Anims_F_Kart","A3_Language_F_Bootcamp","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_Signs_Companies","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Kart_Signs_Companies","A3_UI_F","A3_UI_F_Curator","A3_UI_F_Kart","A3_Weapons_F","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_beta_Rifles_Khaybar","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","a2_epoch_weapons","A3_epoch_assets","A3_Anims_F_Heli","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_Bootcamp","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","A3_Data_F_Kart","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta","A3_Missions_F_Gamma","A3_Missions_F_Kart","A3_Modules_F_Bootcamp","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_UI_F_Bootcamp","A3_UI_F_Heli","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc","A3_Weapons_F_Kart","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Air_F_RTD","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02","A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Characters_F_Common","A3_Characters_F_Bootcamp_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC","A3_Characters_F_Kart","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Heli","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_Bootcamp","A3_Missions_F_Curator","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Missions_F_Heli","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Truck","A3_Soft_F_Kart_Kart_01","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Weapons_F_Bootcamp","A3_epoch_language","A3_epoch_vehicles_1","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_CargoPoses_F_Heli","A3_Soft_F_Crusher_UGV","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Heli_Crusher_UGV","A3_epoch_config","A3_epoch_code"]; +_knownCfgPatches = ["A3Data","A3_BaseConfig_F","A3_Dubbing_Radio_F","A3_Functions_F","A3_Functions_F_EPA","A3_Functions_F_EPC","Map_VR","A3_Map_VR_Scenes","a2_epoch_structures","A3_epoch_assets_1","epoch_objects","A3_epoch_assets_3","Underground_Epoch","A3_epoch_vehicles","a3_epoch_weapons","A3_Data_F","A3_Data_F_Hook","A3_Data_F_ParticleEffects","A3_Data_F_Bootcamp","A3_Data_F_Kart_ParticleEffects","A3_Editor_F","A3_Functions_F_Bootcamp","A3_Functions_F_Curator","A3_Functions_F_Heli","A3_Language_F","A3_Language_F_Beta","A3_Language_F_Curator","A3_Language_F_EPA","A3_Language_F_EPB","A3_Language_F_EPC","A3_Language_F_Gamma","A3_Language_F_Heli","A3_Language_F_Kart","A3_LanguageMissions_F","A3_LanguageMissions_F_Beta","A3_LanguageMissions_F_Gamma","A3_LanguageMissions_F_Kart","A3_Misc_F","A3_Misc_F_Helpers","A3_Modules_F","A3_Modules_F_DynO","A3_Modules_F_Effects","A3_Modules_F_Events","A3_Modules_F_GroupModifiers","A3_Modules_F_HC","A3_Modules_F_Intel","A3_Modules_F_LiveFeed","A3_Modules_F_Marta","A3_Modules_F_Misc","A3_Modules_F_Multiplayer","A3_Modules_F_ObjectModifiers","A3_Modules_F_Sites","A3_Modules_F_Skirmish","A3_Modules_F_StrategicMap","A3_Modules_F_Supports","A3_Modules_F_UAV","A3_Modules_F_Beta","A3_Modules_F_Beta_FiringDrills","A3_Modules_F_EPB","A3_Modules_F_EPB_Misc","A3_Modules_F_Heli","A3_Modules_F_Heli_SpawnAi","A3_Music_F","A3_Music_F_Bootcamp","A3_Music_F_EPA","A3_Music_F_EPB","A3_Music_F_EPC","A3_Music_F_Heli","A3_Roads_F","A3_Rocks_F","A3_Sounds_F","A3_Sounds_F_Bootcamp","A3_Sounds_F_EPB","A3_Sounds_F_EPC","A3_Structures_F","A3_Structures_F_Bridges","A3_Structures_F_Civ","A3_Structures_F_Civ_Accessories","A3_Structures_F_Civ_Ancient","A3_Structures_F_Civ_BellTowers","A3_Structures_F_Civ_Calvaries","A3_Structures_F_Civ_Camping","A3_Structures_F_Civ_Chapels","A3_Structures_F_Civ_Constructions","A3_Structures_F_Civ_Dead","A3_Structures_F_Civ_Garbage","A3_Structures_F_Civ_Graffiti","A3_Structures_F_Civ_InfoBoards","A3_Structures_F_Civ_Kiosks","A3_Structures_F_Civ_Lamps","A3_Structures_F_Civ_Market","A3_Structures_F_Civ_Offices","A3_Structures_F_Civ_Pavements","A3_Structures_F_Civ_PlayGround","A3_Structures_F_Civ_SportsGrounds","A3_Structures_F_Civ_Statues","A3_Structures_F_Civ_Tourism","A3_Structures_F_Dominants","A3_Structures_F_Dominants_Amphitheater","A3_Structures_F_Dominants_Castle","A3_Structures_F_Dominants_Church","A3_Structures_F_Dominants_Hospital","A3_Structures_F_Dominants_Lighthouse","A3_Structures_F_Dominants_WIP","A3_Structures_F_Furniture","A3_Structures_F_Households","A3_Structures_F_Households_Addons","A3_Structures_F_Households_House_Big01","A3_Structures_F_Households_House_Big02","A3_Structures_F_Households_House_Shop01","A3_Structures_F_Households_House_Shop02","A3_Structures_F_Households_House_Small01","A3_Structures_F_Households_House_Small02","A3_Structures_F_Households_House_Small03","A3_Structures_F_Households_Slum","A3_Structures_F_Households_Stone_Big","A3_Structures_F_Households_Stone_Shed","A3_Structures_F_Households_Stone_Small","A3_Structures_F_Households_WIP","A3_Structures_F_Ind","A3_Structures_F_Ind_AirPort","A3_Structures_F_Ind_Cargo","A3_Structures_F_Ind_CarService","A3_Structures_F_Ind_ConcreteMixingPlant","A3_Structures_F_Ind_Crane","A3_Structures_F_Ind_DieselPowerPlant","A3_Structures_F_Ind_Factory","A3_Structures_F_Ind_FuelStation","A3_Structures_F_Ind_FuelStation_Small","A3_Structures_F_Ind_Pipes","A3_Structures_F_Ind_PowerLines","A3_Structures_F_Ind_ReservoirTank","A3_Structures_F_Ind_Shed","A3_Structures_F_Ind_SolarPowerPlant","A3_Structures_F_Ind_Tank","A3_Structures_F_Ind_Transmitter_Tower","A3_Structures_F_Ind_WavePowerPlant","A3_Structures_F_Ind_Windmill","A3_Structures_F_Ind_WindPowerPlant","A3_Structures_F_Items","A3_Structures_F_Items_Documents","A3_Structures_F_Items_Electronics","A3_Structures_F_Items_Cans","A3_Structures_F_Items_Gadgets","A3_Structures_F_Items_Luggage","A3_Structures_F_Items_Medical","A3_Structures_F_Items_Military","A3_Structures_F_Items_Stationery","A3_Structures_F_Items_Tools","A3_Structures_F_Items_Valuables","A3_Structures_F_Items_Vessels","A3_Structures_F_Mil","A3_Structures_F_Mil_BagBunker","A3_Structures_F_Mil_BagFence","A3_Structures_F_Mil_Barracks","A3_Structures_F_Mil_Bunker","A3_Structures_F_Mil_Cargo","A3_Structures_F_Mil_Flags","A3_Structures_F_Mil_Fortification","A3_Structures_F_Mil_Helipads","A3_Structures_F_Mil_Offices","A3_Structures_F_Mil_Radar","A3_Structures_F_Mil_Shelters","A3_Structures_F_Mil_TentHangar","A3_Structures_F_Naval","A3_Structures_F_Naval_Buoys","A3_Structures_F_Naval_Fishing","A3_Structures_F_Naval_Piers","A3_Structures_F_Naval_RowBoats","A3_Structures_F_Research","A3_Structures_F_System","A3_Structures_F_Training","A3_Structures_F_Training_InvisibleTarget","A3_Structures_F_Walls","A3_Structures_F_Bootcamp_Ind_Cargo","A3_Structures_F_Bootcamp_Items_Sport","A3_Structures_F_Bootcamp_System","A3_Structures_F_Bootcamp_Training","A3_Structures_F_Bootcamp_VR_Blocks","A3_Structures_F_Bootcamp_VR_CoverObjects","A3_Structures_F_Bootcamp_VR_Helpers","A3_Structures_F_EPA_Civ_Camping","A3_Structures_F_EPA_Civ_Constructions","A3_Structures_F_EPA_Items_Electronics","A3_Structures_F_EPA_Items_Food","A3_Structures_F_EPA_Items_Medical","A3_Structures_F_EPA_Items_Tools","A3_Structures_F_EPA_Items_Vessels","A3_Structures_F_EPA_Walls","A3_Structures_F_EPB_Civ_Accessories","A3_Structures_F_EPB_Civ_Camping","A3_Structures_F_EPB_Civ_Dead","A3_Structures_F_EPB_Civ_Garbage","A3_Structures_F_EPB_Civ_Graffiti","A3_Structures_F_EPB_Civ_PlayGround","A3_Structures_F_EPB_Furniture","A3_Structures_F_EPB_Items_Documents","A3_Structures_F_EPB_Items_Luggage","A3_Structures_F_EPB_Items_Military","A3_Structures_F_EPB_Items_Vessels","A3_Structures_F_EPB_Naval_Fishing","A3_Structures_F_EPC_Civ_Accessories","A3_Structures_F_EPC_Civ_Camping","A3_Structures_F_EPC_Civ_Garbage","A3_Structures_F_EPC_Civ_InfoBoards","A3_Structures_F_EPC_Civ_Kiosks","A3_Structures_F_EPC_Civ_PlayGround","A3_Structures_F_EPC_Civ_Tourism","A3_Structures_F_EPC_Dominants_GhostHotel","A3_Structures_F_EPC_Dominants_Stadium","A3_Structures_F_EPC_Furniture","A3_Structures_F_EPC_Items_Documents","A3_Structures_F_EPC_Items_Electronics","A3_Structures_F_EPC_Walls","A3_Structures_F_Heli_Civ_Accessories","A3_Structures_F_Heli_Civ_Constructions","A3_Structures_F_Heli_Civ_Garbage","A3_Structures_F_Heli_Civ_Market","A3_Structures_F_Heli_Furniture","A3_Structures_F_Heli_Ind_AirPort","A3_Structures_F_Heli_Ind_Cargo","A3_Structures_F_Heli_Ind_Machines","A3_Structures_F_Heli_Items_Airport","A3_Structures_F_Heli_Items_Luggage","A3_Structures_F_Heli_Items_Sport","A3_Structures_F_Heli_Items_Tools","A3_Structures_F_Heli_VR_Helpers","A3_Structures_F_Kart_Civ_SportsGrounds","A3_Structures_F_Kart_Mil_Flags","A3_UIFonts_F","a3_epoch_structures","A3_Animals_F","A3_Animals_F_AnimConfig","A3_Animals_F_Fishes","A3_Animals_F_Kestrel","A3_Animals_F_Rabbit","A3_Animals_F_Seagull","A3_Animals_F_Snakes","A3_Animals_F_Turtle","A3_Animals_F_Chicken","A3_Animals_F_Dog","A3_Animals_F_Goat","A3_Animals_F_Sheep","A3_Anims_F","A3_Anims_F_Config_Sdr","A3_Anims_F_EPA","A3_Anims_F_EPC","A3_Anims_F_Kart","A3_Language_F_Bootcamp","A3_Map_Data","A3_Map_Stratis","A3_Map_Stratis_Scenes","A3_Plants_F_Bush","A3_Signs_F","A3_Signs_F_AD","A3_Structures_F_Signs_Companies","A3_Structures_F_Bootcamp_Civ_Camping","A3_Structures_F_Bootcamp_Civ_SportsGrounds","A3_Structures_F_Bootcamp_Items_Electronics","A3_Structures_F_Bootcamp_Items_Food","A3_Structures_F_Heli_Items_Electronics","A3_Structures_F_Heli_Items_Food","A3_Structures_F_Kart_Signs_Companies","A3_UI_F","A3_UI_F_Curator","A3_UI_F_Kart","A3_Weapons_F","A3_Weapons_F_NATO","A3_Weapons_F_CSAT","A3_Weapons_F_AAF","A3_weapons_F_FIA","A3_Weapons_F_ItemHolders","A3_Weapons_F_Headgear","A3_Weapons_F_Uniforms","A3_Weapons_F_Vests","A3_Weapons_F_Ammoboxes","A3_Weapons_F_DummyWeapons","A3_Weapons_F_Explosives","A3_Weapons_F_Items","A3_Weapons_F_Launchers_NLAW","A3_Weapons_F_Launchers_LAW","A3_Weapons_F_Launchers_Titan","A3_Weapons_F_EPA_LongRangeRifles_DMR_01","A3_Weapons_F_EBR","A3_Weapons_F_LongRangeRifles_GM6","A3_Weapons_F_LongRangeRifles_M320","A3_Weapons_F_Machineguns_M200","A3_Weapons_F_Machineguns_Zafir","A3_Weapons_F_Pistols_ACPC2","A3_Weapons_F_Pistols_P07","A3_Weapons_F_Pistols_Pistol_heavy_01","A3_Weapons_F_Pistols_Pistol_heavy_02","A3_Weapons_F_Pistols_Rook40","A3_Weapons_F_Rifles_Khaybar","A3_Weapons_F_Rifles_Mk20","A3_Weapons_F_Rifles_MX","A3_Weapons_F_EPB_Rifles_MX_Black","A3_Weapons_F_Rifles_SDAR","A3_Weapons_F_Rifles_TRG20","A3_Weapons_F_Pistols_PDW2000","A3_Weapons_F_Rifles_Vector","a3_weapons_f_rifles_SMG_02","A3_Weapons_F_beta","A3_Weapons_F_Beta_Ammoboxes","A3_Weapons_F_beta_EBR","A3_Weapons_F_EPA_LongRangeRifles_GM6","A3_Weapons_F_EPB_LongRangeRifles_M320","A3_Weapons_F_beta_Rifles_Khaybar","A3_Weapons_F_beta_Rifles_MX","A3_Weapons_F_beta_Rifles_TRG20","A3_Weapons_F_Bootcamp_LongRangeRifles_GM6","A3_Weapons_F_Bootcamp_LongRangeRifles_M320","A3_Weapons_F_EPB_LongRangeRifles_GM3","A3_Weapons_F_gamma","A3_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_EPA_EBR","A3_Weapons_F_EPA_Rifles_MX","A3_Weapons_F_Kart_Pistols_Pistol_Signal_F","a2_epoch_weapons","A3_epoch_assets","A3_Anims_F_Heli","A3_Characters_F","A3_Characters_F_BLUFOR","A3_Characters_F_Civil","A3_Characters_F_Heads","A3_Characters_F_OPFOR","A3_Characters_F_Proxies","A3_Characters_F_Beta","A3_Characters_F_INDEP","A3_Characters_F_Bootcamp","A3_Characters_F_EPB_Heads","A3_Characters_F_Gamma","A3_Data_F_Curator","A3_Data_F_Curator_Eagle","A3_Data_F_Curator_Intel","A3_Data_F_Curator_Misc","A3_Data_F_Curator_Respawn","A3_Data_F_Kart","A3_UAV_F_Characters_F_Gamma","A3_UAV_F_Weapons_F_Gamma_Ammoboxes","A3_Weapons_F_gamma_Items","A3_Map_Altis","A3_Map_Altis_Scenes","A3_Missions_F","A3_Missions_F_Beta","A3_Missions_F_Gamma","A3_Missions_F_Kart","A3_Modules_F_Bootcamp","A3_Modules_F_Curator","A3_Modules_F_Curator_Animals","A3_Modules_F_Curator_CAS","A3_Modules_F_Curator_Curator","A3_Modules_F_Curator_Effects","A3_Modules_F_Curator_Environment","A3_Modules_F_Curator_Flares","A3_Modules_F_Curator_Intel","A3_Modules_F_Curator_Lightning","A3_Modules_F_Curator_Mines","A3_Modules_F_Curator_Misc","A3_Modules_F_Curator_Multiplayer","A3_Modules_F_Curator_Objectives","A3_Modules_F_Curator_Ordnance","A3_Modules_F_Curator_Respawn","A3_Modules_F_Curator_Smokeshells","A3_Modules_F_Kart","A3_Modules_F_Kart_TimeTrials","A3_Static_F","A3_Static_F_Mortar_01","A3_Static_F_Beta_Mortar_01","A3_Static_F_Gamma","A3_Static_F_Gamma_Mortar_01","A3_Supplies_F_Heli","A3_Supplies_F_Heli_Bladders","A3_Supplies_F_Heli_CargoNets","A3_Supplies_F_Heli_Fuel","A3_Supplies_F_Heli_Slingload","A3_UI_F_Bootcamp","A3_UI_F_Heli","A3_Weapons_F_Acc","A3_Weapons_F_Beta_Acc","A3_Weapons_F_Bootcamp_Ammoboxes","A3_Weapons_F_EPA","A3_Weapons_F_EPA_Acc","A3_Weapons_F_EPA_Ammoboxes","A3_Weapons_F_EPB","A3_Weapons_F_EPB_Acc","A3_Weapons_F_EPB_Ammoboxes","A3_Weapons_F_EPC","A3_Weapons_F_gamma_Acc","A3_Weapons_F_Kart","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta","A3_Air_F_Beta_Heli_Attack_01","A3_Air_F_Beta_Heli_Attack_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_Beta_Parachute_01","A3_Air_F_Beta_Parachute_02","A3_Air_F_EPB_Heli_Light_03","A3_Air_F_EPC_Plane_CAS_01","A3_Air_F_EPC_Plane_CAS_02","A3_Air_F_Gamma_Plane_Fighter_03","A3_Air_F_Heli","A3_Air_F_Heli_Heli_Attack_01","A3_Air_F_Heli_Heli_Attack_02","A3_Air_F_Heli_Heli_Light_01","A3_Air_F_Heli_Heli_Light_02","A3_Air_F_Heli_Heli_Light_03","A3_Air_F_Heli_Heli_Transport_01","A3_Air_F_Heli_Heli_Transport_02","A3_Air_F_Heli_Heli_Transport_03","A3_Air_F_Heli_Heli_Transport_04","A3_Air_F_RTD","A3_Armor_F","A3_armor_f_beta","A3_Armor_F_Panther","A3_armor_f_beta_APC_Tracked_02","A3_Armor_F_EPB_APC_tracked_03","A3_Armor_F_EPB_MBT_03","A3_Armor_F_Slammer","A3_Armor_F_T100K","A3_Boat_F","A3_Boat_F_Boat_Armed_01","A3_Boat_F_Boat_Transport_01","A3_Boat_F_Beta_Boat_Armed_01","A3_Boat_F_Beta_Boat_Transport_01","A3_Boat_F_SDV_01","A3_Boat_F_EPC_Submarine_01_F","A3_Boat_F_Civilian_Boat","A3_Boat_F_Trawler","A3_Boat_F_Gamma_Boat_Transport_01","A3_Boat_F_Heli_Boat_Armed_01","A3_Boat_F_Heli_SDV_01","A3_Characters_F_Common","A3_Characters_F_Bootcamp_Common","A3_Characters_F_EPA","A3_Characters_F_EPB","A3_Characters_F_EPC","A3_Characters_F_Kart","A3_Data_F_Curator_Characters","A3_Data_F_Curator_Virtual","A3_Data_F_Heli","A3_Air_F_Gamma_UAV_01","A3_Air_F_Gamma_UAV_02","A3_Missions_F_Bootcamp","A3_Missions_F_Curator","A3_Missions_F_EPA","A3_Missions_F_EPB","A3_Missions_F_EPC","A3_Missions_F_Heli","A3_Modules_F_Bootcamp_Misc","A3_Modules_F_Curator_Chemlights","A3_Soft_F","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_Offroad_01","A3_Soft_F_Quadbike","A3_Soft_F_MRAP_03","A3_Soft_F_Beta_Quadbike","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_Gamma_Offroad","A3_Soft_F_Gamma_Quadbike","A3_Soft_F_SUV","A3_Soft_F_Gamma_HEMTT","A3_Soft_F_Gamma_TruckHeavy","A3_Soft_F_Truck","A3_Soft_F_Heli_Car","A3_Soft_F_Heli_MRAP_01","A3_Soft_F_Heli_MRAP_02","A3_Soft_F_Heli_MRAP_03","A3_Soft_F_Heli_Quadbike","A3_Soft_F_Heli_SUV","A3_Soft_F_Heli_Truck","A3_Soft_F_Kart_Kart_01","A3_Static_F_Gamma_AA","A3_Static_F_Gamma_AT","A3_Structures_F_Mil_Scrapyard","A3_Structures_F_Wrecks","A3_Structures_F_EPA_Mil_Scrapyard","A3_Weapons_F_Bootcamp","A3_epoch_language","A3_epoch_vehicles_1","A3_Air_F_EPC_Plane_Fighter_03","A3_Armor_F_AMV","A3_Armor_F_Marid","A3_Armor_F_EPC_MBT_01","A3_Armor_F_APC_Wheeled_03","A3_CargoPoses_F","A3_CargoPoses_F_Heli","A3_Soft_F_Crusher_UGV","A3_Soft_F_Bootcamp_Offroad_01","A3_Soft_F_Bootcamp_Quadbike","A3_Soft_F_Bootcamp_Truck","A3_Soft_F_Heli_Crusher_UGV","A3_epoch_config","A3_epoch_code"]; _unknownCfgPatches = []; "if !((configName _x) in _knownCfgPatches) then {_unknownCfgPatches pushBack (configName _x)}" configClasses (configFile >> "CfgPatches"); copyToClipboard str _unknownCfgPatches; diff --git a/Tools/SQF/getTreesAndTrash.sqf b/Tools/SQF/getTreesAndTrash.sqf index dd47ee45..8f70e8b0 100644 --- a/Tools/SQF/getTreesAndTrash.sqf +++ b/Tools/SQF/getTreesAndTrash.sqf @@ -11,32 +11,73 @@ space selects target delete remove target from data set ctrl+c fills clipboard with config data + EP_IMPORT = [["watertank_01_f_p3d","watertank_02_f_p3d","barrelwater_f_p3d","water_source_f_p3d","waterbarrel_f_p3d","canisterplastic_f_p3d","watertank_f_p3d","misc_well_p3d","misc_wellpump_p3d","kasna_new_p3d","rasman_pond_p3d","pumpa_p3d","misc_well_c_ep1_p3d","misc_well_l_ep1_p3d","stand_water_ep1_p3d","misc_concbox_ep1_p3d","Land_water_tank","Land_Pumpa","watertank_04_f_p3d","watertank_03_f_p3d"],["atm_01_f_p3d","phonebooth_01_f_p3d","atm_02_f_p3d","phonebooth_02_f_p3d","nastenka_p3d","nastenka2_p3d","nastenka3_p3d","phone_box_south_p3d","mailboxsouth_p3d","Land_PhoneBooth_02_F","Land_PhoneBooth_01_F","Land_Atm_01_F","Land_Atm_02_F","Land_Laptop_device_F"],["cliff_stone_big_lc_f_p3d","sharpstone_03_lc_p3d","sharpstone_02_lc_p3d","sharpstone_01_lc_p3d","sharpstone_02_p3d","sharpstone_03_p3d","sharprock_monolith_p3d","sharprock_apart_p3d","sharpstones_erosion_p3d","bluntstone_01_lc_p3d","bluntstone_02_lc_p3d","bluntstone_03_lc_p3d","bluntstones_erosion_p3d","bluntstone_01_p3d","bluntstone_03_p3d","sharprock_spike_p3d","sharprock_wallh_p3d","w_sharpstone_03_p3d","w_sharpstone_02_p3d","w_sharpstone_01_p3d","bluntrock_apart_p3d","bluntstone_02_p3d","bluntrock_monolith_p3d","bluntrock_wallh_p3d","sharprock_wallv_p3d","stonesharp_medium_p3d","stone_medium_f_p3d","stonesharp_big_p3d","stonesharp_small_p3d","small_stone_02_f_p3d","stone_small_f_p3d","stone_big_f_p3d","bluntrock_spike_p3d","r2_boulder1_p3d","r2_boulder2_p3d","r2_rock1_p3d","r2_rocktower_p3d","r2_rockwall_p3d","r_rock_02_ep1_p3d","brownrock2_p3d","brownrock3_p3d","desertrock_p3d","desertrock2_p3d","desertrock3_p3d","r_stone_01_ep1_p3d","brownrock_p3d","rockn_02_p3d","sharpstone_01_p3d","r_rock_03_ep1_p3d","rocks_02_p3d","skala3_5_p3d","skala3_4_p3d","skala1_4_p3d","bo_r2_boulder1_p3d","bo_r2_boulder2_p3d","bo_r2_rock1_p3d","bo_r2_rocktower_p3d","bo_r2_rockwall_p3d","w_sharpstones_erosion_p3d","decal_rock_dark_p3d","r_stone_01_pmc_p3d","r_stone_02_pmc_p3d","stone4_p3d","stone3_p3d","stone4_invert_p3d","rocks_01_p3d","stone4a_p3d","stone3a_p3d","rockn_01_p3d","r_tk_stone_01_ep1_p3d","r_tk_stone_02_ep1_p3d","r_tk_rock_03_ep1_p3d","r_tk_boulder_03_ep1_p3d","r_tk_rock_02_ep1_p3d","r_tk_boulder_01_ep1_p3d","r_tk_boulder_02_ep1_p3d","r_tk_rock_01_ep1_p3d","cliff_wall_long_f_p3d","cliff_stone_medium_lc_f_p3d","cliff_stone_small_lc_f_p3d","cliff_boulder_f_p3d","cliff_peak_f_p3d","cliff_wall_round_f_p3d","cliff_stonecluster_f_p3d","cliff_wall_tall_f_p3d","lavaboulder_03_f_p3d","lavastone_small_lc_f_p3d","lavaboulder_02_f_p3d","lavaboulder_01_f_p3d","lavastone_big_lc_f_p3d","lavastonecluster_large_f_p3d","lavaboulder_04_f_p3d","lavastonecluster_small_f_p3d","cliff_stone_medium_f_p3d"],["p_fiberplant_ep1_p3d"],["p_pumpkin_summer_p3d","pumpkin_p3d"],["woodencrate_01_stack_x3_f_p3d","garbageheap_03_f_p3d","garbageheap_04_f_p3d","garbageheap_02_f_p3d","garbagecontainer_closed_f_p3d","sack_f_p3d","garbagebags_f_p3d","pallets_f_p3d","junkpile_f_p3d","garbagepallet_f_p3d","garbagewashingmachine_f_p3d","basket_f_p3d","sacks_goods_f_p3d","crateswooden_f_p3d","cratesplastic_f_p3d","garbagebin_01_f_p3d","barrelsand_f_p3d","cratesshabby_f_p3d","bucket_f_p3d","garbagebarrel_01_f_p3d","tyres_f_p3d","cargobox_v1_f_p3d","metalbarrel_f_p3d","sacks_heap_f_p3d","woodenbox_f_p3d","grave_v1_f_p3d","grave_v2_f_p3d","calvary_02_v2_f_p3d","fishinggear_02_f_p3d","fishinggear_01_f_p3d","humanskull_f_p3d","calvary_02_v1_f_p3d","rack_f_p3d","wreck_uaz_f_p3d","humanskeleton_f_p3d","shelvesmetal_f_p3d","popelnice_p3d","garbage_misc_p3d","paletyc_p3d","junkpile_p3d","kontejner_p3d","misc_chickencoop_p3d","misc_boogieman_p3d","misc_hutch_p3d","garbage_paleta_p3d","misc_cargo1a_p3d","misc_cargo2a_p3d","misc_greenhouse_p3d","zastavka_stojan_p3d","podesta_s10_p3d","kontejner_sklo_p3d","paletyd_p3d","popelnice_2_p3d","garbage_plastic_p3d","garbage_metal_p3d","jeept_tanker_p3d","kontejner_plasty_p3d","odpadkovy_kos_p3d","socha_p3d","kontejner_papir_p3d","metalcrate_p3d","hrob2_p3d","barel5_p3d","barel4_p3d","tires_ep1_p3d","barel2_p3d","barels_p3d","barel1_p3d","barels2_p3d","barels3_p3d","bricks_v2_f_p3d","Land_GarbagePallet_F","Land_GarbageBags_F","garb_misc_pmc_p3d","garb_paleta_pmc_p3d","garb_heap_pmc_p3d","drevena_bedna_p3d","barel3_p3d","dum_olez_istan1_p3d","misc_rubble_ep1_p3d","bags_stack_ep1_p3d","crates_ep1_p3d","cages_ep1_p3d","crates_stack_ep1_p3d","transport_cart_ep1_p3d","stand_small_ep1_p3d","stand_meat_ep1_p3d","bags_ep1_p3d","misc_garb_heap_ep1_p3d","garbageheap_01_f_p3d","woodencrate_01_stack_x5_f_p3d","woodencrate_01_f_p3d","clothesline_01_short_f_p3d","boat_01_abandoned_red_f_p3d","grave_01_f_p3d","grave_03_f_p3d"],["garbagebin_02_f_p3d","misc_postbox_p3d"],["t_cocosnucifera3s_tall_f_p3d","t_leucaena_f_p3d","t_ficus_medium_f_p3d","t_cyathea_f_p3d","t_ficus_small_f_p3d","t_ficusb1s_f_p3d","t_oleae1s_f_p3d","t_ficusb2s_f_p3d","t_broussonetiap1s_f_p3d","t_pinuss2s_f_p3d","t_pinuss2s_b_f_p3d","t_pinuss1s_f_p3d","t_oleae2s_f_p3d","t_fraxinusav2s_f_p3d","t_pinusp3s_f_p3d","t_poplar2f_dead_f_p3d","t_populusn3s_f_p3d","t_phoenixc1s_f_p3d","t_populus3s_p3d","t_fagus2w_p3d","t_betula2s_p3d","t_fagus2s_p3d","t_fagus2f_p3d","t_sorbus2s_p3d","t_fraxinus2w_p3d","t_salix2s_p3d","t_malus1s_p3d","t_betula1f_p3d","t_pinusn2s_p3d","t_picea2s_p3d","t_larix3s_p3d","t_picea3f_p3d","t_picea1s_p3d","misc_fallentree2_p3d","misc_stub2_p3d","t_fraxinus2s_p3d","t_quercus2f_p3d","misc_trunk_water_p3d","misc_trunk_torzo_p3d","t_alnus2s_p3d","misc_fallentree1_p3d","t_betula2f_p3d","t_pinusn1s_p3d","t_pinuss2f_p3d","t_quercus3s_p3d","t_carpinus2s_p3d","misc_fallenspruce_p3d","t_stub_picea_p3d","misc_stub1_p3d","t_acer2s_p3d","t_betula2w_p3d","t_pyrus2s_p3d","t_pinuss3s_ep1_p3d","t_pinuse2s_ep1_p3d","t_populusf2s_ep1_p3d","str_topol_p3d","les_singlestrom_b_p3d","banana_3_p3d","jablon_p3d","str_pinie_p3d","t_ficusb2s_ep1_p3d","palm_01_p3d","vysilac_budova_p3d","palm_10_p3d","palm_03_p3d","palm_04_p3d","t_pistacial2s_ep1_p3d","panelak_p3d","str_kastan_p3d","a_hospital_p3d","i_barracks_v1_f_p3d","dum_istan3_hromada_p3d","dum_istan3_hromada2_p3d","dum_istan4_big_inverse_p3d","panelak2_p3d","podesta_1_mid_p3d","podesta_1_cornl_p3d","t_prunuss2s_ep1_p3d","dum_istan2_02_p3d","dum_istan4_inverse_p3d","podesta_1_stairs2_p3d","podesta_1_mid_cornl_p3d","hrusen2_p3d","zed_kamenna_p3d","str_dub_p3d","str_dub_jiny_p3d","smrk_siroky_p3d","smrk_maly_p3d","les_singlestrom_p3d","palm_02_p3d","brg_banana_3_p3d","banana_2_p3d","oliva_p3d","brg_umbrella_acacia02b_p3d","brg_umbrella_acacia01b_p3d","brg_umbrella_acacia04b_p3d","brg_umbrella_acacia03b_p3d","str_buk_p3d","les_dub_p3d","b_pinusm1s_ep1_p3d","krovi_long_p3d","str_lipa_p3d","str_javor_p3d","str_trnka_p3d","t_poplar2f_dead_pmc_p3d","t_quercusir2s_f_p3d","dd_bush01_p3d","t_fagus2f_summer_p3d","akat02s_p3d","t_amygdalusc2s_ep1_p3d","str_osika_p3d","palm_09_p3d","dd_borovice_p3d","dd_borovice02_p3d","str_topol2_p3d","brg_umbrella_acacia_shrub02_p3d","t_populusb2s_ep1_p3d","les_dub_jiny_p3d","les_buk_p3d","str_fikovnik_p3d","str_briza_rovna_p3d","str_jerabina_p3d","str_habr_p3d","les_fikovnik2_p3d","bo_t_populus3s_p3d","bo_t_fagus2w_p3d","bo_t_betula2s_p3d","bo_t_fagus2s_p3d","bo_t_fagus2f_p3d","bo_t_sorbus2s_p3d","bo_t_fraxinus2w_p3d","bo_t_salix2s_p3d","bo_t_malus1s_p3d","bo_t_betula1f_p3d","bo_t_pinusn2s_p3d","bo_t_picea2s_p3d","bo_t_larix3s_p3d","bo_t_picea3f_p3d","bo_t_picea1s_p3d","bo_misc_fallentree2_p3d","bo_misc_stub2_p3d","bo_t_fraxinus2s_p3d","bo_t_quercus2f_p3d","bo_misc_trunk_water_p3d","bo_misc_trunk_torzo_p3d","bo_t_alnus2s_p3d","bo_misc_fallentree1_p3d","bo_t_betula2f_p3d","bo_t_pinusn1s_p3d","bo_t_pinuss2f_p3d","bo_t_quercus3s_p3d","bo_t_carpinus2s_p3d","bo_t_stub_picea_p3d","bo_t_acer2s_p3d","bo_t_betula2w_p3d","bo_t_pyrus2s_p3d","bo_b_corylus_p3d","t_fagus2s_summer_p3d","t_betula2s_summer_p3d","cwr2_a2_t_sorbus2s_p3d","cwr2_a2_t_fagus2w_p3d","cwr2_a2_t_alnus2s_p3d","mb_t_ulmus_large_p3d","cwr_aleppopine_p3d","cwr2_a2_t_quercus3s_p3d","cwr2_a2_t_fraxinus2s_p3d","misc_torzotree_pmc_p3d","misc_brokenspruce_pmc_p3d","misc_stubleafs_pmc_p3d","str_fikovnik2_p3d","str_fikovnik_ker_p3d","str_briza_kriva_p3d","smrk_velky_p3d","str_briza_p3d","misc_trunk_torzo_ep1_p3d","t_juniperusc2s_ep1_p3d","misc_trunk_water_ep1_p3d","woodenplanks_01_f_p3d","t_cocosnucifera2s_small_f_p3d","t_millettia_f_p3d","t_inocarpus_f_p3d","t_cocosnucifera3s_bend_f_p3d","t_agathis_wide_f_p3d","timberpile_01_f_p3d","d_treestump_cut_small_f_p3d","d_treestump_natural_small_f_p3d","d_treestump_natural_large_f_p3d","t_albizia_f_p3d","t_agathis_tall_f_p3d","t_palaquium_f_p3d","t_ficus_big_f_p3d"],["b_colored_red_f_p3d","b_colored_yellow_f_p3d","b_cestrum_f_p3d","b_calochlaena_f_p3d","b_gardenia_f_p3d","b_gardenia_dec_01_f_p3d","b_gardenia_dec_02_f_p3d","b_leucaena_f_p3d","b_ficusc2d_f_p3d","b_ficusc1s_f_p3d","b_neriumo2d_f_p3d","b_arundod2s_f_p3d","b_arundod3s_f_p3d","b_ficusc2s_f_p3d","b_craet1_p3d","b_craet2_p3d","b_corylus_p3d","b_corylus2s_p3d","b_betulahumilis_p3d","b_sambucus_p3d","b_salix2s_p3d","b_canina2s_p3d","b_pmugo_p3d","b_prunus_p3d","krovi_bigest_p3d","krovi4_p3d","krovi_p3d","ker_s_bobulema_p3d","ker_pichlavej_p3d","pinus_mugo_lowpoly_p3d","b_amygdalusn1s_ep1_p3d","banana_4_p3d","banana_1_p3d","palm_08small_p3d","ker_deravej_p3d","brg_umbrella_acacia_shrub2_p3d","krovi2_p3d","brg_banana_4_p3d","bo_b_craet1_p3d","bo_b_craet2_p3d","bo_b_corylus2s_p3d","bo_b_betulahumilis_p3d","bo_b_sambucus_p3d","salix2s_p3d","bo_b_canina2s_p3d","bo_b_pmugo_p3d","bo_b_prunus_p3d","b_corylus2s_summer_p3d","b_craet1_summer_p3d","b_betula2w_summer_p3d","b_canina2s_summer_p3d","cwr2_a2_b_canina2s_p3d","cwr2_a2_b_craet1_p3d","str_krovisko_vysoke_p3d","cwr2_a2_b_prunus_p3d","b_neriumo2s_f_p3d","b_neriumo2s_white_f_p3d","cwr2_a2_b_sambucus_p3d","b_hip2s_pmc_p3d","b_elderberry2s_pmc_p3d","ker_buxus_p3d","str_liskac_p3d","dd_bush02_p3d","b_pistacial1s_ep1_p3d","t_pritchardia_f_p3d","b_pipermeth_f_p3d","t_banana_f_p3d","t_banana_slim_f_p3d","t_banana_wild_f_p3d"],["cinderblocks_f_p3d","cinderblocks_01_f_p3d"],["parkingmeter_01_f_p3d","wall_tin_4_2_p3d","mil_wiredfence_f_p3d","cages_f_p3d","wreck_car_f_p3d","pipes_small_f_p3d","pipe_fence_4m_f_p3d","spp_tower_f_p3d","wreck_ural_f_p3d","wreck_car3_f_p3d","ironpipes_f_p3d","pipes_large_f_p3d","coil_f_p3d","wreck_offroad_f_p3d","wreck_offroad2_f_p3d","crabcages_f_p3d","metalbarrel_empty_f_p3d","net_fenced_8m_f_p3d","net_fence_8m_f_p3d","wavepowerplantbroken_f_p3d","wreck_truck_dropside_f_p3d","wavepowerplant_f_p3d","wreck_traw_f_p3d","wreck_slammer_f_p3d","maroula_f_p3d","indfnc_9_f_p3d","indfnc_3_f_p3d","indfnc_3_d_f_p3d","wreck_car2_f_p3d","net_fence_4m_f_p3d","wreck_truck_f_p3d","wreck_hunter_f_p3d","wreck_slammer_hull_f_p3d","wall_fen1_5_pole_p3d","wall_fen1_5_2_p3d","wall_fen1_5_p3d","wall_indfnc_3_p3d","wall_indfnc_9_p3d","wall_indfnc_corner_p3d","misc_concrete_high_p3d","plot_vlnplech2_p3d","misc_g_pipes_p3d","wall_tincom_9_p3d","wall_tin_4_p3d","plot_vlnplech1_p3d","wall_tincom_9_2_p3d","wall_tincom_3_p3d","wall_tincom_pole_p3d","datsun01t_p3d","datsun02t_p3d","skodovka_wrecked_p3d","lada_wrecked_p3d","hiluxt_p3d","uaz_wrecked_p3d","ural_wrecked_p3d","rubble_metal_plates_04_p3d","rubble_metal_plates_02_p3d","rubble_metal_plates_01_p3d","wreck_brdm2_f_p3d","wreck_bmp2_f_p3d","wreck_heli_attack_01_f_p3d","bmp_break_p3d","wreck_t72_hull_f_p3d","wreck_t72_turret_f_p3d","wreck_hmmwv_f_p3d","kamaz_bort_p3d","wreck_van_f_p3d","kamaz_awtobas_p3d","maz_p3d","wreck_skodovka_f_p3d","wreck_cardismantled_f_p3d","kamaz_pozarka_p3d","zaporosez_p3d","kamaz_tent_p3d","budova5_p3d","pletivo_dira_p3d","pletivo_p3d","wall_indfnc_pole_p3d","wall_indfnc_3_d_p3d","t72_wrecked_p3d","t72_wrecked_turret_p3d","pipefence_01_m_d_f_p3d","pipefence_01_m_8m_f_p3d","pipefence_01_m_gate_v2_f_p3d","fuelstation_02_prices_f_p3d","tinwall_01_m_4m_v2_f_p3d","pipefence_01_m_pole_f_p3d","wiredfence_01_16m_f_p3d","wiredfence_01_8m_d_f_p3d","wiredfence_01_8m_f_p3d","netfence_01_m_8m_f_p3d","netfence_01_m_d_f_p3d","netfence_01_m_4m_f_p3d","tinwall_02_l_4m_f_p3d","scf_01_warehouse_f_p3d","tinwall_02_l_8m_f_p3d","bulldozer_01_wreck_f_p3d","excavator_01_wreck_f_p3d"]]; + +{ + _tempVars = missionNamespace getVariable [_x,[]]; + { + _tempVars pushBackUnique _x; + } forEach (EP_IMPORT select _forEachIndex); + missionNamespace setVariable [_x,_tempVars]; +} forEach EP_modes; + */ + + player allowDamage false; player enableFatigue false; +EPOCH_colorRange = { +private ["_ratio","_b","_r","_g"]; +params ["_minimum", "_maximum", "_value", "_alpha"]; +_ratio = 2 * (_value-_minimum) / (_maximum - _minimum); +_b = 0 max (255*(1 - _ratio)); +_r = 0 max (255*(_ratio - 1)); +_g = (255 - _b - _r); +_return = [_r, _g, _b] apply {linearConversion [0, 255, _x, 0, 1, true]}; +_return pushBack _alpha; +_return +}; + Epoch_selectedIndex = 0; -EP_modes = ["Rocks","ATM","Water","Trash","Trees","Bushes","Wrecks"]; +EP_modes = ["Water","bankTerminal","Rocks","HempFiber","PumpkinPatch","Trash","TrashSmall","Trees","Bushes","Cinder","Wrecks"]; EP_selectedMode = EP_modes select Epoch_selectedIndex; -EP_modeColors = [[0,0,0,1],[0,0.5,0.9,1],[0,0,1,1],[1,0,0,1],[0,1,0,1],[0.5,0.5,0,1],[1,0.5,0.5,1],[1,1,1,1]]; +EP_modeColors = []; +_value = 0; +{ + EP_modeColors pushBack ([0,100,_value,1] call EPOCH_colorRange); + _value = _value + (100/(count EP_modes)); +} forEach EP_modes; + EP_modesCount = (count EP_modes)-1; +EP_replaceChar = { + params ["_STRING","_needle","_replace"]; + _STRING splitString _needle joinString _replace +}; + EPOCH_dbg_saveMapConfig = { _br = toString [13,10]; - _config_str = "class " + worldName + " {" + _br; + _config_str = ""; _array = []; { - _config_str = _config_str + format[' %1[] = {%2',_x,_br]; - _printData = missionNamespace getVariable [_x,[]]; + _modeClass = _x; + _printData = missionNamespace getVariable [_modeClass,[]]; + _configWorldInteractions = ((getMissionConfig "CfgEpochClient") >> "CfgWorldInteractions"); + { + _printData pushBackUnique (configName _x); + } forEach ("configName(inheritsFrom _x) == _modeClass" configClasses (_configWorldInteractions)); + + missionNamespace setVariable [_modeClass,_printData]; + _countArray = (count _printData) - 1; { - _config_str = _config_str + format[' "%1"%2', _x, if (_forEachIndex isEqualTo _countArray) then {_br} else {("," + _br)}]; + _p3dName = [[_x,".","_"] call EP_replaceChar," ","_"] call EP_replaceChar; + _config_str = _config_str + format[' class %1 : %3 {}; %2', _p3dName, _br, _modeClass]; } forEach _printData; - _config_str = _config_str + " };" + _br; } forEach EP_modes; - _config_str = _config_str + "};" + _br; _config_str }; @@ -77,20 +118,17 @@ EPOCH_KeyDownCustom = { case 0xD3: { _handled = true; - - _currentPos = screenToWorld [0.5,0.5]; - - if !(surfaceIsWater _currentPos) then { - _currentPos = ATLtoASL _currentPos; - }; - EP_objects = lineIntersectsObjs[eyePos player, _currentPos, player, objNull, true, 2]; - + EP_objects = []; + _intersect_objects = lineIntersectsSurfaces [AGLToASL positionCameraToWorld [0,0,0], AGLToASL positionCameraToWorld [0,0,1000], player, objNull, true, 1]; + {EP_objects pushback (_x select 2); if(true) exitWith{};} forEach _intersect_objects; + { if (typeOf _x == "") then { _objStr = str _x; _findStart = _objStr find ": "; if (_findStart != -1) then { _p3dName = _objStr select [_findStart+2,999]; + _p3dName = [[_p3dName,".","_"] call EP_replaceChar," ","_"] call EP_replaceChar; EPOCH_ALL = EPOCH_ALL - [_p3dName]; { _varDataDel = missionNamespace getVariable [_x,[]]; @@ -107,13 +145,10 @@ EPOCH_KeyDownCustom = { case 0x39 : { _handled = true; - - _currentPos = screenToWorld [0.5,0.5]; - - if !(surfaceIsWater _currentPos) then { - _currentPos = ATLtoASL _currentPos; - }; - EP_objects = lineIntersectsObjs[eyePos player, _currentPos, player, objNull, true, 2]; + + EP_objects = []; + _intersect_objects = lineIntersectsSurfaces [AGLToASL positionCameraToWorld [0,0,0], AGLToASL positionCameraToWorld [0,0,1000], player, objNull, true, 1]; + {EP_objects pushback (_x select 2); if(true) exitWith{};} forEach _intersect_objects; _varData = missionNamespace getVariable [EP_selectedMode, []]; _allData = missionNamespace getVariable ["EPOCH_ALL", []]; @@ -122,10 +157,12 @@ EPOCH_KeyDownCustom = { _findStart = _objStr find ": "; if (_findStart != -1) then { _p3dName = _objStr select [_findStart+2,999]; + _p3dName = [[_p3dName,".","_"] call EP_replaceChar," ","_"] call EP_replaceChar; if !(_p3dName in _allData) then { if !(_p3dName in _varData) then { _allData pushBack _p3dName; _varData pushBack _p3dName; + deleteMarker _p3dName; }; }; @@ -155,7 +192,8 @@ onEachFrame { _objStr = str _x; _findStart = _objStr find ": "; if (_findStart != -1) then { - _p3dName = _objStr select [_findStart+2,999]; + _p3dName = _objStr select [_findStart+2,999]; + _p3dName = [[_p3dName,".","_"] call EP_replaceChar," ","_"] call EP_replaceChar; _color = [1,1,1,1]; { if (_p3dName in (missionNamespace getVariable [_x,[]])) exitWith { @@ -167,9 +205,5 @@ onEachFrame { }; } forEach _all; _lineColor = EP_modeColors select Epoch_selectedIndex; - drawLine3D [ASLtoATL eyePos player, screenToWorld [0.5,0.5], _lineColor]; + drawLine3D [positionCameraToWorld [0,0,0], positionCameraToWorld [0,0,1000], _lineColor]; }; - - - - diff --git a/Tools/SQF/saveLootPositionsVector.sqf b/Tools/SQF/saveLootPositionsVector.sqf index ac4a79f3..c6482e46 100644 --- a/Tools/SQF/saveLootPositionsVector.sqf +++ b/Tools/SQF/saveLootPositionsVector.sqf @@ -24,17 +24,56 @@ Up/Down Arrow = Raise /lower loot placement (Alt = Slow, Ctrl = Fast) Right/Left Arrow = Rotate placement (Alt = Slow, Ctrl = Fast) L = Load loot objects from mission config, if not found defaults from config are loaded. Ctrl+L = Load all existing configured buildings into EPB array. +Ctrl+X = remove loot objects Q or Z = Move object in or out. R = Loot / UnLoot Object. */ -EPB = ["Land_Ind_SawMillPen","Land_seno_balik","Land_Shed_W03","Land_Ind_TankSmall","Land_Nasypka","Land_Shed_W4","Land_HouseV_1T","Land_HouseV_3I4","Land_Wall_Gate_Village","Land_Ind_TankSmall2","Land_HouseV_2I","Land_HouseV2_03","Land_Dum_olezlina","Land_Gate_wood2_5","Land_SignB_Pub_CZ2","Land_Ind_Expedice_2","Land_IndPipe2_bigBuild2_L","Land_Gate_Wood1_5","Land_IndPipe2_big_18ladder","Land_Ind_Expedice_3","Land_IndPipe2_big_18","Land_houseV_2T1","Land_IndPipe2_bigBuild1_R","Land_Misc_Cargo1Bo","Land_Ind_MalyKomin","Land_IndPipe2_big_ground1","Land_Lampa_ind","Land_Misc_Cargo1Ao","Land_Misc_GContainer_Big","Land_sloup_vn_drat","Land_sloup_vn","Land_Misc_Cargo1F","Land_IndPipe2_big_9","Land_Misc_Cargo1B","Land_HouseV_3I1","Land_Fuel_tank_big","Land_Ind_Stack_Big","Land_Dum_mesto3","Land_Sara_domek_vilka","Land_ladder","Land_Misc_Cargo1C","Land_MBG_Killhouse_4","Land_MBG_Warehouse","Land_Farm_WTower","Land_Nav_Boathouse_PierL","Land_Nav_Boathouse","Land_Trafostanica_velka_draty","Land_Kontejner","Land_aif_tovarna1","Land_Fuel_tank_stairs","Land_Trafostanica_velka","Land_Ind_Workshop01_02","Land_Wall_Gate_Ind1_R","Land_Dum_mesto2l","Land_Lampa_sidl","Land_MBG_Cinderwall_5","Land_MBG_Cinderwall_5_Corner","Land_HouseV2_03B","Land_Ind_Timbers","land_nav_pier_m_end","Land_CncBlock","Land_Ind_SawMill","land_nav_pier_m_1","Land_MBG_Killhouse_3","Land_fuel_tank_small","Land_MBG_Killhouse_2","Land_Nav_Boathouse_PierT","Land_A_Castle_Bastion","Land_Plot_green_branka","Land_Wall_Gate_Ind2A_R","Land_A_Castle_Wall2_30","Land_water_tank","land_nav_pier_m","Land_Ind_Shed_02_end","Land_Ind_Shed_02_main","Land_aif_zluty_statek_in","Land_A_Castle_Wall1_20","land_mbg_brickhouse_01","Land_A_Castle_Wall1_Corner","Land_A_Castle_Wall1_End_2","Land_A_Castle_Wall1_End","Land_aif_hotel","Land_A_Castle_Wall2_End_2","Land_A_Castle_Wall2_End","Land_Shed_M03","Land_Cihlovej_Dum_in","Land_HouseV_3I3","Land_MBG_Killhouse_1","Land_HouseV_3I2","Land_Misc_Scaffolding","Land_SignB_Pub_CZ3","Land_Sara_domek_ruina","Land_HouseBlock_C4","Land_HouseBlock_C5","Land_HouseBlock_B5","Land_House_C_4_EP1","Land_HouseBlock_B3","Land_HouseBlock_B2","Land_HouseBlock_B6","Land_HouseV2_01B","Land_HouseBlock_C1","Land_HouseBlock_B1","Land_HouseBlock_A1","Land_HouseBlock_D1","Land_MBG_GER_HUS_4","Land_Brana02nodoor","Land_HouseBlock_C3","Land_SignB_Hotel_CZ","Land_HouseBlock_A2","Land_SignB_Hotel_CZ3","Land_HouseBlock_D2","Land_SignB_Pharmacy","Land_House_C_10_EP1","Land_kolotoc","Land_HouseBlock_C2","Land_MBG_Cinderwall_5_SteelDoor","Land_Company3_2","Land_Wall_Gate_Ind2B_L","land_mbg_apartments_big_04","Land_Misc_Coltan_Heap_EP1","Land_MBG_Cinderwall_5_Gate","Land_Wall_Gate_Ind2A_L","Land_Misc_WaterStation","Land_Misc_Cargo1E","Land_zavora_2","Land_A_FuelStation_Feed","Land_A_FuelStation_Shed","Land_MBG_GER_RHUS_5","Land_Ind_Mlyn_D1","Land_Nav_Boathouse_PierR","Land_Lampa_ind_zebr","Land_HouseV2_05","Land_Wall_Gate_Wood1","land_mbg_apartments_big_01","Land_BoatSmall_1","Land_Dum_zboreny_total","Land_MBG_Cinderwall_5_WoodDoor","Land_Kostel","Land_A_Villa_EP1","Land_PowLine_wire_A_right_EP1","Land_Plot_green_vrata","Land_PowLine_wire_AB_EP1","Land_PowLine_wire_BB_EP1","Land_PowLine_wire_A_left_EP1","Land_Budova4_in","Land_IndPipe2_bigL_L","Land_Ind_Pec_03","Land_IndPipe2_bigL_R","Land_Misc_Cargo2E","Land_Ind_Coltan_Main_EP1","Land_Ind_Shed_01_end","Land_Ind_Shed_01_main","Land_Ind_Coltan_Hopper_EP1","Land_Trafostanica_mala","Land_MBG_GER_ESTATE_2","Land_sloup_vn_dratZ","Land_BoatSmall_2a","Land_BoatSmall_2b","Land_Dam_Barrier_40","Land_A_TVTower_Top","Land_A_TVTower_Mid","Land_MBG_GER_PUB_2","land_nav_pier_c_90","Land_Ind_Workshop01_03","land_nav_pier_c_t15","Land_Misc_CargoMarket1a_EP1","Land_Wall_Gate_Ind1_L","Land_Gate_IndVar2_5","Land_MBG_Shoothouse_1","Land_Leseni2x","Land_Komin","land_nav_pier_C_L30","land_nav_pier_c2","land_nav_pier_c","Land_Misc_Cargo1D","land_nav_pier_c2_end","Land_A_Crane_02b","Land_A_Crane_02a","Land_Dum_m2","Land_Misc_Cargo2C","land_nav_pier_C_R30","Land_Misc_Cargo2D","Land_Misc_Cargo1G","Land_Misc_Cargo2B","Land_HouseBlock_A1_2","Land_Ind_SiloVelke_02","Land_Ind_SiloVelke_most","Land_NAV_Lighthouse","Land_Shed_M01","Land_KBud","land_nav_pier_F_23","Land_Pumpa","Land_Shed_W02","Land_Church_05R","Land_ruin_01_PMC","Land_HouseBlock_A2_1","Land_Domek_rosa","Land_Bouda1","land_mbg_brickhouse_03","Land_Bouda_plech","Land_MBG_GER_RHUS_2","Land_MBG_GER_RHUS_1","Land_MBG_Garage_Single_B","Land_Terrace_K_1_EP1","Land_Stoplight02","Land_A_Castle_WallS_10","Land_A_Castle_WallS_5_D","land_nav_pier_c_270","Land_SignB_Hotel_CZ2","Land_A_Castle_Wall1_20_Turn","Land_HouseV_1I2","Land_aif_watertower1","Land_MBG_Cinderwall_2p5","Land_Statek_hl_bud","Land_Plot_rust_branka","Land_Wall_Gate_Kolchoz","Land_mbg_cinderwall_5_low","Land_Ind_BoardsPack1","Land_Bouda3","Land_A_statue01","Land_Sara_domek_kovarna","Land_Deutshe","Land_Lampa_sidl_2","Land_Wall_CGry_5_D","Land_Ind_BoardsPack2","Land_houpacka","Land_Mil_Barracks_L","Land_aif_strazni_vez","Land_NavigLight","Land_runway_edgelight","Land_Dirthump03_EP1","Land_Dirthump02_EP1","Land_Church_tomb_3","Land_Church_tomb_2","Land_Dirthump01_EP1","Land_Wall_Gate_Ind2B_R","Land_Kostel3","Land_IndPipe1_stair","land_nav_pier_C_L","land_nav_pier_C_R","Land_MBG_ATC_Tower","Land_MBG_ATC_Segment","Land_MBG_ATC_Base","land_nav_pier_C_R10","Land_aif_hlaska","Land_aif_kasarna_rohova","Land_aif_kasarna_prujezd","Land_aif_kasarna","Land_Mil_Barracks","Land_aif_heavyf","land_nav_pier_C_L10","Land_aif_hotel_bio","Land_Plot_Ohrada_Pruchozi","Land_A_Castle_WallS_End","Land_HouseV2_04_interier_dam","Land_Zed_dira_civil","Land_Wall_Gate_Ind2Rail_R","Land_Wall_Gate_Ind2Rail_L","Land_HouseV_2L_dam","Land_Fort_Watchtower","Land_Dam_Conc_20","Land_HouseV2_03B_dam","Land_Lampa_sidl_3","Land_HouseV2_01B_dam","Land_HouseV2_01A_dam","Land_HouseV2_03_dam","Land_Ind_Pec_02","Land_Dam_ConcP_20","Land_Kostel_trosky","Land_HouseV_1I3","Land_Wall_CBrk_5_D"]; + +BIS_fnc_returnVector = { + private ["_v","_d","_x","_y"]; + _v = +(_this select 0); + _d = _this select 1; + _x = _v select 0; + _y = _v select 1; + _v set [0, (cos _d)*_x - (sin _d)*_y]; + _v set [1, (sin _d)*_x + (cos _d)*_y]; + _v +}; + +_import = ["Land_Slum_01_F","Land_Shed_03_F","Land_Slum_02_F","Land_House_Native_02_F","Land_House_Small_03_F","Land_House_Native_01_F","Land_Shed_05_F","Land_Shed_04_F","Land_Addon_05_F","Land_Shed_06_F","Land_House_Small_04_F","Land_House_Small_01_F","Land_Shop_Town_04_F","Land_Shop_Town_01_F","Land_House_Small_05_F","Land_Slum_05_F","Land_WaterTower_01_F","Land_Shed_02_F","Land_House_Small_06_F","Land_Shop_Town_02_F","Land_House_Small_02_F","Land_Shed_01_F","Land_Shop_Town_03_F","Land_Addon_03_F","Land_MetalShelter_01_F","Land_MetalShelter_02_F","Land_Slum_03_F","Land_Supermarket_01_F","Land_Shop_City_04_F","Land_Addon_02_F","Land_Addon_04_F","Land_House_Big_05_F","Land_Shop_City_07_F","Land_Addon_01_F","Land_House_Big_03_F","Land_House_Big_01_F","Land_Hotel_02_F","Land_Slum_04_F","Land_GarageShelter_01_F","Land_WoodenShelter_01_F","Land_PierWooden_02_hut_F","Land_Church_03_F","Land_Shed_07_F","Land_School_01_F","Land_Temple_Native_01_F","Land_Shop_City_06_F","Land_Shop_Town_05_F","Land_Shop_City_03_F","Land_Church_01_F","Land_Warehouse_03_F","Land_FireEscape_01_short_F","Land_House_Big_04_F","Land_Shop_City_02_F","Land_Shop_City_01_F","Land_Hotel_01_F","Land_WindmillPump_01_F","Land_Shop_Town_05_addon_F","Land_FuelStation_01_shop_F","Land_FuelStation_01_workshop_F","Land_FuelStation_01_pump_F","Land_FuelStation_02_workshop_F","Land_Mausoleum_01_F","Land_Barracks_01_grey_F","Land_Church_02_F","Land_SCF_01_warehouse_F","Land_Shed_Small_F","Land_GuardHouse_01_F","Land_Airport_01_controlTower_F","Land_Airport_01_terminal_F","Land_FuelStation_02_pump_F","Land_dp_smallTank_F","Land_Barracks_01_camo_F","Land_spp_Transformer_F","Land_TBox_F","Land_FuelStation_02_roof_F","Land_House_Big_02_F","Land_PierWooden_01_dock_F","Land_PierWooden_01_hut_F","Land_SCF_01_storageBin_medium_F","Land_ContainerLine_01_F","Land_DPP_01_waterCooler_F","Land_DPP_01_smallFactory_F","Land_GantryCrane_01_F","Land_ContainerLine_03_F","Land_StorageTank_01_small_F","Land_MobileCrane_01_F","Land_SCF_01_shed_F","Land_ContainerLine_02_F","Land_FireEscape_01_tall_F","Land_MobileCrane_01_hook_F","Land_Shop_City_05_F","Land_MultistoryBuilding_01_F","Land_MultistoryBuilding_03_F","Land_MultistoryBuilding_04_F","Land_Cathedral_01_F","Land_Airport_01_hangar_F","Land_Airport_02_controlTower_F","Land_Airport_02_terminal_F","Land_Airport_02_hangar_right_F","Land_Airport_02_hangar_left_F","Land_BasaltWall_01_gate_F","Land_DPP_01_mainFactory_F","Land_CombineHarvester_01_wreck_F","Land_SCF_01_heap_bagasse_F","Land_SCF_01_generalBuilding_F","Land_SCF_01_washer_F","Land_SCF_01_shredder_F","Land_SCF_01_clarifier_F","Land_SCF_01_feeder_F","Land_SCF_01_chimney_F","Land_SCF_01_boilerBuilding_F","Land_SCF_01_crystallizer_F","Land_SCF_01_crystallizerTowers_F","Land_Radar_Small_F","Land_MiningShovel_01_abandoned_F","Land_SM_01_reservoirTower_F","Land_HaulTruck_01_abandoned_F","Land_Warehouse_01_F","Land_Warehouse_02_F","Land_SM_01_shelter_narrow_F","Land_SM_01_shelter_wide_F","Land_SM_01_shed_unfinished_F","Land_WarehouseShelter_01_F","Land_SY_01_reclaimer_F","Land_SY_01_stockpile_01_F","Land_SY_01_stockpile_02_F","Land_ContainerCrane_01_F","Land_SM_01_shed_F"]; + +EPB = []; +{ + if !(_x in EPB) then { + EPB pushBack _x; + }; +} forEach _import; + EPBCount = count EPB; player allowDamage false; player enableFatigue false; EP_distance = 2; EPOCH_vehTarget = objNull; + +Bed_EPOCH = [[[0,0,0.6],[0,0,-0.1]],[[0,0,0.6],[0,0,0.9]],[[0,0,0.5],[1.1,0,0.5]],[[0,0,0.5],[-0.7,0,0.5]],[[0,0,0.5],[0,1.4,0.5]],[[0,0,0.5],[0,-1.4,0.5]]]; +Fridge_EPOCH = [[[0,0,1.1],[0,0,-0.1]],[[0,0,1.1],[0,0,2.1]],[[0,0,1.1],[0.5,0,1.1]],[[0,0,1.1],[-0.5,0,1.1]],[[0,0,1.1],[0,0.4,1.1]],[[0,0,1.1],[0,-0.9,1.1]]]; +Shelf_EPOCH = [[[0,0,1],[0,0,-0.1]],[[0,0,1],[0,0,1.8]],[[0,0,1],[0.5,0,1]],[[0,0,1],[-0.5,0,1]],[[0,0,1],[0,0.2,1]],[[0,0,1],[0,-0.6,1]]]; +Couch_EPOCH = [[[0,0,0.4],[0,0,-0.1]],[[0,0,0.4],[0,0,1.2]],[[0,0,0.4],[1.3,0,0.4]],[[0,0,0.4],[-0.3,0,0.4]],[[0,0,0.4],[0,1.4,0.4]],[[0,0,0.4],[0,-1.4,0.4]]]; +wardrobe_epoch = [[[0,0,1.3],[0,0,-0.1]],[[0,0,1.3],[0,0,2.3]],[[0,0,1.3],[0.7,0,1.3]],[[0,0,1.3],[-0.7,0,1.3]],[[0,0,1.3],[0,0.4,1.3]],[[0,0,1.3],[0,-0.6,1.3]]]; +cooker_epoch = [[[0,0,0],[0,0,-0.1]],[[0,0,0],[0,0,0.7]],[[0,0,0],[0.4,0,0]],[[0,0,0],[-0.4,0,0]],[[0,0,0],[0,0.5,0]],[[0,0,0],[0,-0.7,0]]]; +Chair_EPOCH = [[[0,0,0.5],[0,0,-0.1]],[[0,0,0.5],[0,0,1.5]],[[0,0,0.6],[0.6,0,0.6]],[[0,0,0.6],[-0.6,0,0.6]],[[0,0,0.6],[0,0.6,0.6]],[[0,0,0.5],[0,-0.6,0.5]]]; +Filing_epoch = [[[0,0,0.8],[0,0,-0.1]],[[0,0,0.8],[0,0,1.6]],[[0,0,0.8],[0.3,0,0.8]],[[0,0,0.8],[-0.3,0,0.8]],[[0,0,0.8],[0,0.4,0.8]],[[0,0,0.8],[0,-0.5,0.8]]]; +Pelican_EPOCH = [[[0,0,0.2],[0,0,-0.1]],[[0,0,0.2],[0,0,0.7]],[[0,0,0.2],[0.9,0,0.2]],[[0,0,0.2],[-0.9,0,0.2]],[[0,0,0.2],[0,0.6,0.2]],[[0,0,0.2],[0,-0.4,0.2]]]; +Table_EPOCH = [[[0,0,0.5],[0,0,-0.1]],[[0,0,0.5],[0,0,0.8]],[[0,0,0.5],[1.1,0,0.5]],[[0,0,0.5],[-1,0,0.5]],[[0,0,0.5],[0,0.5,0.5]],[[0,0,0.5],[0,-0.7,0.5]]]; +Locker_EPOCH = [[[0,0,1.1],[0,0,-0.1]],[[0,0,1.1],[0,0,2.1]],[[0,0,1.1],[1,0,1.1]],[[0,0,1.1],[-0.9,0,1.1]],[[0,0,1.1],[0,0.4,1.1]],[[0,0,1.1],[0,-0.5,1.1]]]; +ToolRack_EPOCH = [[[0,0,1.5],[0,0,-0.1]],[[0,0,1.5],[0,0,2.3]],[[0,0,1.5],[1,0,1.5]],[[0,0,1.5],[-0.9,0,1.5]],[[0,0,1.5],[0,0.05,1.5]],[[0,0,1.5],[0,-0.4,1.5]]]; +Shoebox_EPOCH = [[[0,0,0.1],[0,0,-0.1]],[[0,0,0.1],[0,0,0.3]],[[0,0,0.1],[0.3,0,0.1]],[[0,0,0.1],[-0.3,0,0.1]],[[0,0,0.1],[0,0.2,0.1]],[[0,0,0.1],[0,-0.2,0.1]]]; +Tarp_EPOCH = [[[0,0,0.2],[0,0,-0.1]],[[0,0,0.2],[0,0,1]],[[0,0,0.2],[0.9,0,0.2]],[[0,0,0.2],[-0.9,0,0.2]],[[0,0,0.2],[0,1,0.2]],[[0,0,0.2],[0,-0.9,0.2]]]; +Freezer_EPOCH = [[[0,0,0.5],[0,0,-0.1]],[[0,0,0.5],[0,0,1.1]],[[0,0,0.5],[0.7,0,0.5]],[[0,0,0.5],[-0.7,0,0.5]],[[0,0,0.5],[0,0.5,0.5]],[[0,0,0.5],[0,-0.6,0.5]]]; +Cabinet_EPOCH = [[[0,0,0],[0,0,-0.4]],[[0,0,0],[0,0,0.4]],[[0,0,0],[0.2,0,0]],[[0,0,0],[-0.1,0,0]],[[0,0,0],[0,0.3,0]],[[0,0,0],[0,-0.3,0]]]; + EPOCH_lootClassesRaw = [ ["shelfPos", "Shelf_EPOCH", true], ["fridgePos", "Fridge_EPOCH", true], @@ -51,7 +90,7 @@ EPOCH_lootClassesRaw = [ ["shoeboxPos", "Shoebox_EPOCH", false], ["palletPos", "Tarp_EPOCH", false], ["freezerPos", "Freezer_EPOCH", false], - ["cabinetPos", "Cabinet_EPOCH", false] + ["cabinetPos", "Cabinet_EPOCH", false] ]; EPOCH_lootSIMClassesRaw = [ ["shelfPos", "Shelf_SIM_EPOCH", true], @@ -69,7 +108,7 @@ EPOCH_lootSIMClassesRaw = [ ["shoeboxPos", "Shoebox_SIM_EPOCH", false], ["palletPos", "Tarp_SIM_EPOCH", false], ["freezerPos", "Freezer_SIM_EPOCH", false], - ["cabinetPos", "Cabinet_EPOCH", false] + ["cabinetPos", "Cabinet_EPOCH", false] ]; EPOCH_lootClassesCustom = []; @@ -84,6 +123,18 @@ EPOCH_lootClassesCustom2 = []; } forEach EPOCH_lootSIMClassesRaw; EPOCH_lootClasses2Count = count EPOCH_lootClassesCustom2 - 1; +EPOCH_KeyUpCustom = { + _dikCode = _this select 1; + _shift = _this select 2; + _ctrl = _this select 3; + _alt = _this select 4; + _handled = false; + + + + _handled +}; + EPOCH_KeyDownCustom = { _dikCode = _this select 1; _shift = _this select 2; @@ -128,10 +179,20 @@ EPOCH_KeyDownCustom = { } }; + case 0x2D: { + + if (_ctrl) then { + hint "removed loot objects"; + { + {deleteVehicle _x} forEach allMissionObjects _x; + } forEach EPOCH_lootClassesCustom; + } + }; + case 0xD3: { - if !(isNull(cursorTarget)) then { - deleteVehicle cursorTarget; + if !(isNull(cursorObject)) then { + deleteVehicle cursorObject; hint "Deleted Object"; }; }; @@ -142,8 +203,8 @@ EPOCH_KeyDownCustom = { }; case 0x1C: { - if !(isNull(cursorTarget)) then { - EP_building = cursorTarget; + if !(isNull(cursorObject)) then { + EP_building = cursorObject; hint format["Target Changed: %1", typeOf EP_building]; }; }; @@ -152,15 +213,16 @@ EPOCH_KeyDownCustom = { hint "tilde"; - if (isnil "EPOCH_vehTarget") then { + if (isNull EPOCH_vehTarget) then { EPOCH_vehTarget = createVehicle [_selectedClass, _worldPos, [], 0, "CAN_COLLIDE"]; + EPOCH_vehTarget disableCollisionWith player; + EPOCH_vehTarget setDir Base_angle; EPOCH_vehTarget setPosATL _worldPos; hint str(EPOCH_vehTarget); } else { deleteVehicle EPOCH_vehTarget; - EPOCH_vehTarget = nil; hint "deleted"; }; _handled = true; @@ -221,7 +283,12 @@ EPOCH_KeyDownCustom = { if (_ctrl) then { _num = _num * 10; }; - Base_Z_height = Base_Z_height + _num; + if (_shift) then { + _playerZ = getposATL player select 2; + Base_Z_height = _playerZ; + } else { + Base_Z_height = Base_Z_height + _num; + }; _zheightChanged = true; _handled = true; }; @@ -304,12 +371,11 @@ EPOCH_KeyDownCustom = { case 0x39 : { hint "space"; _handled = true; - if (isnil "EPOCH_vehTarget") then { + if (isNull EPOCH_vehTarget) then { + if (!isnull(cursorObject)) then { + if (cursorObject isKindOf "WH_Loot" or cursorObject isKindOf "Constructions_modular_F" or cursorObject isKindOf "Animated_Loot") then { - if (!isnull(cursorTarget)) then { - if (cursorTarget isKindOf "WH_Loot" or cursorTarget isKindOf "Constructions_modular_F" or cursorTarget isKindOf "Animated_Loot") then { - - EPOCH_vehTarget = cursorTarget; + EPOCH_vehTarget = cursorObject; _selectedClass = typeOF EPOCH_vehTarget; _index1 = EPOCH_lootClassesCustom find _selectedClass; @@ -325,82 +391,72 @@ EPOCH_KeyDownCustom = { Base_Z_height = (getposATL EPOCH_vehTarget) select 2; }; }; - } else { + EPOCH_vehTarget = objNull; + }; + }; - if (!isnull(EPOCH_vehTarget)) then { - detach EPOCH_vehTarget; - EPOCH_vehTarget = nil; + case 0x13 : { + + if(({(_x find typeof cursortarget) > -1} count EPOCH_lootClassesRaw) > 0)then{ + if(damage cursorObject < 1)then{ + cursorObject setDamage 1; + Hint format ["%1 Looted",typeof cursorObject]; + }else{ + cursorObject setDamage 0; + Hint format ["%1 Un-Looted",typeof cursorObject]; }; }; }; - case 0x13 : { - - if(({(_x find typeof cursortarget) > -1} count EPOCH_lootClassesRaw) > 0)then{ - if(damage cursorTarget < 1)then{ - cursorTarget setDamage 1; - Hint format ["%1 Looted",typeof cursorTarget]; - }else{ - cursorTarget setDamage 0; - Hint format ["%1 Un-Looted",typeof cursorTarget]; - }; - }; - }; - - case 0x26 : { + case 0x26 : { - if (_ctrl) then { - EPB = []; "if (isclass _x) then {EPB pushBack (configName _x); true}" configClasses (configFile >> "CfgBuildingLootPos") + if (_ctrl) then { + EPB = []; "if (isclass _x) then {EPB pushBack (configName _x); true}" configClasses (getMissionConfig "CfgBuildingLootPos") } else { - _buildLoading = objNull; - if !(isNull(EP_building)) then { - _buildLoading = EP_building - }else{ - _buildLoading = cursorTarget; - }; + _buildLoading = objNull; + if !(isNull(EP_building)) then { + _buildLoading = EP_building + }else{ + _buildLoading = cursorObject; + }; - _buildingPos = getPosATL _buildLoading; - _config = missionConfigFile; - _customLoot = true; - _lootCount = 0; + _buildingPos = getPosATL _buildLoading; - if!(isClass (_config >> "CfgBuildingLootPos" >> typeOf _buildLoading))then{ - _config = configFile; - _customLoot = false; - }; + _customLoot = true; + _lootCount = 0; - if(isClass (_config >> "CfgBuildingLootPos" >> typeOf _buildLoading))then{ + if(isClass (getMissionConfig "CfgBuildingLootPos" >> typeOf _buildLoading))then{ - { - _thisLoot = _x select 1; - _thisRawLootPos = _x select 0; + { + _thisLoot = _x select 1; + _thisRawLootPos = _x select 0; - { - _pos = _buildLoading modelToWorld [(_x select 0 select 0),(_x select 0 select 1),(_x select 0 select 2)]; - _newLoot = createVehicle [_thisLoot,_pos, [], 0, "CAN_COLLIDE"]; + { + _pos = _buildLoading modelToWorld [(_x select 0 select 0),(_x select 0 select 1),(_x select 0 select 2)]; + _newLoot = createVehicle [_thisLoot,_pos, [], 0, "CAN_COLLIDE"]; - _dir = (_x select 1) + (getDir _buildLoading); - if (_dir > 360) then { - _dir = _dir - 360; - }; + _dir = (_x select 1) + (getDir _buildLoading); + if (_dir > 360) then { + _dir = _dir - 360; + }; - _newLoot setDir _dir; - _lootCount = _lootCount + 1; - }forEach getArray(_config >> "CfgBuildingLootPos" >> typeOf _buildLoading >> _thisRawLootPos); + _newLoot setDir _dir; + _lootCount = _lootCount + 1; + }forEach getArray(getMissionConfig "CfgBuildingLootPos" >> typeOf _buildLoading >> _thisRawLootPos); - } forEach EPOCH_lootClassesRaw; + } forEach EPOCH_lootClassesRaw; - hint format["Loading House %2\nCustom Loot: %1\nLoot Count: %3",_customLoot,typeOf _buildLoading, _lootCount]; - }else{ - hint format["House %1 Not Found",typeOf _buildLoading]; + hint format["Loading House %2\nCustom Loot: %1\nLoot Count: %3",_customLoot,typeOf _buildLoading, _lootCount]; + }else{ + hint format["House %1 Not Found",typeOf _buildLoading]; - }; - }; + }; + }; - }; + }; }; @@ -411,6 +467,7 @@ EPOCH_KeyDownCustom = { deleteVehicle EPOCH_vehTarget; EPOCH_vehTarget = createVehicle [_selectedClass, _curPos, [], 0, "CAN_COLLIDE"]; + EPOCH_vehTarget disableCollisionWith player; EPOCH_vehTarget setDir Base_angle; EPOCH_vehTarget setPosATL _curPos; } @@ -460,14 +517,14 @@ EPOCH_dbg_saveLootPos = { _simClass = EPOCH_lootSIMClassesRaw select _forEachIndex; _objectsArray = nearestObjects [EP_building, [_x select 1, _simClass select 1], 100]; if !(_objectsArray isEqualTo []) then { - _config_str = _config_str + format['%1[] = {%2',_x select 0,_br]; + _config_str = _config_str + format[' %1[] = {%2',_x select 0,_br]; _countArray = (count _objectsArray) - 1; { _ppos = EP_building worldToModel (getposATL _x); _directionOffset = [_x,EP_building] call EPOCH_dirOffset; - _config_str = _config_str + format['{ %1, %2 }%3', _ppos call EPOCH_dbg_replaceBrackets, _directionOffset,if (_forEachIndex isEqualTo _countArray) then {_br} else {("," + _br)}]; - } forEach _objectsArray; - _config_str = _config_str + "};" + _br; + _config_str = _config_str + format[' { %1, %2 }%3', _ppos call EPOCH_dbg_replaceBrackets, _directionOffset,if (_forEachIndex isEqualTo _countArray) then {_br} else {("," + _br)}]; + } forEach _objectsArray - [EPOCH_vehTarget]; + _config_str = _config_str + " };" + _br; }; } forEach EPOCH_lootClassesRaw; _config_str = _config_str + "};" + _br; @@ -505,7 +562,7 @@ EPOCH_LOOT = { _building = EP_building; - _config = configFile >> 'CfgBuildingLootPos' >> (typeOf _building); + _config = getMissionConfig 'CfgBuildingLootPos' >> (typeOf _building); _buildingPos = (getPosATL _building); @@ -583,31 +640,84 @@ KK_boundingBox = { [] spawn { - (findDisplay 46) displayRemoveAllEventHandlers "KeyDown"; + (findDisplay 46) displayAddEventHandler["KeyDown",{_this call EPOCH_KeyDownCustom}]; + (findDisplay 46) displayAddEventHandler["KeyUp",{_this call EPOCH_KeyUpCustom}]; }; -onEachFrame { - if (!isnull(EPOCH_vehTarget)) then { - _worldPos = player modelToWorld[0, EP_distance, 0]; - _worldPos set [2,Base_Z_height]; - if !(surfaceIsWater _worldPos) then { - _worldPos = ATLToASL _worldPos; +"EPOCH_onEachFrame" call BIS_fnc_removeaddStackedEventHandler; +["EPOCH_onEachFrame", "onEachFrame", { + + if (!isnull(EPOCH_vehTarget)) then { + + if (!isnull(DUMMY)) then { + deleteVehicle DUMMY; }; + DUMMY = "Sign_Arrow_Direction_F" createVehicle getpos player; + + _blocked = false; _target = player; if (!isnull(EP_building)) then { - _target = EP_building; + _target = EP_building; }; - _finalVectorDir = [vectorDir _target, Base_angle] call EPOCH_returnVector; - EP = [getPosASL EPOCH_vehTarget,_worldPos,velocity EPOCH_vehTarget,velocity player,vectorDir EPOCH_vehTarget,_finalVectorDir,vectorUp EPOCH_vehTarget,vectorUp player,1]; - EPOCH_vehTarget setVelocityTransformation [getPosASL EPOCH_vehTarget,_worldPos,velocity EPOCH_vehTarget,velocity player,vectorDir EPOCH_vehTarget,_finalVectorDir,vectorUp EPOCH_vehTarget,vectorUp player,1]; - }; + _worldPos = player modelToWorld[0, EP_distance, 0]; + _worldPos set [2,Base_Z_height]; + if (_worldPos distance player > 10) then { + _blocked = true; + }; + + _worldPos = AGLtoASL _worldPos; + + _finalVectorDir = [vectorDir _target, Base_angle] call BIS_fnc_returnVector; + DUMMY setVelocityTransformation [getPosASL DUMMY,_worldPos,velocity DUMMY,velocity DUMMY,vectorDir DUMMY,_finalVectorDir,vectorUp DUMMY,vectorUp player,1]; + _targetType = typeof EPOCH_vehTarget; + + + { + _x params ["_startV","_stopV"]; + + _start = DUMMY modelToWorld _startV; + _stop = DUMMY modelToWorld _stopV; + + _color = [1,1,1,1]; + _ins = lineIntersectsSurfaces [AGLToASL _start,AGLToASL _stop,EPOCH_vehTarget,player,true,1,"FIRE","NONE"]; + if !(_ins isEqualTo []) then { + _color = [1,0,0,1]; + (_ins select 0) params ["_intersectPosASL","_surfaceNormal","_intersectObject","_parentObject"]; + hint str ([_forEachIndex,EPOCH_vehTarget]); + switch (_forEachIndex) do { + case 0: { + _worldPos set [2, _intersectPosASL select 2]; + }; + case 1; + case 2; + case 3; + case 4; + case 5: { + _blocked = true; + }; + }; + }; + + drawLine3D [ + _start, + _stop, + _color + ]; + + } forEach (missionNamespace getVariable [_targetType,[]]); + + if (_blocked) then { + _worldPos = getPosASL EPOCH_vehTarget; + }; + EPOCH_vehTarget setVelocityTransformation [getPosASL EPOCH_vehTarget,_worldPos,velocity EPOCH_vehTarget,velocity EPOCH_vehTarget,vectorDir EPOCH_vehTarget,_finalVectorDir,vectorUp EPOCH_vehTarget,vectorUp player,1]; + }; if (!isnull(EP_building)) then { EP_building call KK_boundingBox; }; -}; +}] call BIS_fnc_addStackedEventHandler; diff --git a/Tools/SQF/saveTraderCityTemplate.sqf b/Tools/SQF/saveTraderCityTemplate.sqf index 862c943a..f76fe9ca 100644 --- a/Tools/SQF/saveTraderCityTemplate.sqf +++ b/Tools/SQF/saveTraderCityTemplate.sqf @@ -40,7 +40,7 @@ EPOCH_dbg_saveBaseTemplate = { _staticTraders = []; _middleClass = (typeof MIDDLE); _classes pushBack _middleClass; - _range = 200; + _range = 400; _array = allMissionObjects "ALL"; _newArray = []; @@ -57,8 +57,8 @@ EPOCH_dbg_saveBaseTemplate = { { if (!(isPlayer _x)) then { _type = typeof _x; - _classes pushBack [_type,(MIDDLE worldToModel (getpos _x)),getDir _x]; - _config_str = _config_str + format[' { "%1", %2, %3, %4 }%5', _type, ((MIDDLE worldToModel (getpos _x))) call EPOCH_dbg_replaceBrackets, getDir _x, !(simulationEnabled _x), if (_forEachIndex isEqualTo _countArray) then {_br} else {("," + _br)}]; + _classes pushBack [_type,getposATL _x, ([vectorDir _x, vectorUp _x]) call EPOCH_dbg_replaceBrackets]; + _config_str = _config_str + format[' { "%1", %2, %3, %4 }%5', _type, (getposATL _x) call EPOCH_dbg_replaceBrackets, ([vectorDir _x, vectorUp _x]) call EPOCH_dbg_replaceBrackets, !(simulationEnabled _x), if (_forEachIndex isEqualTo _countArray) then {_br} else {("," + _br)}]; }; } forEach _newArray; @@ -72,4 +72,4 @@ EPOCH_dbg_saveBaseTemplate = { _classes } }; -copyToClipboard (true call EPOCH_dbg_saveBaseTemplate); \ No newline at end of file +copyToClipboard (true call EPOCH_dbg_saveBaseTemplate); diff --git a/build.txt b/build.txt index 8de9a580..f8d2d902 100644 --- a/build.txt +++ b/build.txt @@ -1 +1 @@ -440 +560