diff --git a/CREDITS.txt b/CREDITS.txt new file mode 100644 index 000000000..0b2b9ee58 --- /dev/null +++ b/CREDITS.txt @@ -0,0 +1,29 @@ +=== Epoch Mod Credits === +The entire Epoch Mod Team wants to thank all those that have helped along the way! + +== Contributors == +Poul Andersen - Poulmba - Wiki Editor - https://www.youtube.com/user/poulmba +Tobias Solem - - Tester / Server Host - http://whatthepoch.com/ +More TBA + +== Top Donators to EpochMod.com == +GTXGAMING +SurvivalServers.com +dean4310 +Robio +rhinoCRUNCH +B3nzi +Madman2077 +Axle +orangesherbet + +== Active GSP Supporters == +GTXGaming - Dedicated Server - http://www.gtxgaming.co.uk +Survival Servers - Dedicated Server - https://www.survivalservers.com +Vilayer - Dedicated Server - https://www.vilayer.com +Nitrado - Dedicated Server - https://server.nitrado.net +Vert Hosting - Shared Arma 2 and 3 servers - https://verthosting.com + +== Past GSP Supporters == +Gportal - Dedicated Server - https://www.g-portal.com +Arctic Servers - Shared Arma 3 server - http://arcticservers.co.uk diff --git a/Changelogs/0.3.5.0.txt b/Changelogs/0.3.5.0.txt new file mode 100644 index 000000000..5b58d9040 --- /dev/null +++ b/Changelogs/0.3.5.0.txt @@ -0,0 +1,34 @@ +**Client** +[Added] Metal Floors as upgrade in-place option for wood floors. +[Added] Gender selection screen improvements. +[Added] New interaction system. +[Added] Persistent wood and metal spike traps. +[Added] New custom 3x wide hesco type barrier. +[Added] New custom tank trap. +[Added] Updated version of the Fishing Rod. Reel was to small. +[Changed] Made wood ramp shorter by about 30% and slightly reduced height of wood towers and stairs. +[Changed] Refine ghost preview base building snap checks. +[Changed] Players now start with a Quartz radio by default. +[Changed] Overhaul of secure storage system to make it faster. +[Fixed] Selection ring now correctly shows damage/decay level of target when build mode is disabled. +[Fixed] Was unable to use cursorTarget underwater, fixed using new custom made function. +[Fixed] NPC item trades that cannot fit in the players inventory will be placed at the feet of the player. +[Fixed] Not loosing Stamina while swimming. +[Fixed] Removed extra roadway on top of columns. +[Fixed] Error Zero divisor in client side master loop. +[Fixed] .rpt error after gutting animal. + +**Server** +[Added] Documentation on server core framework functions and hive calls. +[Added] muzzle_snds_338_sand to loot and pricing tables. +[Added] Client side master loop is now fully config (CfgMasterLoop) based. +[Added] Ability to fully change default player loadouts via CfgEpochServer configs: +(defaultGoggles, defaultHeadgear, defaultBackpack, defaultVestFemale, defaultVestMale, defaultUniformFemale, defaultUniformMale, itemsInContainers, weaponsInContainers, normalMagazines, weaponsAndItems) +[Changed] Increased reverse token check timeout from 90 to 180 seconds. +[Fixed] Dynamic traders did not correctly track the stored vehicle count and limits. +[Fixed] Force trader data save to save when loading starter items. +[Fixed] Added private array to all Epoch Event scripts due to feedback. +[Fixed] Removed forced weather sync on server startup from server init phase so weather changes are now solely dependent on Epoch Events weather script. +[Fixed] EPOCH_fnc_returnConfigEntry and V2 functions did not use defaults properly. +[Info] Server pack Tools folder now contains InstalEpoch.cmd that is an updated version of the command line download Epoch client files download script for steam workshop. +[Info] Removed old .bikey and added new one for 0350. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 000000000..e3d82bb71 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,2 @@ +Arma 3: Epoch Mod is licensed under: +http://creativecommons.org/licenses/by-nc-nd/4.0/ \ No newline at end of file diff --git a/Server_Install_Pack/@epochhive/README.md b/Server_Install_Pack/@epochhive/README.md new file mode 100644 index 000000000..776610ac5 --- /dev/null +++ b/Server_Install_Pack/@epochhive/README.md @@ -0,0 +1,658 @@ +**A3 Epoch Hive Calls** + +Full A3 epoch server hive call documentation + +**000** + +Get and return Instance ID from config + +_Input: None_ + +_Returns: [ARRAY](https://community.bistudio.com/wiki/Array) format: ["NA123"]_ + + +``` +"epochserver" callExtension "000"; +``` + + +**001** + +STEAMAPI - Vac ban check + +_Input: [SteamID64](https://community.bistudio.com/wiki/getPlayerUID)_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["001|%1", _uid]; +``` + + +**100** + +Setter - Temporarily stack, workaround for Arma 8k character limitation. Used in combination with the SET or SETEX calls. + + + +_Uses:  SET_ + +_Call Type: Synchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_ + +_Returns: Nothing_ + + + +``` +"epochserver" callExtension format["100|%1:%2|%3|%4", 100, _prefix, _key, _hiveCallID, _value]; +``` + + +**101**  + + +Setter - Temporarily stack, workaround for Arma 8k character limitation. Used in combination with the SET or SETEX calls. + + +_Uses:  SET_ + +_Call Type: Asynchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["100|%1:%2|%3|%4", 101, _prefix, _key, _hiveCallID, _value]; +``` + + +**110**  + +Store value in database with the specified key + + +_Uses:  SET_ + +_Call Type: Synchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["110|%1:%2|%3|%4", _prefix, _key, _hiveCallID, _value]; +``` + + +**111** + + +Store value in database with the specified key + + +_Uses:  SET_ + +_Call Type: Asynchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Call Index ID, Value_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["111|%1:%2|%3|%4", _prefix, _key, _hiveCallID, _value]; +``` + + +**120** + + +_Uses:  SETEX_ + +_Call Type: Asynchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Expires, Call Index ID, Value_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["120|%1:%2|%3|%4|%5", _prefix, _key, _expires, _hiveCallID, _value]; +``` + + +**121** + + +Store value in database with the specified key and expiration. + + +_Uses:  SETEX_ + +_Call Type: Asynchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Expires, Call Index ID, Value_ + +_Returns: Nothing_ + +``` +"epochserver" callExtension format["121|%1:%2|%3|%4|%5", _prefix, _key, _expires, _hiveCallID, _value]; +``` + + +**130** + + +Set a timeout on key. After the timeout has expired, the key will automatically be deleted. + + +_Uses:  [EXPIRE](http://redis.io/commands/expire)_ + +_Call Type: Synchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Expires_ + +_Returns: Nothing_ + +``` +"epochserver" callExtension format ["130|%1:%2|%3", _prefix, _key, _expires]; +``` + +**131** + + +Set a timeout on key. After the timeout has expired, the key will automatically be deleted. + + + +_Uses:  [EXPIRE](http://redis.io/commands/expire)_ + +_Call Type: Asynchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Expires_ + +_Returns: Nothing_ + +``` +"epochserver" callExtension format ["130|%1:%2|%3", _prefix, _key, _expires]; +``` + + +**140** + +Sets or clears the bit at offset in the string value stored at key. + + + +_Uses: [SETBIT](http://redis.io/commands/setbit)_ + +_Call Type: Synchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["140|%1:%2|%3|%4", _prefix, _key, _bitIndex, _value]; +``` + + +**141** + + +Sets or clears the bit at offset in the string value stored at key. + + +_Uses: [SETBIT](http://redis.io/commands/setbit)_ + +_Call Type: Asynchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["141|%1:%2|%3|%4", _prefix, _key, _bitIndex, _value]; +``` + + +**200** + +_Uses: GET_ + +_Call Type: Synchronous_ + +_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_ + +_Returns: _Array + + +``` +_hiveResponse = "epochserver" callExtension format ["200|%1:%2", _prefix, _key]; +``` + + +**210** + + +_Uses: GET, TLL_ + + +_Call Type: Synchronous_ + + +_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value_ + +_Returns: Array_ + +``` +_hiveResponse = "epochserver" callExtension format ["210|%1:%2", _prefix, _key]; +``` + + +**220** + + +_Uses: GETRANGE_ + + +_Call Type: Synchronous_ + + +_Input: [Key](http://redis.io/topics/data-types-intro), Start Index, Stop Index_ + +_Returns: Array_ + +``` +_hiveResponse = "epochserver" callExtension format["220|%1:%2|%3|%4", _prefix, _key, _currentIndex, (_currentIndexMax-1)]; +``` + + +**230** + +_Uses: GETBIT_ + +_Call Type: Synchronous_ + +_Input: [Key](http://redis.io/topics/data-types-intro), Bit Index, Value (0-1)_ + +_Returns: BOOL_ + + +``` +_hiveResponse = "epochserver" callExtension format["240|%1:%2|%3", _prefix, _key, _value]; +``` + + + +**300** + + + +_Uses: [TTL](http://redis.io/commands/ttl)_ + + + +_Call Type: Synchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro)_ + +_Returns: TTL in seconds_ + + +``` +"epochserver" callExtension format["300|%1:%2", _prefix, _uniqueID]; +``` + + +**400** + +Removes the specified key. + +_Uses: [DEL](http://redis.io/commands/del)_ + +_Call Type: Synchronous_ + + + +_Input: [Key](http://redis.io/topics/data-types-intro)_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["400|%1:%2", _prefix, _uniqueID]; +``` + + +**500** + +_Uses: [PING](http://redis.io/commands/ping)_ + +_Call Type: Synchronous_ + +_Input: Nothing_ + +_Returns: "PONG"_ + +``` +'epochserver' callExtension '500' +``` + + + +**501** + +Get current time. + + + +_Call Type: Synchronous_ + +_Input: Nothing_ + +_Returns: Array [YYYY,MM,DD,HH,MM,SS]_ + + +``` +'epochserver' callExtension '510' +``` + + +**600** + +Used to push data from database server in a queue. + +_Uses: [LPOP](http://redis.io/commands/lpop) with CMD- prefix_ + + + +_Call Type: Synchronous_ + +_Input: Server InstanceID_ + +_Returns: Array [1,""]_ + + +``` +_response = "epochserver" callExtension format["600|%1",_instanceID]; +``` + + +**700** + +Log in Redis + + + +_Uses: LPUSH _with -LOG postfix + + + +_Call Type: Synchronous_ + +_Input: Key Prefix, Message_ + +_Returns: Nothing_ + + +``` +"epochserver" callExtension format["700|%1|%2", _prefix, _message]; +``` + + +**701** + +Log in Redis + + + +_Uses: LPUSH _with -LOG postfix + + + +_Call Type: Synchronous_ + +_Input: Key Prefix, Message_ + +_Returns: Nothing_ + + + +``` +"epochserver" callExtension format["701|%1|%2", _prefix, _message]; +``` + + +**800** + + + +Append strings specified to end of first line of publicvariable.txt and then runs BE command #loadEvents. + + + +_Call Type: Synchronous_ + +_Input: Strings_ + +_Returns: Nothing_ + + + +``` +"epochserver" callExtension format["800|%1|%2|%3|%4", _var1, _var2, _var3, _var4]; +``` + + +**801** + +Append strings specified to end of first line of publicvariable.txt and then runs BE command #loadEvents. + + + +_Call Type: Asynchronous_ + +_Input: Strings_ + +_Returns: Nothing_ + + + +``` +"epochserver" callExtension format["800|%1|%2|%3|%4", _var1, _var2, _var3, _var4]; +``` + +**810** + +Get random string, [a-zA-Z]{5-10}, if only one string is requested it will return a string instead of a array + + + +_Call Type: Synchronous_ + +_Input: Count_ + +_Returns: Array or String_ + + + + + +``` +_response = 'epochserver' callExtension format['810|%1',_count]; +``` + + + +**820** + +Add ban to bans.txt and execute #loadBans (Depreciated should use 900 calls) + + + +_Call Type: Synchronous_ + +_Input: Steam64ID, Reason_ + +_Returns: Nothing_ + + + +``` +'epochserver' callExtension format['820|%1|%2',getPlayerUID _playerObj,_reason]; +``` + +**821** + +Add ban to bans.txt and execute #loadBans (Depreciated should use 900 calls) + + + +_Call Type: Synchronous_ + +_Input: Steam64ID, Reason_ + +_Returns: Nothing_ + + + +``` +epochserver' callExtension format['821|%1|%2',getPlayerUID _playerObj,_reason]; +``` + + +**901** + +Broadcast message to server + +_Call Type: Asynchronous_ + +_Input: Message_ + +_Returns: Nothing_ + +``` +'epochserver' callExtension format['901|%1', _message]; +``` + + +**911** + +Kick with message + + + +_Call Type: Asynchronous_ + +_Input: player64ID, Message_ + +_Returns: Nothing_ + + + +``` +'epochserver' callExtension format['911|%1|%2', _playerUID, _reason]; +``` + + + +**921** + +Ban with message and duration + + + +_Call Type: Asynchronous_ + +_Input: player64ID, Message, duration_ + +_Returns: Nothing_ + + +``` +'epochserver' callExtension format['921|%1|%2|%3', _playerUID, _message, _duration]; +``` + + +**930** + +Unlock server using BE command #unlock + + + +_Call Type: Asynchronous_ + +_Input: Nothing_ + +_Returns: Nothing_ + + + +``` +'epochserver' callExtension '930' +``` + +**931** + +Lock server using BE command #lock + + + +_Call Type: Asynchronous_ + +_Input: Nothing_ + +_Returns: Nothing_ + + +``` +'epochserver' callExtension '931' +``` + + +**991** + +Shutdown Server using BE #shutdown command.   + +_Call Type: Asynchronous_ + +_Input: Nothing_ + +_Returns: Nothing_ + + + +``` +'epochserver' callExtension '991' +``` diff --git a/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo b/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo index dade80077..efb12f426 100644 Binary files a/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo and b/Server_Install_Pack/@epochhive/addons/a3_epoch_server.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo b/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo index 7e5ed9f9e..7761ce66c 100644 Binary files a/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo and b/Server_Install_Pack/@epochhive/addons/a3_epoch_server_settings.pbo differ diff --git a/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo b/Server_Install_Pack/@epochhive/addons/epoch_server_core.pbo index a58760415..cd6da19cf 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/epochah.hpp b/Server_Install_Pack/@epochhive/epochah.hpp index baeb44583..38ed95cfb 100644 --- a/Server_Install_Pack/@epochhive/epochah.hpp +++ b/Server_Install_Pack/@epochhive/epochah.hpp @@ -3,7 +3,7 @@ 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_ahInitAuthCfg[] = {0,90}; // 0 == BAN - 1 = LOG, 60 = ban or log if anti hack is not started in 90 seconds +antihack_ahInitAuthCfg[] = {0,180}; // 0 == BAN - 1 = LOG, 60 = ban or log if anti hack is not started in 180 seconds antihack_whitelistedCfgPatches[] = {"A3_AIR_F_RTD","AiA_Worlds_Author","AiA_Worlds_Grid","AiA_BaseConfig_F","AiA_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","AiA_cba_xeh_a2_Dummy","AiA_CBA_A2_xeh_Dummy","AiA_cba_xeh_oa_Dummy","AiA_CBA_OA_xeh_Dummy","AiA_CA_Data","AiA_A10_Data","AiA_Afghan_Data","AiA_Air2_Data","AiA_Air3_Data","AiA_Air_Data","AiA_Air_e_Data","AiA_Animations_Data","AiA_Animations_Config","AiA_Bohemia_Data","AiA_Bootcamp_acr_Data","AiA_Buildings2_Data","AiA_Buildings2_Ind_Cementworks_Data","AiA_Buildings_Data","AiA_Ca_acr_Data","AiA_CA_Config","CAData","AiA_CA_Config_Data_ParticleEffects","CAData_ParticleEffects","AiA_Ca_e_Data","AiA_Ca_pmc_Data","AiA_Characters2_Data","AiA_Chernarus_Data","AiA_Chernarus_Data_Data","AiA_Chernarus_Data_Layers_Data","AiA_Chernarus_Summer_Data","AiA_Cti_buildings_Data","AiA_CA_Data_Data_ParticleEffects","AiA_Data_baf_Data","AiA_Desert2_Data","Desert2_Objects","AiA_Desert_Data","AiA_Desert_e_Data","AiA_Hotfix_Data","AiA_Introanims_Data","CALanguage","AiA_Language_acr_Data","AiA_Language_baf_Data","AiA_Language_e_Data","AiA_Language_pmc_Data","CALanguage_missions","AiA_Languagemissions_acr_Data","AiA_Languagemissions_baf_Data","CALanguage_missions_e","AiA_Languagemissions_pmc_Data","AiA_Misc2_Data","AiA_Misc3_Data","AiA_Misc_Data","AiA_Misc_acr_Data","AiA_Misc_e_Data","AiA_Plants2_Bush_Data","AiA_Plants2_Clutter_Data","AiA_Plants2_Misc_Data","AiA_Plants2_Plant_Data","AiA_Plants2_Tree_Data","AiA_Plants_Data","AiA_Plants_Config","CAPlants","AiA_Plants_e2_Data","AiA_Plants_e_Data","AiA_Plants_pmc_Data","AiA_Provinggrounds_pmc_Data","AiA_Roads2_Data","AiA_Roads2_Config","CARoads2","CARoads2Bridge","CARoads2Dam","AiA_Roads_Data","AiA_Roads_Config","CARoads","AiA_Roads_e_Data","AiA_Roads_pmc_Data","AiA_Roads_pmc_Config","CARoads_PMC_Bridge","AiA_Rocks2_Data","AiA_Rocks2_Config","CARocks2","AiA_Rocks_Data","AiA_Rocks_Config","CARocks","AiA_Rocks_e_Data","AiA_Sara_Data","AiA_Saralite_Data","AiA_Shapur_baf_Data","AiA_Signs2_Data","AiA_Signs2_Config","CASigns2","AiA_Signs_Data","AiA_Signs_Config","CASigns","AiA_Signs_e_Data","AiA_Sounds_Data","AiA_Sounds_Config","CASounds","AiA_Sounds_e_Data","AiA_Structures_Data","pond_test","AiA_Structures_e_Data","AiA_Structures_pmc_Data","AiA_Takistan_Data","AiA_Takistan_Data_Data","AiA_Takistan_Data_Layers_Data","AiA_Tracked2_Data","AiA_Tracked_Data","AiA_Tracked_e_Data","AiA_Ui_Data","AiA_Utes_Data","AiA_Utes_Config","Utes","AiA_Water2_Data","CAWater2_LHD","AiA_Water_Data","AiA_Weapons2_Data","AiA_Weapons_Data","AiA_Weapons_e_Data","AiA_Weapons_pmc_Data","AiA_Wheeled2_Data","AiA_Wheeled_Data","AiA_Wheeled_e_Data","AiA_Zargabad_Data","AiA_Models_DBE1_Data","Music_DBE1","ploty_DBE1","Roads_DBE1","AiA_Sara_dbe1_Data","Disable_XEH_Logging","AiA_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","Hsim_Language_H","Hsim_Language_missions_H","AiA_StandaloneTerrainPack_Dummy","CA_ACR","CA_Animals2_Anim_Config","CA_Anims_Char","CA_Anims_E_Wmn","CA_E","CA_PMC","CAAir","CACharacters","CATracked","CAUI","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","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","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","CAFonts","CAMisc_fix","CAMisc_fix_A2FREE","CAMisc_fix_air","CAMisc_fix_Ch2","CAMisc_fix_Str","CAMisc_fix_Weap","CAMP_Armory_Misc","CAMP_Armory_Misc_Concrete_Wall","CAMP_Armory_Misc_Entrance_Gate","CAMP_Armory_Misc_Info_Board","CAMP_Armory_Misc_Infostands","CAMP_Armory_Misc_Laptop","CAMP_Armory_Misc_Loudspeakers","CAMP_Armory_Misc_Plasticpole","CAMP_Armory_Misc_Red_Light","CAMP_Armory_Misc_Sign_Armex","CAMP_Armory_Misc_Sign_Direction","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","AiA_Buildings_Config","CABuildings","CABuildings_Misc","Desert2_Buildings","CA_desert2_Characters","DBE1_Hotfix","AiA_Language_acr_Config","CALanguage_ACR","AiA_Language_e_Config","CALanguage_e","AiA_Language_pmc_Config","CALanguage_PMC","AiA_Languagemissions_acr_Config","CALanguage_missions_ACR","AiA_Languagemissions_pmc_Config","CALanguage_missions_PMC","AiA_Misc_Config","CAMisc","CAWater2_seafox_EP1","AiA_Roads_e_Config","CARoads_E","AiA_Rocks_e_Config","CARocks_E","AiA_Sara_Config","Sara","AiA_Saralite_Config","SaraLite","AiA_Structures_Config","CAStructures","CAStructures_A_BuildingWIP","CAStructures_A_CraneCon","CAStructuresLand_A_MunicipalOffice","CAStructuresBarn_W","CAStructures_Castle","CAStructuresHouse","CAStructuresHouse_A_FuelStation","CAStructuresHouse_A_Hospital","CAStructuresHouse_A_Office01","CAStructuresHouse_A_Office02","CAStructuresHouse_a_stationhouse","CAStructuresHouse_Church_02","CAStructuresHouse_Church_03","CAStructuresHouse_Church_05R","CAStructuresHouse_HouseBT","CAStructuresHouse_HouseV2","CAStructuresHouse_HouseV","CAStructuresLand_Ind_Stack_Big","CAStructures_IndPipe1","CAStructuresInd_Quarry","Ind_SawMill","CAStructures_Mil","CAStructures_Misc","CAStructures_Misc_Armory","CAStructures_Misc_Armory_Armor_Popuptarget","CAStructures_Misc_Powerlines","CAStructures_Nav","CAStructuresLand_Nav_Boathouse","CAStructures_Proxy_BuildingParts","CAStructures_Proxy_Ruins","CAStructures_Rail","CAStructuresHouse_rail_station_big","CAStructures_Ruins","CAStructuresShed_Small","CAStructuresHouse_Shed_Ind","CAStructures_Wall","AiA_Models_DBE1_Config","Models_DBE1","Anims_DBE1","HMMWV_DBE1","Kamenolom_DBE1","Mercenary_DBE1","Misc_DBE1","NPCs_DBE1","Pila_DBE1","Prisoners_DBE1","UH60Desert","UI_DBE1","Vysilac_DBE1","Zakladna_DBE1","AiA_Sara_dbe1_Config","Sara_dbe1","AiA_Buildings2_Config","CABuildings2","A_Crane_02","A_GeneralStore_01","CABuildings2_A_Pub","A_statue","Barn_Metal","CABuildingParts","CABuildingParts_Signs","CATEC","Church_01","Farm_Cowshed","Farm_WTower","CAHouseBlock_A","CAHouseBlock_B","CAHouseBlock_C","CAHouseBlock_D","HouseRuins","Ind_Dopravnik","Ind_Expedice","Ind_MalyKomin","Ind_Mlyn","Ind_Pec","ind_silomale","Ind_SiloVelke","Ind_Vysypka","Ind_Garage01","CAStructures_IndPipe1_todo_delete","IndPipe2","Ind_Shed_01","Ind_Shed_02","Ind_Tank","Ind_Workshop01","CABuildings2_Misc_Cargo","Misc_PowerStation","Misc_WaterStation","Rail_House_01","Shed_small","Shed_wooden","particle_effects","AiA_Chernarus_Config","Chernarus","AiA_Chernarus_Summer_Config","Chernarus_Summer","AiA_Desert2_Config","Porto","AiA_Desert_Config","Desert","AiA_Hotfix_Config","CA_Hotfix","CA_QGClutterHotfix","CA_Hotfix_vez_ropa","AiA_Misc2_Config","CAMisc2","AiA_Misc3_Config","CAMisc3","WarfareBuildings","AiA_Misc_e_Config","CAMisc_E","CAMisc_E_WF","AiA_Signs_e_Config","CASigns_E","A_TVTower","CAStructures_Nav_pier","CAStructures_Railway","AiA_Structures_e_Config","CAStructures_E","CAStructures_E_HouseA","CAStructures_E_HouseA_A_BuildingWIP","CAStructures_E_HouseA_A_CityGate1","CAStructures_E_HouseA_A_Minaret","CAStructures_E_HouseA_A_Minaret_Porto","CAStructures_E_HouseA_A_Mosque_big","CAStructures_E_HouseA_A_Mosque_small","CAStructures_E_HouseA_A_Office01","CAStructures_E_HouseA_a_stationhouse","CAStructures_E_HouseA_A_Statue","CAStructures_E_HouseA_A_Villa","CAStructures_E_HouseC","CAStructures_E_HouseK","CAStructures_E_HouseL","CAStructures_E_Ind","CAStructures_E_Ind_Ind_Coltan_Mine","CAStructures_E_Ind_Ind_FuelStation","CAStructures_E_Ind_Ind_Garage01","CAStructures_E_Ind_Oil_Mine","CAStructures_E_Ind_IndPipes","CAStructures_E_Ind_Misc_PowerStation","CAStructures_E_Ind_Ind_Shed","CAStructures_E_Mil","CAStructures_E_Misc","CAStructures_E_Misc_Misc_cables","CAStructures_E_Misc_Misc_Construction","CAStructures_E_Misc_Misc_Garbage","CAStructures_E_Misc_Misc_Interier","CAStructures_E_Misc_Misc_Lamp","CAStructures_E_Misc_Misc_Market","CAStructures_E_Misc_Misc_powerline","CAStructures_E_Misc_Misc_Water","CAStructures_E_Misc_Misc_Well","CAStructures_E_Wall","CAStructures_E_Wall_Wall_L","AiA_Structures_pmc_Config","CAStructures_PMC","CAStructures_PMC_Buildings","CAStructures_PMC_Buildings_Bunker","CAStructures_PMC_Buildings_GeneralStore_PMC","CAStructures_PMC_Buildings_Ruin_Cowshed","CAStructures_PMC_Ind","CAStructures_PMC_FuelStation","CAStructures_PMC_Misc","CAStructures_PMC_Misc_Shed","CAStructures_PMC_Ruins","CAStructures_PMC_Walls","AiA_Takistan_Config","Takistan","AiA_Zargabad_Config","zargabad","AiA_Afghan_Config","Mountains_ACR","AiA_Bohemia_Config","Woodland_ACR","AiA_Bootcamp_acr_Config","Bootcamp_ACR","AiA_Data_baf_Config","CA_BAF","AiA_Desert_e_Config","Desert_E","AiA_Language_baf_Config","CALanguage_Baf","AiA_Languagemissions_baf_Config","CALanguageMissions_baf","AiA_Misc_acr_Config","CAMisc_ACR","CAMisc_ACR_3DMarkers","CAMisc_ACR_Container","CAMisc_ACR_Dog","CAMisc_ACR_Helpers","CAMisc_ACR_PBX","CAMisc_ACR_ScaffoldingSmall","CAMisc_ACR_Shooting_range","CAMisc_ACR_Sign_Mines","CAMisc_ACR_Targets","CAMisc_ACR_Targets_InvisibleTarget","CAMisc_ACR_TestSphere","AiA_Provinggrounds_pmc_Config","ProvingGrounds_PMC","AiA_Shapur_baf_Config","Shapur_BAF","AiA_Core","AiA_Worlds","AiA_Worlds_Ambient","AiA_Worlds_Clutter","AiA_Worlds_ClutterDist","AiA_Worlds_Delete","AiA_Worlds_DisableInfiniteTerrain","AiA_Worlds_DustEffects","AiA_Worlds_EnvSounds","AiA_Worlds_FullDetailDist","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_PictureMap","AiA_Worlds_PictureShot","AiA_Worlds_Seabed","AiA_Worlds_SkyTexture","AiA_Worlds_StreetLamp","AiA_Worlds_Surfaces","AiA_Worlds_Water","AiA_StandaloneTerrainPack_Core","AiA_StandaloneTerrainPack_Core_Faction","AiA_StandaloneTerrainPack_Core_VehicleClass"}; //whitelisted cfgPatches for AiA TP 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"; @@ -20,7 +20,7 @@ antihack_customVariablesCheck = false; // true enables variable scanning on miss 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_Owner[] = {}; adminMenu_OwnerSetting[] = { "ESP-PLAYER", "ESP-VEHICLE", @@ -35,7 +35,7 @@ adminMenu_OwnerSetting[] = { // "MAP-LOOT", "MAP-VEHICLE", "MAP-AI", - // "MAP-BASEBUILDING", + // "MAP-BASEBUILDING", "TARGET-HEAL", "TARGET-AMMO", "TARGET-KILL", @@ -71,7 +71,7 @@ adminMenu_Owner[] = { {"STEAMID64","ADMINNAME1"}, {"STEAMID64","ADMINNAME2"}, {"STEAMID64","ADMINNAME3"} //<- No comma on the last entry -}; +}; adminMenu_High[] = { {"STEAMID64","ADMINNAME4"}, {"STEAMID64","ADMINNAME5"}, @@ -123,4 +123,4 @@ Available Settings: "SPAWN-MENU" => Access to Spawn Menu -*/ \ No newline at end of file +*/ diff --git a/Server_Install_Pack/README.txt b/Server_Install_Pack/README.txt index fa892cd1a..ae003a36f 100644 --- a/Server_Install_Pack/README.txt +++ b/Server_Install_Pack/README.txt @@ -1,12 +1,18 @@ -Arma 3: Epoch Mod - EpochMod.com +Arma 3 Epoch Mod +-------------------------- Developers -Aaron Clark - [VB]AWOL - Game Design, Code -Kenneth Bente - Axle - Public Relations -Paul Tomany - Sequisha - Models, Textures -Darren Harrison - Kiory - Models, Textures -Damian Clark - [VB]GREEN - Graphics -Niklas Wagner - Skaronator - Code - http://skaronator.com/ -Andrew Gregory - Axeman - AI Code -Florian Kinder - Fank - DLL Code -Denis Erygin - devd - Linux DLL Support +-------------------------- +* 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 diff --git a/Server_Install_Pack/Tools/InstallEpoch.cmd b/Server_Install_Pack/Tools/InstallEpoch.cmd new file mode 100644 index 000000000..458e8741b --- /dev/null +++ b/Server_Install_Pack/Tools/InstallEpoch.cmd @@ -0,0 +1,14 @@ +@ECHO OFF +SET STEAMUN=admin@youremail.net +SET STEAMPW=chamgeme +SET ARMASVRPATH=C:\Arma3Server +SET ARMAAPPID=107410 +SET ARMAWORKSHOPID=421839251 + +:: remove mod folder +rd /s/q "%ARMASVRPATH%\@Epoch" +:: update workshop mod +START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% validate +quit +:: copy files back to server +xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\@Epoch" +:: steamcmd.exe +login %STEAMUN% %STEAMPW% +force_install_dir "%ARMASVRPATH%" "+app_update %ARMAAPPID%" validate +quit diff --git a/Server_Install_Pack/keys/epoch0340.bikey b/Server_Install_Pack/keys/epoch0340.bikey deleted file mode 100644 index 84a4347bf..000000000 Binary files a/Server_Install_Pack/keys/epoch0340.bikey and /dev/null differ diff --git a/Server_Install_Pack/keys/epoch0350.bikey b/Server_Install_Pack/keys/epoch0350.bikey new file mode 100644 index 000000000..f503ee3e4 Binary files /dev/null and b/Server_Install_Pack/keys/epoch0350.bikey differ diff --git a/Server_Install_Pack/mpmissions/epoch.VR.pbo b/Server_Install_Pack/mpmissions/epoch.VR.pbo index b6c4f80ca..3339b03c2 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/sc/battleye/BEServer.dll b/Server_Install_Pack/sc/battleye/BEServer.dll deleted file mode 100644 index c508ebbc7..000000000 Binary files a/Server_Install_Pack/sc/battleye/BEServer.dll and /dev/null differ diff --git a/Server_Install_Pack/sc/battleye/attachto.txt b/Server_Install_Pack/sc/battleye/attachto.txt index fa4aec86c..aea73eda9 100644 --- a/Server_Install_Pack/sc/battleye/attachto.txt +++ b/Server_Install_Pack/sc/battleye/attachto.txt @@ -1 +1 @@ -5 "" !WeaponHolderSimulated !Shot !"(Safe|LockBox|FirePlace|PlotPole|Jack|SolarGen)_EPOCH" !"Jack_SIM_EPOCH" !"LockBox_Ghost_EPOCH" !"CinderWallHalf_Ghost_EPOCH" !"(Tipi|Workbench|StorageShelf|Wood(Floor|LargeWall|Stairs|Ramp|Ladder|Tower)_Ghost_EPOCH" !"Foundation_Ghost_EPOCH" !"Land_Cages_F" !"Epoch_Sapper_F" +5 "" !WeaponHolderSimulated !Shot !"(Safe|LockBox|FirePlace|PlotPole|Jack|SolarGen)_EPOCH" !"Jack_SIM_EPOCH" !"LockBox_Ghost_EPOCH" !"CinderWallHalf_Ghost_EPOCH" !"(Tipi|Workbench|StorageShelf|Wood(Floor|LargeWall|Stairs|Ramp|Ladder|Tower)_Ghost_EPOCH" !"(Hesco3|Metal|Foundation)_Ghost_EPOCH" !"Land_Cages_F" !"Epoch_Sapper_F" diff --git a/Server_Install_Pack/sc/battleye/createvehicle.txt b/Server_Install_Pack/sc/battleye/createvehicle.txt index 516987d73..02ba18340 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 "_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)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH" +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/scripts.txt b/Server_Install_Pack/sc/battleye/scripts.txt index 7470628b7..fc477658b 100644 --- a/Server_Install_Pack/sc/battleye/scripts.txt +++ b/Server_Install_Pack/sc/battleye/scripts.txt @@ -1,4 +1,6 @@ //new2 +7 EPOCH_C_SET !="!isNil \"EPOCH_C_SET\"" !="_array = EPOCH_C_SET;" !="EPOCH_C_SET = nil;" +7 EPOCH_GROUP_Delete_PVS !="EPOCH_GROUP_Delete_PVS = [player,Epoch_personalToken];" 7 "BIS_fnc_dynamictext" !="\"BIS_fnc_dynamictext"\" !", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;" !", 0, 0.4, 5, 2, 0, 2] spawn bis_fnc_dynamictext;" !", 0, 1, 6, 2, 0, 1] spawn bis_fnc_dynamictext;" !"snil '_fnc_scriptName') then {_fnc_scriptName}" 7 forceRespawn 7 setFriend @@ -24,6 +26,8 @@ 7 addMagazineCargo !"_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !"_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;" 7 addItem !="player addItem _item;" !="player addItem _craftItem;" !="player addItem _x;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" 7 addBackPack +7 addMissionEventHandler !="addMissionEventHandler ['Draw3D',_var + \"call Epoch_gui3DCooldownEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dModelPosEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dWorldPosEH;\"];" !="addMissionEventHandler [\n"ended",\n{\n\nBIS_fnc_missionHandlers_end = _this;" +7 removeMissionEventHandler !="removeMissionEventHandler [\"Draw3D\", _id];" 7 removeAllWeapons !="removeAllWeapons axeGeneral;" 7 removeAllItems 7 removeAllActions @@ -34,7 +38,7 @@ 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 createTeam -7 createDialog !="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 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 @@ -45,7 +49,7 @@ 7 setDamage !="player setdamage 1;" 7 setDammage 7 displaySetEventHandler -7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," +7 ctrlSetEventHandler !"BIS_fnc_guiMessage_status" !"ctrlSetEventHandler ['LBDblClick', '_this call" !="_buttonRespawn ctrlseteventhandler [\"buttonclick\",\"with uinamespace do {['buttonRespawn'," !="_ctrl ctrlSetEventHandler [\"mouseEnter\"" 7 addMPEventHandler 7 addEventHandler !"displayAddEventHandler" !"ctrlAddEventHandler" !"FiredNear" !"EpeContactStart" !"InventoryClosed" !"GetOut" !"InventoryOpened" !"local" !"Respawn" !"Put" !"Take" !"Fired" !"Killed" !" [\"PostReset\",{BIS_EnginePPReset = true;} ];" !"_logic addeventhandler [\n\"local\"" 7 displayAddEventHandler !"[_display] call _fnc_animate;" !"tVersion select 4) == \"Development\") then" !"_display displayaddeventhandler\n[\n\"mousemoving\"," !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"true\"];" !"(findDisplay 46) displayAddEventHandler [\"KeyDown\",\"_this call EPOCH_KeyDown\"];" !="_addCase = _display46 displayAddEventHandler ['KeyDown',{_this call EPOCH_KeyDown;}];" !"_display displayaddeventhandler [\"unload\",\"uinamespace setvariable ['BIS_fnc_guiMess" !="findDisplay -1337 displayAddEventHandler ['Unload'" !="_display displayaddeventhandler [\"keydown\",\"with uinamespace do {['keyDown'" @@ -57,10 +61,9 @@ 7 displayRemoveEventHandler !"BIS_fnc_guiMessage_status" 7 switchCamera !="vehicle player switchCamera" 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\"" +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 drawLine3D !"{\nfor [{_i = 1}, {_i < count _x}, {_i = _i + 1}] do {\ndrawLine3D [_x select (_i - 1), _x select _i, ((BIS_tracedShooter getVari" -7 ctrlCreate !="_ctrl = _display ctrlCreate [\"RscProgress\",_idc + 1];" !="_display ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\"" !="_ctrl = _display ctrlCreate [_x,call _getIDC];" !="_mainGrp = _display ctrlCreate [\"Epoch_main_config_group\",_value];" !="_ctrlGrp = _display ctrlCreate [\"RscControlsGroupNoScrollbars\",call epoch_getIDC];" -7 ctrlDelete !="ctrlDelete _ListGroup;" !="ctrlDelete (rmx_var_crafting_ctrl_GROUP select 0);" !="ctrlDelete _mainGrp;" !="_x call epoch_getIDC;\nctrlDelete _x;" +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 7 ctrlModel 7 ctrlModelDirection @@ -74,5 +77,3 @@ 7 setGroupIconsSelectable 7 setGroupIconParams 7 addGroupIcon -7 EPOCH_defaultVars_SEPXVar -7 EPOCH_GROUP_Delete_PVS !="EPOCH_GROUP_Delete_PVS = [player,Epoch_personalToken];" diff --git a/Server_Install_Pack/sc/battleye/setpos.txt b/Server_Install_Pack/sc/battleye/setpos.txt index 45b3f8213..916a46945 100644 --- a/Server_Install_Pack/sc/battleye/setpos.txt +++ b/Server_Install_Pack/sc/battleye/setpos.txt @@ -1 +1 @@ -5 "" !="Epoch_(Male|Female)_F" !="SapperHead_SIM_EPOCH" !="(Tipi|Workbench|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|LockBox|CinderWallHalf|CinderWall|Fireplace|SolarGen)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorway|Stairs|Stairs2|Ramp)_SIM_EPOCH" !="(Foundation|Wood(Foundation|Ladder|Tower))_Ghost_EPOCH" !="Foundation_EPOCH" !="WoodFoundation_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH" +5 "" !="Epoch_(Male|Female)_F" !="SapperHead_SIM_EPOCH" !="(Tipi|Workbench|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|LockBox|CinderWallHalf|CinderWall|Fireplace|SolarGen|TankTrap)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorway|Stairs|Stairs2|Ramp)_SIM_EPOCH" !="(Foundation|Wood(Foundation|Ladder|Tower))_Ghost_EPOCH" !="Foundation_EPOCH" !="WoodFoundation_EPOCH" !="(Hesco3|Metal)(_Ghost|_SIM|)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH" diff --git a/Sources/epoch_code/Data/UI/buttons/build_maintain.paa b/Sources/epoch_code/Data/UI/buttons/build_maintain.paa index 75d0bf8cd..c474d0667 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/build_maintain.paa and b/Sources/epoch_code/Data/UI/buttons/build_maintain.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/build_move.paa b/Sources/epoch_code/Data/UI/buttons/build_move.paa index 898820703..b765c04ac 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/build_move.paa and b/Sources/epoch_code/Data/UI/buttons/build_move.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/build_pack.paa b/Sources/epoch_code/Data/UI/buttons/build_pack.paa new file mode 100644 index 000000000..756a616a8 Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/build_pack.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/build_remove.paa b/Sources/epoch_code/Data/UI/buttons/build_remove.paa index 79ef7cad2..f1786bf1d 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/build_remove.paa and b/Sources/epoch_code/Data/UI/buttons/build_remove.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/build_upgrade.paa b/Sources/epoch_code/Data/UI/buttons/build_upgrade.paa index 062b9038c..55b3fbdd2 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/build_upgrade.paa and b/Sources/epoch_code/Data/UI/buttons/build_upgrade.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/dm_selection.paa b/Sources/epoch_code/Data/UI/buttons/dm_selection.paa index f8a686a4b..3bfbf989b 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/dm_selection.paa and b/Sources/epoch_code/Data/UI/buttons/dm_selection.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/dm_selection_b1.paa b/Sources/epoch_code/Data/UI/buttons/dm_selection_b1.paa new file mode 100644 index 000000000..78f3f1953 Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/dm_selection_b1.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/krypto.paa b/Sources/epoch_code/Data/UI/buttons/krypto.paa new file mode 100644 index 000000000..c48138cc1 Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/krypto.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/pad_can_lock.paa b/Sources/epoch_code/Data/UI/buttons/pad_can_lock.paa index 21f5245e3..b6be18f4a 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/pad_can_lock.paa and b/Sources/epoch_code/Data/UI/buttons/pad_can_lock.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/pad_can_unlock.paa b/Sources/epoch_code/Data/UI/buttons/pad_can_unlock.paa index b7e674094..efd15c505 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/pad_can_unlock.paa and b/Sources/epoch_code/Data/UI/buttons/pad_can_unlock.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/pad_cannot_lock.paa b/Sources/epoch_code/Data/UI/buttons/pad_cannot_lock.paa index 75e46a5e6..bf715d9cc 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/pad_cannot_lock.paa and b/Sources/epoch_code/Data/UI/buttons/pad_cannot_lock.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/pad_cannot_unlock.paa b/Sources/epoch_code/Data/UI/buttons/pad_cannot_unlock.paa index 5608cb528..c6e57b08e 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/pad_cannot_unlock.paa and b/Sources/epoch_code/Data/UI/buttons/pad_cannot_unlock.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/player_inspect.paa b/Sources/epoch_code/Data/UI/buttons/player_inspect.paa index ebcc84687..92d9f2e9f 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/player_inspect.paa and b/Sources/epoch_code/Data/UI/buttons/player_inspect.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/repair.paa b/Sources/epoch_code/Data/UI/buttons/repair.paa new file mode 100644 index 000000000..1ff513025 Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/repair.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/talk_blue.paa b/Sources/epoch_code/Data/UI/buttons/talk_blue.paa index 038d21624..da1976fd2 100644 Binary files a/Sources/epoch_code/Data/UI/buttons/talk_blue.paa and b/Sources/epoch_code/Data/UI/buttons/talk_blue.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/timer.paa b/Sources/epoch_code/Data/UI/buttons/timer.paa new file mode 100644 index 000000000..d07f12ad1 Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/timer.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/vehicle_refuel.paa b/Sources/epoch_code/Data/UI/buttons/vehicle_refuel.paa new file mode 100644 index 000000000..7aa2c3146 Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/vehicle_refuel.paa differ diff --git a/Sources/epoch_code/Data/UI/buttons/vehicle_siphon.paa b/Sources/epoch_code/Data/UI/buttons/vehicle_siphon.paa new file mode 100644 index 000000000..08a8a722d Binary files /dev/null and b/Sources/epoch_code/Data/UI/buttons/vehicle_siphon.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/0.paa b/Sources/epoch_code/Data/UI/health_parts/0.paa new file mode 100644 index 000000000..b8124c8cc Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/0.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/1.paa b/Sources/epoch_code/Data/UI/health_parts/1.paa new file mode 100644 index 000000000..80c15d1dd Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/1.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/10.paa b/Sources/epoch_code/Data/UI/health_parts/10.paa new file mode 100644 index 000000000..dc303668e Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/10.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/2.paa b/Sources/epoch_code/Data/UI/health_parts/2.paa new file mode 100644 index 000000000..19dbcec7a Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/2.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/3.paa b/Sources/epoch_code/Data/UI/health_parts/3.paa new file mode 100644 index 000000000..d262947cc Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/3.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/4.paa b/Sources/epoch_code/Data/UI/health_parts/4.paa new file mode 100644 index 000000000..403796635 Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/4.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/5.paa b/Sources/epoch_code/Data/UI/health_parts/5.paa new file mode 100644 index 000000000..9153ab9a0 Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/5.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/6.paa b/Sources/epoch_code/Data/UI/health_parts/6.paa new file mode 100644 index 000000000..b305e5e22 Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/6.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/7.paa b/Sources/epoch_code/Data/UI/health_parts/7.paa new file mode 100644 index 000000000..b0b0ba022 Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/7.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/8.paa b/Sources/epoch_code/Data/UI/health_parts/8.paa new file mode 100644 index 000000000..07b37e7e9 Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/8.paa differ diff --git a/Sources/epoch_code/Data/UI/health_parts/9.paa b/Sources/epoch_code/Data/UI/health_parts/9.paa new file mode 100644 index 000000000..cd76bc9e4 Binary files /dev/null and b/Sources/epoch_code/Data/UI/health_parts/9.paa differ diff --git a/Sources/epoch_code/Data/UI/snap_ca.paa b/Sources/epoch_code/Data/UI/snap_ca.paa new file mode 100644 index 000000000..c2cade9cd Binary files /dev/null and b/Sources/epoch_code/Data/UI/snap_ca.paa differ diff --git a/Sources/epoch_code/Data/gender_selection.paa b/Sources/epoch_code/Data/gender_selection.paa new file mode 100644 index 000000000..b37928518 Binary files /dev/null and b/Sources/epoch_code/Data/gender_selection.paa differ diff --git a/Sources/epoch_code/System/Animal_brain.fsm b/Sources/epoch_code/System/Animal_brain.fsm index 8af1e5584..7557c5d7c 100644 --- a/Sources/epoch_code/System/Animal_brain.fsm +++ b/Sources/epoch_code/System/Animal_brain.fsm @@ -1,4 +1,4 @@ -/*%FSM*/ +/*%FSM*/ /*%FSM*/ /* item0[] = {"init",0,250,375.000000,-225.000000,475.000000,-175.000000,0.000000,"init"}; @@ -22,37 +22,41 @@ item17[] = {"Not_Too_Far",4,218,250.000000,325.000000,350.000000,375.000000,0.00 item18[] = {"Process_1",2,250,575.000000,250.000000,675.000000,300.000000,0.000000,"Process"}; item19[] = {"Fight",4,218,625.000000,325.000000,725.000000,375.000000,0.000000,"Fight"}; item20[] = {"Flight",4,218,500.000000,325.000000,600.000000,375.000000,0.000000,"Flight"}; -item21[] = {"Fight",2,4346,625.000000,425.000000,725.000000,475.000000,0.000000,"Fight"}; +item21[] = {"Fight",2,250,625.000000,425.000000,725.000000,475.000000,0.000000,"Fight"}; item22[] = {"Delete_1",1,250,675.000000,-25.000000,775.000000,25.000000,0.000000,"Delete"}; item23[] = {"Too_many",4,218,525.000000,-25.000000,625.000000,25.000000,0.000000,"Too many"}; +item24[] = {"IsNull",4,4314,525.000000,-125.000000,625.000000,-75.000000,0.000000,"IsNull"}; +item25[] = {"Exit_",1,250,675.000000,-125.000000,775.000000,-75.000000,0.000000,"" \n "Exit" \n ""}; link0[] = {0,1}; link1[] = {1,2}; link2[] = {2,6}; link3[] = {2,23}; -link4[] = {3,15}; -link5[] = {4,18}; -link6[] = {5,14}; -link7[] = {6,9}; -link8[] = {7,8}; -link9[] = {8,2}; -link10[] = {9,3}; -link11[] = {9,4}; -link12[] = {9,11}; -link13[] = {10,7}; -link14[] = {11,12}; -link15[] = {13,10}; -link16[] = {15,5}; -link17[] = {15,17}; -link18[] = {16,10}; -link19[] = {17,16}; -link20[] = {18,19}; -link21[] = {18,20}; -link22[] = {19,21}; -link23[] = {20,13}; -link24[] = {21,10}; -link25[] = {23,22}; -globals[] = {25.000000,1,0,0,0,640,480,1,60,6316128,1,65.053413,836.813538,684.337891,-110.918762,853,911,1}; -window[] = {2,-1,-1,-1,-1,753,25,1063,25,3,871}; +link4[] = {2,24}; +link5[] = {3,15}; +link6[] = {4,18}; +link7[] = {5,14}; +link8[] = {6,9}; +link9[] = {7,8}; +link10[] = {8,2}; +link11[] = {9,3}; +link12[] = {9,4}; +link13[] = {9,11}; +link14[] = {10,7}; +link15[] = {11,12}; +link16[] = {13,10}; +link17[] = {15,5}; +link18[] = {15,17}; +link19[] = {16,10}; +link20[] = {17,16}; +link21[] = {18,19}; +link22[] = {18,20}; +link23[] = {19,21}; +link24[] = {20,13}; +link25[] = {21,10}; +link26[] = {23,22}; +link27[] = {24,25}; +globals[] = {25.000000,1,0,0,0,640,480,1,62,6316128,1,65.053413,836.813538,420.713287,-149.285370,853,630,1}; +window[] = {2,-1,-1,-1,-1,884,156,1194,156,3,871}; *//*%FSM*/ class FSM { @@ -115,6 +119,16 @@ class FSM action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ + /*%FSM*/ + class IsNull + { + priority = 0.000000; + to="Exit_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isNull _animalAgent"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ /*%FSM*/ class Loop { @@ -396,13 +410,25 @@ class FSM }; }; /*%FSM*/ + /*%FSM*/ + class Exit_ + { + name = "Exit_"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ }; initState="init"; finalStates[] = { - "Dead" , - "Delete" , - "Delete_1" + "Dead", + "Delete", + "Delete_1", + "Exit_", }; }; /*%FSM*/ \ No newline at end of file diff --git a/Sources/epoch_code/System/Group_Leader_Brain.fsm b/Sources/epoch_code/System/Group_Leader_Brain.fsm index 3e53df11b..44b31c1b9 100644 --- a/Sources/epoch_code/System/Group_Leader_Brain.fsm +++ b/Sources/epoch_code/System/Group_Leader_Brain.fsm @@ -296,7 +296,7 @@ class FSM "" \n "_arrGarr = [];" \n "_garrCount = 0;" \n - "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n + "while {!((_nrBuild buildingPos _garrCount) isEqualTo [0,0,0])} do {" \n "_arrGarr pushBack _garrCount;" \n "_garrCount = _garrCount + 1;" \n "};"/*%FSM*/; @@ -372,7 +372,7 @@ class FSM "" \n "_arrGarr = [];" \n "_garrCount = 0;" \n - "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n + "while {!((_nrBuild buildingPos _garrCount) isEqualTo [0,0,0])} do {" \n "_arrGarr pushBack _garrCount;" \n "_garrCount = _garrCount + 1;" \n "};" \n diff --git a/Sources/epoch_code/System/Sapper_Brain.fsm b/Sources/epoch_code/System/Sapper_Brain.fsm index f819dd9ef..69cfa9267 100644 --- a/Sources/epoch_code/System/Sapper_Brain.fsm +++ b/Sources/epoch_code/System/Sapper_Brain.fsm @@ -1136,7 +1136,7 @@ class FSM "" \n "_nestFind = _nestFind + 1;" \n "_garrisonPos = getPos _nrBuild;" \n - "while {format [""%1"", _nrBuild buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n + "while {!((_nrBuild buildingPos _garrCount) isEqualTo [0,0,0])} do {" \n "_arrGarr pushBack _garrCount;" \n "_garrCount = _garrCount + 1;" \n "};" \n diff --git a/Sources/epoch_code/System/gender_selection.fsm b/Sources/epoch_code/System/gender_selection.fsm index ca1190468..a0e86f9d6 100644 --- a/Sources/epoch_code/System/gender_selection.fsm +++ b/Sources/epoch_code/System/gender_selection.fsm @@ -250,7 +250,7 @@ class FSM "player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n "player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n "player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n - "player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3])}];" \n + "player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable[""EPOCH_Locked"", false])}];" \n "player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n "player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; @@ -287,4 +287,4 @@ class FSM "END" }; }; -/*%FSM*/ \ No newline at end of file +/*%FSM*/ diff --git a/Sources/epoch_code/System/player_login.fsm b/Sources/epoch_code/System/player_login.fsm index fb72c4e23..aad55b99a 100644 --- a/Sources/epoch_code/System/player_login.fsm +++ b/Sources/epoch_code/System/player_login.fsm @@ -1,4 +1,4 @@ -/*%FSM*/ +/*%FSM*/ /*%FSM*/ /* item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"}; @@ -190,1208 +190,1298 @@ link97[] = {85,79}; link98[] = {86,16}; link99[] = {86,22}; link100[] = {87,31}; -globals[] = {25.000000,1,0,0,0,640,480,1,244,6316128,1,-506.837463,384.823669,1593.480103,946.069397,1212,880,1}; -window[] = {2,-1,-1,-1,-1,860,-1550,-510,130,3,1230}; +globals[] = {0.000000,0,0,0,0,640,480,1,244,6316128,1,-494.255402,984.732300,1761.360352,737.509033,585,832,1}; +window[] = {0,-1,-1,-1,-1,1079,713,2114,75,1,603}; *//*%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 - ""/*%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 + ""/*%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 + " waitUntil{!isNull (findDisplay 46)};" \n + " (findDisplay 46) displayAddEventHandler [""KeyDown"",""_this call EPOCH_KeyDown""];" \n + " (findDisplay 46) displayAddEventHandler [""KeyUp"",""_this call EPOCH_KeyUp""];" \n + "};" \n + "" \n + "3 fadeSound 1;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Finish!"";" \n + "};" \n + "" \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;" \n + "" \n + "player switchMove """";"/*%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 + "diag_log format [""(%1) %2"",diag_tickTime,_msg];" \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 + "" \n + """Loading Player Variables... Please wait!"" call Epoch_updateLoadingScreen;" \n + "" \n + "EPOCH_lastPlayerPos = getPosATL vehicle player;" \n + "" \n + "progressLoadingScreen 0.7;" \n + "" \n + "if (_debug) then {" \n + " diag_log ""EPOCH-LOGIN: Setup Player Variables"";" \n + "};" \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 + "Epoch_my_Group = [];" \n + "" \n + "EPOCH_checkPlayer_PVS = player;" \n + "publicVariableServer ""EPOCH_checkPlayer_PVS"";" \n + "" \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 = 78; + priority = 0.000000; + to="Process_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_checkPlayer_PVC"""/*%FSM*/; + action=/*%FSM*/"_newChar = EPOCH_checkPlayer_PVC;" \n + "EPOCH_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 + "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 = 69; + 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 + "diag_log format [""(%1) %2"",diag_tickTime,_msg];" \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;"/*%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 freshServer + { + itemno = 66; + priority = 0.000000; + to="Update_Loadingscreen"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"uiNamespace getVariable ['Epoch_freshServer', false]"/*%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"""/*%FSM*/; + action=/*%FSM*/"_serverUptime = EPOCH_SERVER;" \n + "EPOCH_SERVER = 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*/"player addEventHandler [""Respawn"", {(_this select 0) call EPOCH_clientRespawn}];" \n + "player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n + "player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n + "player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n + "player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable[""EPOCH_Locked"", false])}];" \n + "player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n + "player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];" \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_v2;" \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 (getposATL player)"/*%FSM*/; + action=/*%FSM*/"call compile _playerGroupOnline;"/*%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, 4];" \n + "" \n + "" \n + """Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n + "progressLoadingScreen 0.6;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait_mag_count_m + { + itemno = 61; + priority = 0.000000; + to="Setup_Player_Obj"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_magCount == count (magazines _playerObject)"/*%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*/"{!isnull _x} count ((uinamespace getvariable ""loading_displays"") - [finddisplay 18]) == 0"/*%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 Update_Loadingscreen + { + name = "Update_Loadingscreen"; + itemno = 67; + init = /*%FSM*/"uiNamespace setVariable ['Epoch_freshServer', false];" \n + "" \n + """Server initializing... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class true + { + itemno = 68; + priority = 0.000000; + to="Check_Server_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Player_Setup + { + name = "ERROR_Player_Setup"; + itemno = 70; + 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 = 72; + 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 = 73; + 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 = 75; + 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 = 80; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class new_character + { + itemno = 77; + 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 = 79; + 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 = 81; + init = /*%FSM*/"createdialog ""SelectGender"";"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Gender_Selected + { + itemno = 83; + priority = 10.000000; + to="Send_character_s"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!isNil ""EPOCH_PlayerIsMale"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Timeout + { + itemno = 84; + 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 = 82; + 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 = 85; + init = /*%FSM*/"startLoadingScreen ["""",""EpochLoadingScreen""];" \n + """Gender Selected... Please wait!"" call Epoch_updateLoadingScreen;" \n + "" \n + "" \n + "EPOCH_selectedGender_PVS = [player,EPOCH_PlayerIsMale];" \n + "publicVariableServer ""EPOCH_selectedGender_PVS"";" \n + "EPOCH_selectedGender_PVS = nil;" \n + "EPOCH_PlayerIsMale = nil;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class load_old_charact + { + itemno = 79; + 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 = 86; + 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 ""EPOCH_C_SET"""/*%FSM*/; + action=/*%FSM*/"_array = EPOCH_C_SET;" \n + "EPOCH_C_SET = nil;" \n + "_playerObject = _array deleteAt 0;" \n + "_playerVariables = _array deleteAt 0;" \n + "_currentWeapon = _array deleteAt 0;" \n + "_magCount = _array deleteAt 0;" \n + "Epoch_my_GroupUID = _array deleteAt 0;" \n + "Epoch_canBeRevived = _array deleteAt 0;" \n + "Epoch_personalToken = _array deleteAt 0;" \n + "reverse _serverUptime;" \n + "_serverUptime pushBack (_array deleteAt 0);" \n + "reverse _serverUptime;" \n + "_serverUptime call EPOCH_client_publicEH;" \n + "_playerGroupOnline = _array deleteAt 0;" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ERROR_Server_not_4 + { + name = "ERROR_Server_not_4"; + itemno = 87; + 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 - " waitUntil{!isNull (findDisplay 46)};" \n - " (findDisplay 46) displayAddEventHandler [""KeyDown"",""_this call EPOCH_KeyDown""];" \n - "};" \n - "" \n - "3 fadeSound 1;" \n - "" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Finish!"";" \n - "};" \n - "" \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;" \n - "" \n - "player switchMove """";"/*%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 - "diag_log format [""(%1) %2"",diag_tickTime,_msg];" \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 - "" \n - """Loading Player Variables... Please wait!"" call Epoch_updateLoadingScreen;" \n - "" \n - "EPOCH_lastPlayerPos = getPosATL vehicle player;" \n - "" \n - "progressLoadingScreen 0.7;" \n - "" \n - "if (_debug) then {" \n - " diag_log ""EPOCH-LOGIN: Setup Player Variables"";" \n - "};" \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 - "Epoch_my_Group = [];" \n - "" \n - "EPOCH_checkPlayer_PVS = player;" \n - "publicVariableServer ""EPOCH_checkPlayer_PVS"";" \n - "" \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 ""EPOCH_checkPlayer_PVC"""/*%FSM*/; - action=/*%FSM*/"_newChar = EPOCH_checkPlayer_PVC;" \n - "EPOCH_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 - "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 - "};" \n - "diag_log format [""(%1) %2"",diag_tickTime,_msg];" \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;"/*%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 freshServer - { - priority = 0.000000; - to="Update_Loadingscreen"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"uiNamespace getVariable ['Epoch_freshServer', false]"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Server_Ready - { - priority = 0.000000; - to="Check_Server"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!isNil ""EPOCH_SERVER"""/*%FSM*/; - action=/*%FSM*/"_serverUptime = EPOCH_SERVER;" \n - "EPOCH_SERVER = 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*/"player addEventHandler [""Respawn"", {(_this select 0) call EPOCH_clientRespawn}];" \n - "player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n - "player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n - "player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n - "player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3])}];" \n - "player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n - "player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];" \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 (getposATL player)"/*%FSM*/; - action=/*%FSM*/"call compile _playerGroupOnline;"/*%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, 4];" \n - "" \n - "" \n - """Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n - "progressLoadingScreen 0.6;" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class Wait_mag_count_m - { - priority = 0.000000; - to="Setup_Player_Obj"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_magCount == count (magazines _playerObject)"/*%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*/"{!isnull _x} count ((uinamespace getvariable ""loading_displays"") - [finddisplay 18]) == 0"/*%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 Update_Loadingscreen - { - name = "Update_Loadingscreen"; - init = /*%FSM*/"uiNamespace setVariable ['Epoch_freshServer', false];" \n - "" \n - """Server initializing... Please wait!"" call Epoch_updateLoadingScreen;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class true - { - priority = 0.000000; - to="Check_Server_1"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%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 - "" \n - "EPOCH_selectedGender_PVS = [player,EPOCH_PlayerIsMale];" \n - "publicVariableServer ""EPOCH_selectedGender_PVS"";" \n - "EPOCH_selectedGender_PVS = nil;" \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 ""EPOCH_C_SET"""/*%FSM*/; - action=/*%FSM*/"_array = EPOCH_C_SET;" \n - "EPOCH_C_SET = nil;" \n - "_playerObject = _array deleteAt 0;" \n - "_playerVariables = _array deleteAt 0;" \n - "_currentWeapon = _array deleteAt 0;" \n - "_magCount = _array deleteAt 0;" \n - "Epoch_my_GroupUID = _array deleteAt 0;" \n - "Epoch_canBeRevived = _array deleteAt 0;" \n - "Epoch_personalToken = _array deleteAt 0;" \n - "reverse _serverUptime;" \n - "_serverUptime pushBack (_array deleteAt 0);" \n - "reverse _serverUptime;" \n - "_serverUptime call EPOCH_client_publicEH;" \n - "_playerGroupOnline = _array 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 +/*%FSM*/ diff --git a/Sources/epoch_code/compile/EPOCH_consumeItem.sqf b/Sources/epoch_code/compile/EPOCH_consumeItem.sqf index b9b73f87a..03ad65683 100644 --- a/Sources/epoch_code/compile/EPOCH_consumeItem.sqf +++ b/Sources/epoch_code/compile/EPOCH_consumeItem.sqf @@ -94,11 +94,8 @@ switch _interactOption do { if (_buildClass != "") then { _isStorage = getNumber(configfile >> "CfgMagazines" >> _item >> "isStorage"); - _isOk = if (_isStorage == 1) then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 }; + _isOk = if (_isStorage == 1 || _buildClass isKindOf "Secure_Storage_Temp") then { EPOCH_StorageSlotsCount > 0 } else { EPOCH_BuildingSlotCount > 0 }; - if (_buildClass isKindOf "Secure_Storage_Temp") then { - _isOk = (EPOCH_StorageSlotsCount > 0 && EPOCH_BuildingSlotCount > 0); - }; if (isNil "EPOCH_simulSwap_Lock") then { if !(isNil "_isOk") then { if (_isOk) then { diff --git a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf index 96607614c..481e7616f 100644 --- a/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf +++ b/Sources/epoch_code/compile/EPOCH_onEachFrame.sqf @@ -1,4 +1,3 @@ - if (EPOCH_velTransform) then { if (EPOCH_playerEnergy > 0) then { _pos1 = getPosASL EPOCH_target; @@ -23,7 +22,6 @@ if (EPOCH_velTransform) then { EPOCH_velTransform = false; }; }; - if (!isNull EPOCH_currentTarget && vehicle player == player) then { _currentTarget = EPOCH_currentTarget; @@ -32,20 +30,27 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { _stability = 0; _color = [1, 1, 1, 0.7]; - _text = ""; + _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 { case 0: { - _text = "Press (Inventory)"; - _stability = 100 - round(damage _currentTarget) * 10; + _stability = 100 - round(damage _currentTarget * 100); _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; + _text = "Press (Inventory)"; + + if (_stability < 50) then { + _color = [1, 0.5, 0, 0.7]; + if (_stability < 25) then { + _color = [1, 0, 0, 0.7]; + }; + }; }; case 1: { - _text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Enable Build - Press (1)" }]; - _stability = _currentTarget getVariable["stability", 100]; + _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"; if (_stability < 50) then { @@ -57,8 +62,8 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { }; case 2: { if (alive _currentTarget) then{ - _text = format["%1 - Press (Ctrl+T)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }]]; - _stability = 100 - round(damage _currentTarget) * 10; + _text = format["%1 - Press (Ctrl+%2)", if (isStreamFriendlyUIEnabled) then[{"Player"}, { name _currentTarget }],EPOCH_keysAcceptTrade call BIS_fnc_keyCode]; + _stability = 100 - round(damage _currentTarget * 100); _icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa"; if (_stability < 50) then{ @@ -69,19 +74,20 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { }; } else { - _text = "Press (Inventory)"; + //_text = "Press (Inventory)"; _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa"; }; }; case 3: { if (!alive _currentTarget && _distance < 2) then{ - _text = "Gut Animal - Press (Inventory)"; + _text = format ["Gut Animal - %1",_text]; _icon = "\x\addons\a3_epoch_code\Data\UI\ui_crossbones_ca.paa"; }; }; case 4: { - _text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Press (Inventory)" }]; - _stability = _currentTarget getVariable["stability", 100]; + //_text = if (EPOCH_buildMode > 0) then[{"Press (Space)"}, { "Press (Inventory)" }]; + _text = if (EPOCH_buildMode > 0) then[{_text}, { format ["Press (%1) or (Inventory)",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"; if (_stability < 50) then{ @@ -94,7 +100,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { }; if (!isNull EPOCH_stabilityTarget) then { - if (cursorTarget != EPOCH_stabilityTarget) then { + if (([10] call EPOCH_fnc_cursorTarget) != EPOCH_stabilityTarget) then { EPOCH_stabilityTarget = objNull; } else { @@ -120,7 +126,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then { _pos = visiblePositionASL _currentTarget; _pos set[2, (_currentTarget modelToWorld[0, 0, 0]) select 2]; - _size = 3; + _size = 2.5; drawIcon3D[format[_icon, _stability], _color, _pos, _size, _size, 0, _text, 0, _size / 60, "PuristaMedium"]; }; } @@ -128,6 +134,7 @@ else { EPOCH_stabilityTarget = objNull; }; + if (EPOCH_drawIcon3d) then { { if (!isPlayer _x) then { @@ -146,6 +153,17 @@ if (EPOCH_drawIcon3d) then { }; }forEach EPOCH_arr_countdown; }; + +{ + _distance = player distance _x; + if (_distance < 9) then { + _pos = _x; + _color = [1, 1, 1, 0.7]; + _size = 1; + drawIcon3D["x\addons\a3_epoch_code\Data\UI\snap_ca.paa", _color, _pos, _size, _size, 0, "", 1, _size / 60, "PuristaMedium"]; + }; +}forEach EPOCH_arr_snapPoints; + { if (!isNull _x) then { _pos = visiblePositionASL _x; diff --git a/Sources/epoch_code/compile/building/EPOCH_QuickUpgrade.sqf b/Sources/epoch_code/compile/building/EPOCH_QuickUpgrade.sqf deleted file mode 100644 index b3cb5611b..000000000 --- a/Sources/epoch_code/compile/building/EPOCH_QuickUpgrade.sqf +++ /dev/null @@ -1,35 +0,0 @@ -_target = param [0,objNull]; -if (!isNull _target) then { - - _targetClass = typeOf _target; - - _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - - _recipes = getArray(_config >> _targetClass >> "upgradeBuilding"); - if !(_recipes isEqualTo []) then { - - createDialog "QuickUpgrade"; - { - _upgradeClass = _x select 0; - _upgradeRecipe = _x select 1; - _index = lbAdd[1500, getText(configfile >> "CfgVehicles" >> _upgradeClass >> "DisplayName")]; - lbSetData[1500, _index, _upgradeClass]; - lbSetValue[1500, _index, _forEachIndex]; - - _toolTip = ""; - { - _recipeClass = _x; - _recipeQty = 1; - if (typeName _recipeClass == "ARRAY") then { - _recipeClass = _x select 0; - _recipeQty = _x select 1; - }; - _toolTip = _toolTip + format["%1 x %2, ",_recipeQty,getText(configfile >> "CfgMagazines" >> _recipeClass >> "DisplayName")]; - } forEach _upgradeRecipe; - lbSetTooltip [1500, _index, _toolTip]; - - } foreach _recipes; - - }; - -}; diff --git a/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf b/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf new file mode 100644 index 000000000..27bea9905 --- /dev/null +++ b/Sources/epoch_code/compile/building/EPOCH_checkBuild.sqf @@ -0,0 +1,23 @@ +_out = [false, false, false]; + +if !(isNil "EPOCH_simulSwap_Lock") exitWith{ _out }; +if !(isNull EPOCH_Target) exitWith{ _out }; + +params ["_object"]; + +if (isNull _object) exitWith{ _out }; +if ((player distance _object) > 9) exitWith { _out }; + +if !(EPOCH_buildMode > 0) exitWith {_out}; +if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["Need energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; _out }; + +_objType = typeOf _object; +_config = 'CfgBaseBuilding' call EPOCH_returnConfig; + +_out = +[ + !(getArray(_config >> _objType >> "upgradeBuilding") isEqualTo []), + !(getArray(_config >> _objType >> "removeParts") isEqualTo []), + (_object isKindOf "ThingX") +]; +_out diff --git a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf index ea763734f..6d5a8aa09 100644 --- a/Sources/epoch_code/compile/building/EPOCH_countdown.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_countdown.sqf @@ -39,16 +39,18 @@ if (!isNull _this) then { EPOCH_arr_countdown = EPOCH_arr_countdown - [_this]; EPOCH_drawIcon3d = !(EPOCH_arr_countdown isEqualTo []); - - if (typeOf _this == "Fireplace_SIM_EPOCH") then { + _objClass = typeOf _this; + // Spawn temporary static item insead of saving. + if (getNumber(configfile >> "CfgVehicles" >> _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"]; _newObj setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; _newObj setposATL(_worldspace select 0); + // proceed to send save to server } else { if (_saveCheck) then { EPOCH_SAVEBUILD = [_this, player, Epoch_personalToken]; diff --git a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTarget.sqf b/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTarget.sqf deleted file mode 100644 index 8d2859008..000000000 --- a/Sources/epoch_code/compile/building/EPOCH_fnc_SelectTarget.sqf +++ /dev/null @@ -1,32 +0,0 @@ -private ["_dt","_object","_objType","_dialog","_handled","_config","_upgrade","_remove"]; - -if !(isNil "EPOCH_simulSwap_Lock") exitWith{ false }; -if !(isNull EPOCH_Target) exitWith{ false }; -if (EPOCH_playerEnergy <= 0) exitWith{ _dt = ["Need energy", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; false }; - -_object = _this; - -if (isNull _object) exitWith{ false }; -if ((player distance _object) > 9) exitWith { false }; - -_objType = typeOf _object; - -_dialog = "InteractBaseBuilding"; -_handled = createdialog _dialog; - -_config = 'CfgBaseBuilding' call EPOCH_returnConfig; - -_upgrade = getArray(_config >> _objType >> "upgradeBuilding"); -if (_upgrade isEqualTo[]) then{ - ctrlEnable[2400, false]; -}; -_remove = getArray(_config >> _objType >> "removeParts"); -if (_remove isEqualTo[]) then{ - ctrlEnable[2401, false]; -}; -// disable Move option if not SIM -if !(_object isKindOf "ThingX") then{ - ctrlEnable[2402, false]; -}; - -true diff --git a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf index 2daef10fd..54db82849 100644 --- a/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_maintainIT.sqf @@ -1,18 +1,37 @@ +if !(isNil "EPOCH_maintainLockout") exitWith {_dt = ["Already Maintaining a base.", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;}; if (EPOCH_playerCrypto > 0) then { _config = "CfgEpochClient" call EPOCH_returnConfig; _buildingJammerRange = getNumber(_config >> "buildingJammerRange"); if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; - _maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Secure_Storage_Proxy"], _buildingJammerRange]; + _maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange]; + if (_maintainCount > 0) then { - if (EPOCH_playerCrypto < _maintainCount) then { - _maintainCount = EPOCH_playerCrypto; - }; + if (EPOCH_playerCrypto < _maintainCount) then { + _maintainCount = EPOCH_playerCrypto; + }; + + _rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5]; + [_this modelToWorld [0,0,0.2],20,"x\addons\a3_epoch_code\Data\UI\buttons\timer.paa", "Maintaining",60,_rnd] call epoch_gui3dWorldPos; + + EPOCH_maintainLockout = true; - EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken]; - publicVariableServer "EPOCH_MAINTBUILD"; + EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken]; + publicVariableServer "EPOCH_MAINTBUILD"; - _dt = [format["Cost %1 Krypto to maintain base.", _maintainCount], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; + [_rnd,_maintainCount] spawn { + params ["_rnd","_maintainCount"]; + uiSleep _maintainCount; + missionNamespace setVariable [_rnd,false]; + uiSleep 1; + missionNamespace setVariable [_rnd,nil]; + EPOCH_maintainLockout = nil; + }; + + _dt = [format["Cost %1 Krypto to maintain base.", _maintainCount], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; + } else { + _dt = ["Nothing needs Maintaining", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; + }; } else { _dt = ["You need Krypto to maintain a base.", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf index 96e824fb5..71f6bfbc5 100644 --- a/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_staticMove.sqf @@ -21,6 +21,8 @@ if (_energyCost == 0) then { _class = getText(configfile >> "cfgVehicles" >> _objType >> "GhostPreview"); _maxHeight = getNumber(configfile >> "cfgVehicles" >> _objType >> "maxHeight"); _simulClass = getText(configFile >> "CfgVehicles" >> _objType >> "simulClass"); +_snapChecks = getArray(configFile >> "CfgSnapChecks" >> _objType >> "nails"); +diag_log format["DEBUG: _snapChecks %1",_snapChecks]; _maxSnapDistance = 1; _lastCheckTime = diag_tickTime; _stabilityCheck = false; @@ -71,6 +73,7 @@ if (_class != "") then { _isSnap = false; _EPOCH_1 = diag_tickTime; + _EPOCH_2 = diag_tickTime; _nearestObjects = []; while {EPOCH_target == _currentTarget} do { @@ -109,6 +112,13 @@ if (_class != "") then { EPOCH_target attachTo[player]; }; + if (EPOCH_space) then { + _dir2 = [vectorDir player, EPOCH_buildDirection] call EPOCH_returnVector; + _up2 = (vectorUp player); + EPOCH_space = false; + EPOCH_target setVectorDirAndUp [_dir2,_up2]; + }; + { _nearestObject = _x; if !(isNull EP_snap) then { @@ -129,6 +139,7 @@ if (_class != "") then { _baselineSnapPos = _nearestObject modelToWorldVisual [0,0,0]; if (EPOCH_buildMode == 1) then { + { if (_x in _allowedSnapPoints) then { _pOffset = _nearestObject selectionPosition _x; @@ -231,10 +242,31 @@ if (_class != "") then { _currentTarget setVectorDirAndUp[_dir2, (vectorUp _nearestObject)]; _currentTarget setposATL _snapPosition; + + if ((diag_tickTime - _EPOCH_2) > 2) then { + _EPOCH_2 = diag_tickTime; + _arr_snapPoints = []; + EPOCH_arr_snapPoints = []; + { + _pos1_snap = _currentTarget modelToWorldVisual (_x select 0); + _pos2_snap = _currentTarget modelToWorldVisual (_x select 1); + _ins = lineIntersectsSurfaces [AGLToASL _pos1_snap, AGLToASL _pos2_snap,player,_currentTarget,true,1,"VIEW","FIRE"]; + if (count _ins > 0) then { + if (surfaceIsWater _snapPosition) then { + _arr_snapPoints pushBack (_ins select 0 select 0); + } else { + _arr_snapPoints pushBack ASLToATL(_ins select 0 select 0); + }; + }; + if (count _arr_snapPoints >= 2) exitWith { EPOCH_arr_snapPoints = _arr_snapPoints; } + } forEach _snapChecks; + }; + }; } else { + EPOCH_arr_snapPoints = []; if !(attachedObjects player isEqualTo[]) then { _offSet = [EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET]; _pos1 = player modelToWorldVisual _offSet; @@ -252,12 +284,16 @@ if (_class != "") then { if ((diag_tickTime - _EPOCH_1) > 1) then { _EPOCH_1 = diag_tickTime; - _nearestObjects = nearestObjects[EPOCH_target, _allowedSnapObjects, 12]; - EPOCH_playerEnergy = (EPOCH_playerEnergy - _energyCost) max 0; + if !(isNull EPOCH_target) then { + _nearestObjects = nearestObjects[EPOCH_target, _allowedSnapObjects, 12]; + EPOCH_playerEnergy = (EPOCH_playerEnergy - _energyCost) max 0; + }; }; }; + EPOCH_arr_snapPoints = []; + { detach _x; } forEach attachedObjects player; @@ -282,37 +318,28 @@ if (_class != "") then { _offsetZPos = [_currentPos select 0, _currentPos select 1, (_currentPos select 2) - 0.5]; if !(terrainIntersect[_currentPos, _offsetZPos]) then { - // check below for static object - if (lineintersectsobjs[ATLtoASL _currentPos, ATLtoASL _offsetZPos, _currentTarget, objNull, false, 2] isEqualTo[]) then { - - _currentDir = getDir _currentTarget; - _objSize = sizeOf _objType / 3.5; - _numberOfContacts = 0; - { - // check all four sides (must have two or more) - if !(lineintersectsobjs[ATLtoASL _currentPos, ATLtoASL([_currentTarget, _objSize, _currentDir + _x] call BIS_fnc_relPos), _currentTarget, objNull, false, 2] isEqualTo[]) then { - _numberOfContacts = _numberOfContacts + 1; - }; - } forEach[0, 90, 180, 270]; - - if (_numberOfContacts < 2) then { - - // TODO: foundations need to be handled - - // change to sim - _worldspace = [getposATL _currentTarget, vectordir _currentTarget, vectorup _currentTarget]; - - deleteVehicle _currentTarget; - - _currentTarget = createVehicle[_simulClass, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; - _currentTarget setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; - _currentTarget setposATL(_worldspace select 0); - - }; + _numberOfContacts = 0; + { + _pos1_snap = _currentTarget modelToWorldVisual (_x select 0); + _pos2_snap = _currentTarget modelToWorldVisual (_x select 1); + _ins = lineIntersectsSurfaces [AGLToASL _pos1_snap, AGLToASL _pos2_snap,player,_currentTarget,true,1,"VIEW","FIRE"]; + if (count _ins > 0) then { + _numberOfContacts = _numberOfContacts + 1; + }; + if (_numberOfContacts >= 2) exitWith {} + } forEach _snapChecks; + + if (_numberOfContacts < 2) then { + // TODO: foundations need to be handled + // change to sim + _worldspace = [getposATL _currentTarget, vectordir _currentTarget, vectorup _currentTarget]; + deleteVehicle _currentTarget; + _currentTarget = createVehicle[_simulClass, (_worldspace select 0), [], 0, "CAN_COLLIDE"]; + _currentTarget setVectorDirAndUp[_worldspace select 1, _worldspace select 2]; + _currentTarget setposATL(_worldspace select 0); }; }; }; - _currentTarget spawn EPOCH_countdown; }; }; diff --git a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf index 24539ebb0..6d25bff65 100644 --- a/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf +++ b/Sources/epoch_code/compile/building/EPOCH_upgradeBUILDv2.sqf @@ -1,5 +1,8 @@ -if (isNull _this) exitWith{ false }; _return = false; +_object = param [0,objNull,[objNull]]; +_index = param [1,-1,[0]]; //EPOCH_UpgradeIndex +if !(_index isEqualTo -1) then {Epoch_upgradeIndex = _index}; +if (isNull _object) exitWith {false}; _buildingAllowed = true; _ownedJammerExists = false; @@ -14,19 +17,7 @@ if (_buildingCountLimit == 0) then { _buildingCountLimit = 200; }; EPOCH_buildOption = 1; -_object = _this; -// get index from UI -_index = lbCurSel 1500; - -if (isNil "EPOCH_UpgradeIndex") then { - EPOCH_UpgradeIndex = 0; -}; -if (_index != -1) then { - // close UI - closeDialog 0; - EPOCH_UpgradeIndex = _index; -}; // check if another player has target _targeter = _object getVariable["last_targeter", objNull]; @@ -41,10 +32,6 @@ if (_stability > 0) exitWith{ }; }; - - - - _jammer = nearestObjects[player, ["PlotPole_EPOCH"], _buildingJammerRange]; if !(_jammer isEqualTo[]) then { @@ -66,16 +53,16 @@ if !(_jammer isEqualTo[]) then { }; if !(_buildingAllowed)exitWith{ false }; -if (_this isKindOf "Constructions_static_F") then { +if (_object isKindOf "Constructions_static_F") then { // take upgrade item from player here _config = 'CfgBaseBuilding' call EPOCH_returnConfig; - _upgrades = getArray(_config >> (typeOf _this) >> "upgradeBuilding"); + _upgrades = getArray(_config >> (typeOf _object) >> "upgradeBuilding"); if !(_upgrades isEqualTo []) then { // get selected upgrade - _upgrade = _upgrades param [EPOCH_UpgradeIndex,[]]; + _upgrade = _upgrades param [Epoch_upgradeIndex,[]]; _upgradeParts = _upgrade select 1; @@ -112,8 +99,9 @@ if (_this isKindOf "Constructions_static_F") then { if (_canUpgradePartCount == _removedPartCount) then { // send to server for upgrade - EPOCH_UPBUILD = [_this,player,EPOCH_UpgradeIndex,Epoch_personalToken]; + EPOCH_UPBUILD = [_object,player,Epoch_upgradeIndex,Epoch_personalToken]; publicVariableServer "EPOCH_UPBUILD"; + Epoch_upgradeIndex = nil; _return = true; _dt = ["Upgraded", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; }; diff --git a/Sources/epoch_code/compile/building/staticMoveV2.sqf b/Sources/epoch_code/compile/building/staticMoveV2.sqf deleted file mode 100644 index 4528f3967..000000000 --- a/Sources/epoch_code/compile/building/staticMoveV2.sqf +++ /dev/null @@ -1,137 +0,0 @@ -EPOCH_buildClasses = ["Land_Obstacle_Bridge_F", - -"Land_Shoot_House_Wall_F", -"Land_Shoot_House_Wall_Stand_F", -"Land_Shoot_House_Wall_Crouch_F", -"Land_Shoot_House_Wall_Prone_F", -"Land_Shoot_House_Wall_Long_F", -"Land_Shoot_House_Wall_Long_Stand_F", -"Land_Shoot_House_Wall_Long_Crouch_F", -"Land_Shoot_House_Wall_Long_Prone_F", -"Land_Shoot_House_Corner_F", -"Land_Shoot_House_Corner_Stand_F", -"Land_Shoot_House_Corner_Crouch_F", -"Land_Shoot_House_Corner_Prone_F", -"Land_Shoot_House_Panels_F", -"Land_Shoot_House_Panels_Crouch_F", -"Land_Shoot_House_Panels_Prone_F", -"Land_Shoot_House_Panels_Vault_F", -"Land_Shoot_House_Panels_Window_F", -"Land_Shoot_House_Panels_Windows_F", -"Land_Shoot_House_Tunnel_F", -"Land_Shoot_House_Tunnel_Stand_F", -"Land_Shoot_House_Tunnel_Crouch_F", -"Land_Shoot_House_Tunnel_Prone_F", - - -"Land_Obstacle_RunAround_F","Land_Obstacle_Saddle_F","Land_RampConcrete_F","Land_RampConcreteHigh_F","Land_GH_Stairs_F","Land_Billboard_F","Land_HBarrier_1_F","Land_HBarrier_3_F","Land_HBarrier_5_F","Land_Razorwire_F","Land_HBarrierWall6_F","WoodFloor_EPOCH","WoodLargeWall_EPOCH","Land_BagFence_Long_F","Land_BagFence_Corner_F","Land_BagFence_End_F","Land_BagFence_Round_F","Land_BagFence_Short_F"]; -EPOCH_buildClassesCount = count EPOCH_buildClasses - 1; -Epoch_selectedBuildClasIndex = 0; -EPOCH_selectedBuildClass = EPOCH_buildClasses select 0; - -EPOCH_buildWorldspace = [[0,0,0],[0,0,0],[0,0,0]]; -EPOCH_KeyDownFunctionhandler = { - _dikCode = _this select 1; - _shift = _this select 2; - _ctrl = _this select 3; - _alt = _this select 4; - - switch (_dikCode) do { - case 0x39 : { - _worldspace = EPOCH_buildWorldspace; - _newObj = EPOCH_selectedBuildClass createVehicle (_worldspace select 0); - _newObj setVectorDirAndUp [_worldspace select 1,_worldspace select 2]; - _newObj setposASL (_worldspace select 0); - _handled = true; - }; - case 0xC9 : { - Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex + 1) min EPOCH_buildClassesCount) max 0; - EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex; - - if !(isNull EPOCH_currentBuildObj) then { - deleteVehicle EPOCH_currentBuildObj; - EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0]; - EPOCH_currentBuildObj disableCollisionWith player; - EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"]; - }; - - hint EPOCH_selectedBuildClass; - _handled = true; - }; - case 0xD1 : { - Epoch_selectedBuildClasIndex = ((Epoch_selectedBuildClasIndex - 1) min EPOCH_buildClassesCount) max 0; - EPOCH_selectedBuildClass = EPOCH_buildClasses select Epoch_selectedBuildClasIndex; - hint EPOCH_selectedBuildClass; - - if !(isNull EPOCH_currentBuildObj) then { - deleteVehicle EPOCH_currentBuildObj; - EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0]; - EPOCH_currentBuildObj disableCollisionWith player; - EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"]; - }; - - _handled = true; - }; - }; - _handled -}; - - -[] spawn { - (findDisplay 46) displayRemoveAllEventHandlers "KeyDown"; - (findDisplay 46) displayAddEventHandler["KeyDown",{_this call EPOCH_KeyDownFunctionhandler}]; -}; - -EPOCH_currentBuildObj = EPOCH_selectedBuildClass createVehicle [0,0,0]; -EPOCH_currentBuildObj disableCollisionWith player; -EPOCH_currentBuildObj setObjectTextureGlobal [0, "#(rgb,8,8,3)color(0,0,1,1)"]; - -onEachFrame { - _ins = lineIntersectsSurfaces [AGLToASL positionCameraToWorld [0,0,0],AGLToASL positionCameraToWorld [0,0,10],player,EPOCH_currentBuildObj]; - if (count _ins == 0) exitWith {EPOCH_currentBuildObj setPosASL [0,0,0]}; - - _intersectObj = (_ins select 0 select 2); - if (isNull _intersectObj) then {_intersectObj = player}; - EPOCH_currentBuildObj setVectorDirAndUp [vectordir _intersectObj,(_ins select 0 select 1)]; - EPOCH_currentBuildObj setPosASL (_ins select 0 select 0); - EPOCH_buildWorldspace = [(_ins select 0 select 0),vectordir _intersectObj,(_ins select 0 select 1)]; - - _currentPos = (_ins select 0 select 0); - _numberOfContacts = 0; - - _currentDir = direction EPOCH_currentBuildObj; - - _bbr = boundingBoxReal EPOCH_currentBuildObj; - _p1 = _bbr select 0; - _p2 = _bbr select 1; - _maxWidth = abs ((_p2 select 0) - (_p1 select 0)) / 2; - _maxLength = abs ((_p2 select 1) - (_p1 select 1)) / 2; - _maxHeight = abs ((_p2 select 2) - (_p1 select 2)) / 2; - - { - _pos1 = EPOCH_currentBuildObj modelToWorld [0,0,_maxHeight]; - _pos2 = EPOCH_currentBuildObj modelToWorld _x; - _ins = lineIntersectsSurfaces [AGLToASL _pos1,AGLToASL _pos2,player,EPOCH_currentBuildObj]; - _color = [0,0,1,1]; - - if (count _ins == 0) then { - - - _color = [0,0,1,1]; - drawIcon3D ["a3\modules_f\data\iconunlock_ca.paa", [1,1,1,1], _pos2, 1, 1, 45, "", 1, 0.05, "TahomaB"]; - - - } else { - _numberOfContacts = _numberOfContacts + 1; - drawIcon3D ["a3\modules_f\data\iconlock_ca.paa", [1,1,1,1], ASLToATL (_ins select 0 select 0), 1, 1, 45, "Snap", 1, 0.05, "TahomaB"]; - _color = [1,0,0,1]; - }; - - drawLine3D [ - _pos1, - _pos2, - _color - ]; - - } forEach[[_maxWidth,0,_maxHeight], [0,_maxLength,_maxHeight], [-_maxWidth,0,_maxHeight], [0,-_maxLength,_maxHeight], [0,0,-_maxHeight]]; -}; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf b/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf index 32fd41750..c2bb720d7 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf @@ -11,10 +11,10 @@ if (isClass(_config)) then{ _finalconfig = _config >> (_this select 1); if (configName(_finalconfig) == (_this select 1)) then{ _varData = switch (typeName _defaultData) do { - case "SCALAR": {getNumber _finalconfig}; - case "BOOL": {(getNumber _finalconfig) == 1}; - case "ARRAY": {getArray _finalconfig}; - case "STRING": {getText _finalconfig}; + case "SCALAR": {if (isNumber (_finalconfig)) then { getNumber _finalconfig } else {_defaultData} }; + case "BOOL": {if (isText (_finalconfig)) then { (getText _finalconfig) isEqualTo "true" } else {_defaultData} }; + case "ARRAY": {if (isArray (_finalconfig)) then { getArray _finalconfig } else {_defaultData} }; + case "STRING": {if (isText (_finalconfig)) then { getText _finalconfig } else {_defaultData} }; default {_defaultData}; }; } else { diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf index b34933c75..4a9676ca1 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_Weather.sqf @@ -1,4 +1,9 @@ private ["_warming","_isNearFire","_airTemp","_waterTemp","_playerPosATL"]; + +if (isNil "EPOCH_CURRENT_WEATHER") then { + EPOCH_CURRENT_WEATHER = 75; +}; + _airTemp = EPOCH_CURRENT_WEATHER; _waterTemp = EPOCH_CURRENT_WEATHER/2; _warming = true; diff --git a/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf b/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf new file mode 100644 index 000000000..441fa355c --- /dev/null +++ b/Sources/epoch_code/compile/functions/EPOCH_fnc_cursorTarget.sqf @@ -0,0 +1,4 @@ +params [["_distance",10], ["_lod1", "VIEW"], ["_lod2","FIRE"], ["_sort",true]]; +_ins = lineIntersectsSurfaces [AGLToASL positionCameraToWorld [0,0,0],AGLToASL positionCameraToWorld [0,0,_distance],player,objNull,_sort,1,_lod1,_lod2]; +if (_ins isEqualTo []) exitWith { objNull }; +(_ins select 0 param [3,objNull]) diff --git a/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf b/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf index dddcec138..188bc59e6 100644 --- a/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf +++ b/Sources/epoch_code/compile/functions/EPOCH_pushCustomVar.sqf @@ -5,28 +5,19 @@ _EPOCH_lastSave = missionNamespace getVariable["EPOCH_lastSave", diag_tickTime]; if ((diag_tickTime - _EPOCH_lastSave) >= _time) then { - missionNamespace setVariable["EPOCH_lastSave", diag_tickTime]; + // manually set hitpoints array + EPOCH_playerHitPoints = ((getAllHitPointsDamage player) param [2,[]]); + + // Get all custom variables + _customVars = []; + _customVarsInit = ["CfgEpochClient", "customVarsDefaults", missionNamespace getVariable["EPOCH_customVarsDefaults", []]] call EPOCH_fnc_returnConfigEntryV2; + { + _customVars pushBack (missionNamespace getVariable format["EPOCH_player%1",_x select 0]); + } forEach _customVarsInit; - missionNamespace setVariable ["EPOCH_pushPlayer_PVS", - [ player, - [ - missionNamespace getVariable "EPOCH_playerTemp", - missionNamespace getVariable "EPOCH_playerHunger", - missionNamespace getVariable "EPOCH_playerThirst", - missionNamespace getVariable "EPOCH_playerAliveTime", - missionNamespace getVariable "EPOCH_playerEnergy", - missionNamespace getVariable "EPOCH_playerWet", - missionNamespace getVariable "EPOCH_playerSoiled", - missionNamespace getVariable "EPOCH_playerImmunity", - missionNamespace getVariable "EPOCH_playerToxicity", - missionNamespace getVariable "EPOCH_playerStamina", - missionNamespace getVariable "EPOCH_playerCrypto", - ((getAllHitPointsDamage player) param [2,[]]), - missionNamespace getVariable "EPOCH_playerBloodP", - missionNamespace getVariable "EPOCH_playerSpawnArray" - ], - missionNamespace getVariable "Epoch_personalToken" - ] - ]; + // TODO: use remoteExec here + missionNamespace setVariable ["EPOCH_pushPlayer_PVS",[player,_customVars,missionNamespace getVariable "Epoch_personalToken"]]; publicVariableServer "EPOCH_pushPlayer_PVS"; -}; \ No newline at end of file + + missionNamespace setVariable["EPOCH_lastSave", diag_tickTime]; +}; 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 4a2717da9..c03414717 100644 --- a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf +++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyDown.sqf @@ -1,8 +1,6 @@ private["_dikCode", "_handled"]; -_dikCode = _this select 1; -_shift = _this select 2; -_ctrl = _this select 3; -_alt = _this select 4; +params ["_display","_dikCode","_shift","_ctrl","_alt"]; + _handled = false; // Developer Debug @@ -17,14 +15,14 @@ if (_dikCode in [0x02,0x03,0x04,0x58,0x57,0x44,0x43,0x42,0x41,0x40,0x3F,0x3E,0x3 _handled = true; }; -// rasie vol -if (_ctrl && _dikCode == 0x0D) then { +// increase vol +if (_ctrl && _dikCode == EPOCH_keysVolumeUp) then { EPOCH_soundLevel = (EPOCH_soundLevel + 0.1) min 1; 5 fadeSound EPOCH_soundLevel; _dt = [format["Internal sound level: %1%2 ", EPOCH_soundLevel * 100, "%"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; }; // lower vol -if (_ctrl && _dikCode == 0x0C) then { +if (_ctrl && _dikCode == EPOCH_keysVolumeDown) then { EPOCH_soundLevel = (EPOCH_soundLevel - 0.1) max 0.1; 5 fadeSound EPOCH_soundLevel; _dt = [format["Internal sound level: %1%2 ", EPOCH_soundLevel * 100,"%"], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; @@ -61,6 +59,22 @@ if (_dikCode == EPOCH_keysDebugMon) then { _handled = true; }; +//Action Menu +if (_dikCode == EPOCH_keysAction) then { + _handled = true; + if !(EPOCH_keysActionPressed) then { + EPOCH_keysActionPressed = true; + if (cursorTarget isKindOf "AllVehicles") then { + call epoch_dynamicMenu; + } else { + [] spawn { + uiSleep 0.2; + if (EPOCH_keysActionPressed) then {call epoch_dynamicMenu}; + }; + }; + }; +}; + // Player only code if (vehicle player == player) then { @@ -151,7 +165,7 @@ if (vehicle player == player) then { case EPOCH_keysBuildMovR: { EPOCH_X_OFFSET = (EPOCH_X_OFFSET - 0.1) max - 5; _handled = true }; case EPOCH_keysBuildRotL: { EPOCH_buildDirection = (EPOCH_buildDirection + 1) min 360; EPOCH_space = true; _handled = true }; case EPOCH_keysBuildRotR: { EPOCH_buildDirection = (EPOCH_buildDirection - 1) max 0; EPOCH_space = true; _handled = true }; - case EPOCH_keysBuildIt: { cursorTarget call EPOCH_fnc_SelectTarget; _handled = true }; + //case EPOCH_keysBuildIt: { cursorTarget call EPOCH_fnc_SelectTarget; _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 6a47242c3..ed0c73042 100644 --- a/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf +++ b/Sources/epoch_code/compile/interface_event_handlers/EPOCH_KeyUp.sqf @@ -1,6 +1,14 @@ -_dikCode = _this select 1; -_shift = _this select 2; -_ctrl = _this select 3; -_alt = _this select 4; +private["_dikCode", "_handled"]; +params ["_display","_dikCode","_shift","_ctrl","_alt"]; +_handled = false; + +//Main actions + +if (_dikCode == EPOCH_keysAction) then { + EPOCH_keysActionPressed = false; + true call Epoch_dynamicMenuCleanup; +}; + + +_handled -if (_ctrl && _dikCode == 0x39) then { call EPOCH_lootTrash; }; \ No newline at end of file diff --git a/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf b/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf index 524d16d7d..4e444fc3c 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_initUI.sqf @@ -2,11 +2,6 @@ private ["_bar","_uniformArmor","_totalArmor","_finalArmor","_vestArmor","_headg disableSerialization; EPOCH_InteractedItem = []; - -if (isNil "EPOCH_MAX_ARMOR") then { - call EPOCH_maxArmorInit; -}; - EPOCH_lastContainer = _this select 1; waitUntil {!isNull findDisplay 602}; @@ -14,9 +9,6 @@ _display = (findDisplay 602); (_display displayCtrl -13) ctrlEnable false; -_totalArmor = 0; -_totalArmorMax = EPOCH_MAX_ARMOR select 3; - _color = [0.6,0.6,0.6,1]; _colorCompare = [0.4,0.6,1,0.4]; diff --git a/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf b/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf index 9fe5861a9..862a7a8e9 100644 --- a/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf +++ b/Sources/epoch_code/compile/inventory/EPOCH_refeshUI.sqf @@ -7,6 +7,10 @@ if (!isNull findDisplay 602) then { _selectedClass = EPOCH_InteractedItem select 1; }; + if (isNil "EPOCH_MAX_ARMOR") then { + call EPOCH_maxArmorInit; + }; + _totalArmor = 0; _totalArmorMax = EPOCH_MAX_ARMOR select 3; diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf index dbbfd22dc..32bae9b7e 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientInit.sqf @@ -15,7 +15,7 @@ EPOCH_target = objNull; EPOCH_Z_OFFSET = 0; EPOCH_X_OFFSET = 0; EPOCH_Y_OFFSET = 5; -EPOCH_snapVisArray = []; +EPOCH_arr_snapPoints = []; EPOCH_prevTarget = objNull; EPOCH_interactOption = 0; diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf index 7350981f6..e28f67d27 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientKeyMap.sqf @@ -4,6 +4,13 @@ params [["_args",0],["_input",0]]; _keyMap = [ //["Name", "Variable name", Default value], + ["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], ["Build: Mode 1", "EPOCH_keysBuildMode1", 2], ["Build: Mode 2", "EPOCH_keysBuildMode2", 3], ["Build: Direction", "EPOCH_keysBuildDir", 4], @@ -15,11 +22,7 @@ _keyMap = ["Build: Move LEFT", "EPOCH_keysBuildMovL", 0xD2], ["Build: Move RIGHT", "EPOCH_keysBuildMovR", 0xD3], ["Build: Rotate LEFT", "EPOCH_keysBuildRotL", 0x12], - ["Build: Rotate RIGHT", "EPOCH_keysBuildRotR", 0x10], - ["Build: BUILD", "EPOCH_keysBuildIt", 0x39], - ["Trade", "EPOCH_keysAcceptTrade", 0x14], - ["Holster Weapon", "EPOCH_keysHolster", 35], - ["Debug Monitor", "EPOCH_keysDebugMon", 41] + ["Build: Rotate RIGHT", "EPOCH_keysBuildRotR", 0x10] ]; switch (_args) do { diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf index 1b4e1bca7..4969200dc 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientRespawn.sqf @@ -1,5 +1,5 @@ call EPOCH_clientInit; -[] spawn EPOCH_masterLoop; +[] spawn EPOCH_masterLoop_v2; [5,100] call EPOCH_niteLight; Epoch_canBeRevived = true; @@ -7,4 +7,4 @@ Epoch_canBeRevived = true; [] execFSM "\x\addons\a3_epoch_code\system\gender_selection.fsm"; -true \ No newline at end of file +true diff --git a/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf b/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf index e42a60257..52010850d 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_clientRevive.sqf @@ -1,4 +1,4 @@ -// +// _playerObject = _this select 0; if !(alive player && alive _playerObject && !isPlayer _playerObject) then { _ply = player; @@ -12,7 +12,7 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then { Epoch_personalToken = _this select 1; // call EPOCH_clientInit; - [] spawn EPOCH_masterLoop; + [] spawn EPOCH_masterLoop_v2; [5, 100] call EPOCH_niteLight; closeDialog 0; @@ -20,13 +20,13 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then { player addEventHandler ["Respawn", {(_this select 0) call EPOCH_clientRespawn}]; player addEventHandler ["Put", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}]; - player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}]; - player addEventHandler["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }]; - player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI;locked (_this select 1) in [2, 3]}]; - player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}]; - player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}]; + player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}]; + player addEventHandler ["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }]; + player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable["EPOCH_Locked", false]) }]; + player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}]; + player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}]; } else { deleteVehicle _playerObject; }; -true call EPOCH_pushCustomVar; \ No newline at end of file +true call EPOCH_pushCustomVar; diff --git a/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf b/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf index 10ad6ce78..a3961057f 100644 --- a/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf +++ b/Sources/epoch_code/compile/setup/EPOCH_masterLoop.sqf @@ -185,6 +185,8 @@ _fadeUI = { }; }; +_cursorTarget = objNull; + // Master Loop Start while {alive player} do { @@ -198,17 +200,15 @@ while {alive player} do { // current target _currentTarget = objNull; - if (!isNull cursorTarget && !(EPOCH_target isEqualTo cursorTarget)) then { - _distance = player distance cursorTarget; - if (_distance < 9) then { - if (cursorTarget isKindOf "ThingX" || cursorTarget isKindOf "Constructions_static_F" || cursorTarget isKindOf "Constructions_foundation_F" || cursorTarget isKindOf "WeaponHolder" || cursorTarget isKindOf "AllVehicles" || cursorTarget isKindOf "PlotPole_EPOCH") then{ - if (cursorTarget isKindOf "Animal_Base_F") then { - if !(alive cursorTarget) then { - _currentTarget = cursorTarget; - }; - } else { - _currentTarget = cursorTarget; + _cursorTarget = ([10] call EPOCH_fnc_cursorTarget); + if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then { + if (_cursorTarget isKindOf "ThingX" || _cursorTarget isKindOf "Constructions_static_F" || _cursorTarget isKindOf "Constructions_foundation_F" || _cursorTarget isKindOf "WeaponHolder" || _cursorTarget isKindOf "AllVehicles" || _cursorTarget isKindOf "PlotPole_EPOCH") then{ + if (_cursorTarget isKindOf "Animal_Base_F") then { + if !(alive _cursorTarget) then { + _currentTarget = _cursorTarget; }; + } else { + _currentTarget = _cursorTarget; }; }; }; @@ -218,7 +218,9 @@ while {alive player} do { _vehicle = vehicle player; if (_vehicle == player) then { _val = log(abs(speed player)); - if (_val>0.7) then { + _staminaThreshold = 0.7; + if (EPOCH_playerIsSwimming) then {_staminaThreshold = 0.3}; + if (_val>_staminaThreshold) then { EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0; } else { _increaseStamina = true; @@ -478,6 +480,7 @@ while {alive player} do { _position = getPosATL player; EPOCH_nearestLocations = nearestLocations[player, ["NameCityCapital", "NameCity", "Airport"], 300]; + EPOCH_playerIsSwimming = false; if !(surfaceIsWater _position) then { if (EPOCH_nearestLocations isEqualTo []) then{ @@ -489,12 +492,19 @@ while {alive player} do { } else { // spawn shark if player is deep water and not in vehicle if (vehicle player == player) then{ - if (((_position vectorDiff getPosASL player) select 2) > 50) then { + _offsetZ = ((_position vectorDiff getPosASL player) select 2); + if (_offsetZ > 1.7) then { + EPOCH_playerIsSwimming = true; + }; + if (_offsetZ > 50) then { "GreatWhite_F" call EPOCH_unitSpawn; }; }; }; + // default power state + EPOCH_nearPower = false; + EPOCH_chargeRate = 0; // energy Charge from nearby power plants _powerSources = nearestObjects[player, ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH"], _energyRange]; @@ -514,12 +524,15 @@ while {alive player} do { }; _totalCapacity = _totalCapacity + _powerCap; } forEach _powerSources; - _players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange]; - EPOCH_chargeRate = ceil(_totalCapacity / (count _players)); - EPOCH_nearPower = true; - } else { - EPOCH_nearPower = false; - EPOCH_chargeRate = 0; + if (_totalCapacity > 0) then { + _players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange]; + if (_players isEqualTo []) then { + EPOCH_chargeRate = ceil _totalCapacity; + } else { + EPOCH_chargeRate = ceil (_totalCapacity / (count _players)); + }; + EPOCH_nearPower = true; + }; }; EPOCH_playerAliveTime = round(EPOCH_playerAliveTime + (_tickTime - EPOCH_clientAliveTimer)); @@ -553,7 +566,6 @@ while {alive player} do { } forEach EPOCH_playerSpawnArray; // test spawning one antagonist every 10 minutes select one unit at random to spawn - if !(_spawnUnits isEqualTo[]) then{ (_spawnUnits select(floor random(count _spawnUnits))) call EPOCH_unitSpawn; }; diff --git a/Sources/epoch_code/compile/setup/EPOCH_masterLoop_v2.sqf b/Sources/epoch_code/compile/setup/EPOCH_masterLoop_v2.sqf new file mode 100644 index 000000000..5afeef295 --- /dev/null +++ b/Sources/epoch_code/compile/setup/EPOCH_masterLoop_v2.sqf @@ -0,0 +1,40 @@ +// EPOCHMOD.com +disableSerialization; +_config = 'CfgMasterLoop' call EPOCH_returnConfig; +_build_sqf = preprocessFile getText (_config >> "Init" >> "file"); +_configs = "true" configClasses (_config >> "Events"); +_condition = getText (_config >> "Events" >> "condition"); +_file = getText (_config >> "Events" >> "file"); +{ + _configName = configName _x; + _varName = format["_EPOCH_%1",_configName]; + _build_sqf = _build_sqf + ' + '+_varName+' = diag_tickTime; + '; +}forEach _configs; +_build_sqf = _build_sqf + ' +while {'+_condition+'} do { + _tickTime = diag_tickTime; +'; +{ + _delay = getNumber(_x >> "delay"); + _configName = configName _x; + _varName = format["_EPOCH_%1",_configName]; + _code = preprocessFile format ["%1\%2.sqf",_file,_configName]; + _build_sqf = _build_sqf + ' + if ((_tickTime - '+_varName+') > '+str(_delay)+') then { + '+_varName+' = _tickTime; + '+_code+' + }; + '; +}forEach _configs; +_build_sqf = _build_sqf + ' + if (vehicle player != player) then { + if (isNull EPOCH_currentVehicle) then { + EPOCH_currentVehicle = vehicle player; + EPOCH_currentVehicle addEventHandler["GetOut", "_this call EPOCH_antiWall"]; + }; + }; + uiSleep 0.1; +};'; +call compile _build_sqf; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf new file mode 100644 index 000000000..274445fb8 --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf @@ -0,0 +1,142 @@ + + // current target + + _currentTarget = objNull; + _cursorTarget = ([10] call EPOCH_fnc_cursorTarget); + if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then { + if (_cursorTarget isKindOf "ThingX" || _cursorTarget isKindOf "Constructions_static_F" || _cursorTarget isKindOf "Constructions_foundation_F" || _cursorTarget isKindOf "WeaponHolder" || _cursorTarget isKindOf "AllVehicles" || _cursorTarget isKindOf "PlotPole_EPOCH") then{ + if (_cursorTarget isKindOf "Animal_Base_F") then { + if !(alive _cursorTarget) then { + _currentTarget = _cursorTarget; + }; + } else { + _currentTarget = _cursorTarget; + }; + }; + }; + EPOCH_currentTarget = _currentTarget; + + _increaseStamina = false; + _vehicle = vehicle player; + if (_vehicle == player) then { + _val = log(abs(speed player)); + _staminaThreshold = 0.7; + if (EPOCH_playerIsSwimming) then {_staminaThreshold = 0.3}; + if (_val>_staminaThreshold) then { + EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0; + } else { + _increaseStamina = true; + }; + } else { + if (EPOCH_buildMode > 0) then { + EPOCH_buildMode = 0; + EPOCH_snapDirection = 0; + hintsilent "BUILD MODE: DISABLED"; + EPOCH_Target = objNull; + // EPOCH_SURVEY = []; + }; + _increaseStamina = true; + + switch (typeOf _vehicle) do { + case "jetski_epoch": { + _clock_hour10 = floor ((date select 3)/10); + _clock_minute10 = floor ((date select 4)/10); + { + _vehicle setObjectTexture [_forEachIndex,_x]; + }forEach[ + format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_hour10], + format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 3)-(_clock_hour10*10)], + format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_minute10], + format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 4)-(_clock_minute10*10)], + format["\x\addons\a3_epoch_vehicles\data\fuel%1_ca.paa",floor(fuel _vehicle*10)] + ]; + }; + case "ebike_epoch": { + { + _vehicle setObjectTexture [_forEachIndex,_x]; + }forEach[ + format["\x\addons\a3_epoch_vehicles\data\speed%1_ca.paa",floor(speed _vehicle/9) max 0], + format["\x\addons\a3_epoch_vehicles\data\energ%1_ca.paa",floor(fuel _vehicle*14)] + ]; + }; + }; + }; + + _envCold = EPOCH_playerTemp <= 95.0; + _envHot = EPOCH_playerTemp >= 106.7; + _hungry = EPOCH_playerHunger <= 0; + _thirsty = EPOCH_playerThirst <= 0; + _warnbloodPressure = EPOCH_playerBloodP > 120; + + _thirst ctrlShow (EPOCH_playerThirst <= 625); + if (ctrlShown _thirst) then { + [_thirst,_thirsty] call _fadeUI; + _thirstScale = linearConversion [0,EPOCH_playerThirst,2500,0.01,1]; + _thirst ctrlSetTextColor [_thirstScale, _thirstScale, 0.9, 1]; + }; + + _hunger ctrlShow (EPOCH_playerHunger <= 1250); + if (ctrlShown _hunger) then { + [_hunger,_hungry] call _fadeUI; + _hungerScale = linearConversion [0,EPOCH_playerHunger,5000,0.01,1]; + _hunger ctrlSetTextColor [1, _hungerScale, _hungerScale, 1]; + }; + + _playerOxygen = getOxygenRemaining player; + _oxygen ctrlShow (_playerOxygen < 1); + if (ctrlShown _oxygen) then { + [_oxygen,(_playerOxygen <= 0.55)] call _fadeUI; + _oxygen ctrlSetTextColor [1, _playerOxygen, _playerOxygen, 1]; + }; + + _hazzard ctrlShow (EPOCH_playerToxicity > 1); + if (ctrlShown _hazzard) then { + [_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI; + _toxicScale = 1-linearConversion [0,EPOCH_playerToxicity,100,0.01,1]; + _hazzard ctrlSetTextColor [_toxicScale, 1, _toxicScale, 1]; + }; + + _broken ctrlShow ((player getHitPointDamage "HitLegs") >= 0.5); + if (ctrlShown _broken) then { + [_broken,true] call _fadeUI; + }; + + if (_envCold || _envHot || _hungry || _thirsty) then { + if (_envHot || _envCold) then { + player setFatigue 1; + }; + EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190; + _increaseStamina = false; + } else { + if (EPOCH_playerStamina > 0) then { + if !(_panic) then { + if (!_warnbloodPressure) then { + player setFatigue 0; + }; + EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max 100; + }; + }; + }; + + _critical = (damage player >= 0.7 || _warnbloodPressure); + _emergency ctrlShow _critical; + if (ctrlShown _emergency) then { + [_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI; + _emergencyScale = 1-linearConversion [0,EPOCH_playerBloodP,180,0.01,1]; + _emergency ctrlSetTextColor [1, _emergencyScale, _emergencyScale, 1]; + }; + + if (EPOCH_playerBloodP >= 180) then { + true call EPOCH_pushCustomVar; + }; + if (_increaseStamina && (getFatigue player) == 0) then { + EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax; + }; + if (EPOCH_debugMode) then { + call EPOCH_debugMonitor; + }; + + call EPOCH_TradeLoop; + + + onEachFrame EPOCH_onEachFrame; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf new file mode 100644 index 000000000..7afca83a8 --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event2.sqf @@ -0,0 +1,94 @@ + + if !(EPOCH_arr_interactedObjs isEqualTo[]) then { + EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; + EPOCH_arr_interactedObjs = []; + }; + + if (damage player != _damagePlayer) then { + if (alive player) then { + true call EPOCH_pushCustomVar; + _damagePlayer = damage player; + }; + }; + + if ((rating player) < 0) then { + player addRating abs(rating player); + }; + + // calculate total available power + // 1. number of power production devices within range 75m + + // find share of power based on factors + // 1. number of players + // 2. Other sources of drain (Lights) + + _energyValue = EPOCH_chargeRate min _energyRegenMax; + _vehicle = vehicle player; + if (_vehicle != player && isEngineOn _vehicle) then { + _energyValue = _energyValue + 5; + }; + + if (currentVisionMode player == 1) then { //NV enabled + _energyValue = _energyValue - _energyCostNV; + if (EPOCH_playerEnergy == 0) then { + player action["nvGogglesOff", player]; + }; + }; + + EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0; + + if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then { + 9993 cutRsc["EpochGameUI3", "PLAIN", 0, false]; + _display3 = uiNamespace getVariable "EPOCH_EpochGameUI3"; + _energyDiff = round(EPOCH_playerEnergy - _prevEnergy); + _diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]}; + // hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy]; + (_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText]; + _prevEnergy = EPOCH_playerEnergy; + }; + + if (EPOCH_playerEnergy == 0) then { + if (EPOCH_buildMode > 0) then { + EPOCH_buildMode = 0; + EPOCH_snapDirection = 0; + _dt = ["Build Mode Disabled: Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext; + EPOCH_Target = objNull; + EPOCH_Z_OFFSET = 0; + EPOCH_X_OFFSET = 0; + EPOCH_Y_OFFSET = 5; + }; + }; + + _attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30]; + if !(_attackers isEqualTo[]) then { + (_attackers select 0) call EPOCH_client_bitePlayer; + _panic = true; + } else { + // custom poision + _toxicObjs = player nearobjects["SmokeShellCustom", 6]; + if!(_toxicObjs IsEqualTo[]) then { + (_toxicObjs select 0) call EPOCH_client_bitePlayer; + _panic = true; + } else { + _panic = false; + }; + }; + + call EPOCH_fnc_Weather; + + // Hunger / Thirst + _HTlossRate = _baseHTLoss; + if (EPOCH_playerStamina < 100) then { + if ((getFatigue player) > 0) then { + _HTlossRate = _HTlossRate + (_HTlossRate*(getFatigue player)); + }; + } else { + _HTlossRate = (_HTlossRate / 2); + }; + + EPOCH_playerHunger = (EPOCH_playerHunger - _HTlossRate) max 0; + EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0; + + call _lootBubble; + + EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event3.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event3.sqf new file mode 100644 index 000000000..15e4bae8b --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event3.sqf @@ -0,0 +1,6 @@ + + if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then { + _EPOCH_15 = _tickTime; + _prevEquippedItem = EPOCH_equippedItem_PVS; + publicVariableServer "EPOCH_equippedItem_PVS"; + }; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf new file mode 100644 index 000000000..da2292d3e --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event4.sqf @@ -0,0 +1,17 @@ + + _nearByBobbersLocal = []; + _nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12]; + { + if (local _x) then { + _nearByBobbersLocal pushBack _x + } + } forEach _nearByBobbers; + + if !(_nearByBobbersLocal isEqualTo []) then { + if ((random 100) < 50) then { + _bobber = _nearByBobbersLocal select floor(random(count _nearByBobbers)); + _bobber setVelocity [0,-1,-1]; + _bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime]; + }; + + }; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf new file mode 100644 index 000000000..42a394025 --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event5.sqf @@ -0,0 +1,60 @@ +_position = getPosATL player; + +EPOCH_nearestLocations = nearestLocations[player, ["NameCityCapital", "NameCity", "Airport"], 300]; +EPOCH_playerIsSwimming = false; + +if !(surfaceIsWater _position) then { + if (EPOCH_nearestLocations isEqualTo []) then{ + if (count(_position nearEntities["Animal_Base_F", 800]) < 2) then { + // diag_log "DEBUG: Attempt to spawn animal"; + call EPOCH_client_loadAnimalBrain; + }; + }; +} else { + // spawn shark if player is deep water and not in vehicle + if (vehicle player == player) then{ + _offsetZ = ((_position vectorDiff getPosASL player) select 2); + if (_offsetZ > 1.7) then { + EPOCH_playerIsSwimming = true; + }; + if (_offsetZ > 50) then { + "GreatWhite_F" call EPOCH_unitSpawn; + }; + }; +}; + +// default power state +EPOCH_nearPower = false; +EPOCH_chargeRate = 0; + +// energy Charge from nearby power plants +_powerSources = nearestObjects[player, ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH"], _energyRange]; +if !(_powerSources isEqualTo[]) then { + _totalCapacity = 0; + { + _powerClass = typeOf _x; + _powerCap = getNumber(configFile >> "CfgVehicles" >> _powerClass >> "powerCapacity"); + _powerType = getNumber(configFile >> "CfgVehicles" >> _powerClass >> "powerType"); + if (_powerCap == 0) then { + _powerCap = 100; + }; + if (_powerType == 1) then { + if (sunOrMoon < 1) then { + _powerCap = _powerCap/2; + }; + }; + _totalCapacity = _totalCapacity + _powerCap; + } forEach _powerSources; + if (_totalCapacity > 0) then { + _players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange]; + if (_players isEqualTo []) then { + EPOCH_chargeRate = ceil _totalCapacity; + } else { + EPOCH_chargeRate = ceil (_totalCapacity / (count _players)); + }; + EPOCH_nearPower = true; + }; +}; + +EPOCH_playerAliveTime = round(EPOCH_playerAliveTime + (_tickTime - EPOCH_clientAliveTimer)); +EPOCH_clientAliveTimer = _tickTime; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event6.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event6.sqf new file mode 100644 index 000000000..7d922a608 --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event6.sqf @@ -0,0 +1 @@ +false call EPOCH_pushCustomVar; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf new file mode 100644 index 000000000..2a4516bc3 --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/Event7.sqf @@ -0,0 +1,23 @@ + + 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; + }; + }; + + _spawnUnits = []; + { + if (_x > 0) then{ + _spawnUnits pushBack(EPOCH_spawnIndex select _forEachIndex); + }; + } forEach EPOCH_playerSpawnArray; + + // test spawning one antagonist every 10 minutes select one unit at random to spawn + if !(_spawnUnits isEqualTo[]) then{ + (_spawnUnits select(floor random(count _spawnUnits))) call EPOCH_unitSpawn; + }; diff --git a/Sources/epoch_code/compile/setup/masterLoop/init.sqf b/Sources/epoch_code/compile/setup/masterLoop/init.sqf new file mode 100644 index 000000000..e4cc32bd1 --- /dev/null +++ b/Sources/epoch_code/compile/setup/masterLoop/init.sqf @@ -0,0 +1,179 @@ + +_prevEquippedItem = []; +_damagePlayer = damage player; +_panic = false; +_prevEnergy = EPOCH_playerEnergy; + +// init config data +_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] 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; +_energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnConfigEntryV2; +_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2; + +EPOCH_chargeRate = 0; + +// default data if mismatch +if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{ + { EPOCH_playerSpawnArray pushBack 0 } forEach EPOCH_spawnIndex; +}; + +9990 cutRsc ["EpochGameUI","PLAIN",2,false]; +_display = uiNamespace getVariable "EPOCH_EpochGameUI"; + +_thirst = _display displayCtrl 21201; +_hunger = _display displayCtrl 21202; +_broken = _display displayCtrl 21203; +_oxygen = _display displayCtrl 21204; +_hazzard = _display displayCtrl 21205; +_emergency = _display displayCtrl 21206; + +{ + _x ctrlShow false; +}forEach[_thirst,_hunger,_broken,_oxygen,_hazzard,_emergency]; + +// find radio +{ + if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) == "ItemRadio") exitWith{ + EPOCH_equippedItem_PVS = [_x, true, player]; + }; +} forEach assignedItems player; + +// lootBubble Init +_loots = ["CfgEpochClient", "lootClasses", EPOCH_lootClasses] call EPOCH_fnc_returnConfigEntryV2; + +_lootClasses = ('CfgBuildingLootPos' call EPOCH_returnConfig) call Bis_fnc_getCfgSubClasses; +_lootClasses = _lootClasses - ["Default"]; + +_lootBubble = { + private["_pos", "_others", "_objects", "_nearObjects", "_building", "_travelDir", "_lootDist", "_xPos", "_yPos", "_lootLoc", "_playerPos", "_distanceTraveled", "_class", "_dir", "_color", "_colors", "_item", "_randomColor", "_positions", "_lootBiasPos", "_lootType", "_config"]; + _playerPos = getPosATL vehicle player; + _distanceTraveled = EPOCH_lastPlayerPos distance _playerPos; + if (_distanceTraveled > 10 && _distanceTraveled < 200) then { + _travelDir = [EPOCH_lastPlayerPos, _playerPos] call BIS_fnc_dirTo; + _lootDist = 30 + _distanceTraveled; + _xPos = (_playerPos select 0) + (_lootDist * sin(_travelDir)); + _yPos = (_playerPos select 1) + (_lootDist * cos(_travelDir)); + _lootLoc = [_xPos, _yPos, 0]; + + _objects = nearestObjects[_lootLoc, _lootClasses, 30]; + _config = 'CfgEpochClient' call EPOCH_returnConfig; + _buildingJammerRange = getNumber(_config >> "buildingJammerRange"); + if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; }; + + _jammer = nearestObjects [_lootLoc, ["PlotPole_EPOCH"], _buildingJammerRange]; + + if (!(_objects isEqualTo[]) && (_jammer isEqualTo[])) then { + + _building = _objects select(floor(random(count _objects))); + + if !(_building in EPOCH_LootedBlds) then { + + _pos = getPosATL _building; + _others = _building nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 15]; + if (_others isEqualTo[]) then { + + _nearObjects = nearestObjects[_pos, ["WH_Loot", "Animated_Loot"], 35]; + if (_nearObjects isEqualTo[]) then { + + _config = ('CfgBuildingLootPos' call EPOCH_returnConfig) >> (typeOf _building); + + if (isClass(_config)) then { + + _lootBiasPos = getNumber(_config >> "lootBiasPos"); + _lootType = getText(_config >> "lootType"); + + EPOCH_LootedBlds pushBack _building; + if (count EPOCH_LootedBlds >= 20) then { + EPOCH_LootedBlds deleteAt 0; + }; + + { + _positions = [] + getArray(_config >> (_x select 0)); + if !(_positions isEqualTo[]) then { + _class = _x select 1; + _randomColor = _x select 2; + { + + if ((random 100) < _lootBiasPos) then { + + _pos = _building modelToWorld(_x select 0); + + if (nearestObjects[_pos, ["WH_Loot", "Animated_Loot"], 2] isEqualTo[]) then { + + if ((typeName _class) == "ARRAY") then { + _class = _class select(floor(random(count _class))); + }; + + _dir = (_x select 1) + (getDir _building); + if (_dir > 360) then { + _dir = _dir - 360; + }; + + // Temp for now till we get more + if (_lootType == "mil" && _class == "Bed_EPOCH") then { + _class = "Bunk_EPOCH"; + }; + + _item = createVehicle[_class, _pos, [], 0.0, "CAN_COLLIDE"]; + _item setDir _dir; + + // force item to ground level is resulting z pos is below ground. + if (_pos select 2 < 0) then { + _pos set[2, 0]; + }; + + if (surfaceIsWater _pos) then { + _item setPosASL _pos; + } else { + _item setPosATL _pos; + }; + + if (typeName _randomColor isEqualTo "STRING") then { + _randomColor = _randomColor isEqualTo "true"; + }; + + if (_randomColor) then { + _colors = [] + getArray(configFile >> "CfgVehicles" >> _class >> "availableTextures"); + if !(_colors isEqualTo[]) then { + _color = _colors select floor(random(count _colors)); + _item setObjectTextureGlobal[0, _color]; + }; + }; + }; + }; + }forEach _positions; + }; + }forEach _loots; + }; + }; + }; + }; + }; + }; + EPOCH_lastPlayerPos = _playerPos; +}; + +// [control,bool] call _fadeUI; +_fadeUI = { + private ["_ctrl"]; + _ctrl = _this select 0; + if (_this select 1) then { + if (ctrlFade _ctrl == 0) then { + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0.5; + }; + if (ctrlFade _ctrl == 1) then { + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0.5; + }; + } else { + if (ctrlFade _ctrl != 1) then { + _ctrl ctrlSetFade 0; + _ctrl ctrlCommit 0; + }; + }; +}; + +_cursorTarget = objNull; diff --git a/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf b/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf index 21c3ae3d7..4459c2b32 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_startInteract.sqf @@ -23,16 +23,18 @@ if (isNull _target) then { if (!isNull _target) then { if (alive _target) then { + /* if ((_target isKindOf "LandVehicle") || (_target isKindOf "Air") || (_target isKindOf "Ship") || (_target isKindOf "Tank")) then { _dialog = "InteractVehicle"; }; - /* + if (_ctrl) then { if (_target isKindOf "Constructions_static_F" || _target isKindOf "Constructions_foundation_F") then { _dialog = "InteractBaseBuilding"; }; }; */ + /* if (_target isKindOf "Man") then { if (_target != player) then { if (!isPlayer _target) then { @@ -42,6 +44,7 @@ if (!isNull _target) then { }; }; }; + */ }; if (_forceGear) then { diff --git a/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf b/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf index 341fba078..c295825e2 100644 --- a/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf +++ b/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf @@ -19,8 +19,8 @@ if (!isNull _this) then { _item = lbData[41501, _i]; if (isClass (_config >> _item)) then{ - - // test remove items to be sold and add to array + + // test remove items to be sold and add to array if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then { if (_item in items player) then { player removeItem _item; @@ -48,10 +48,10 @@ if (!isNull _this) then { }; }; }; - // test + // test + + - - }; }; }; @@ -107,18 +107,14 @@ if (!isNull _this) then { if !((EPOCH_TRADE_COMPLETE select 1) isEqualTo[]) then { if ((EPOCH_TRADE_COMPLETE select 1) isEqualTo(_this select 1)) then { - _errorMsg = 'Items Purchased'; - + _errorMsg = 'Items Purchased: '; // add purchased items { if ([_x, "CfgWeapons"] call EPOCH_fnc_isAny) then { - if (player canAdd _x) then { - player addItem _x; - } - else { - _type = getNumber(configfile >> "CfgWeapons" >> (_x) >> "type"); - _addWeaponToHands = false; - switch (_type) do { + _errorMsg = _errorMsg + format["%1, ", getText(configfile >> "CfgWeapons" >> (_x) >> "displayName")]; + _type = getNumber(configfile >> "CfgWeapons" >> (_x) >> "type"); + _addWeaponToHands = false; + switch (_type) do { case 1: { if (primaryWeapon player == "") then { _addWeaponToHands = true; @@ -134,24 +130,18 @@ if (!isNull _this) then { _addWeaponToHands = true; }; }; - }; - if (_addWeaponToHands) then { - player addWeapon _x; - } - else { - _errorMsg = "Not enough space"; - }; }; - - } - else { + if (_addWeaponToHands) then { + player addWeapon _x; + } else { + _x call EPOCH_fnc_addItemOverflow; + }; + } else { if ([_x, "CfgMagazines"] call EPOCH_fnc_isAny) then { - if (player canAdd _x) then { - player addMagazine _x; - } - else { - _errorMsg = "Not enough space"; - }; + _errorMsg = _errorMsg + format["%1, ", getText(configfile >> "CfgMagazines" >> (_x) >> "displayName")]; + _x call EPOCH_fnc_addItemOverflow; + } else { + _errorMsg = _errorMsg + format["%1, ", getText(configfile >> "CfgVehicles" >> (_x) >> "displayName")]; }; }; } forEach(_this select 1); @@ -169,4 +159,4 @@ if (!isNull _this) then { EPOCH_TRADE_STARTED = nil; }; }; -}; \ No newline at end of file +}; diff --git a/Sources/epoch_code/config.cpp b/Sources/epoch_code/config.cpp index 055bde509..640d3731e 100644 --- a/Sources/epoch_code/config.cpp +++ b/Sources/epoch_code/config.cpp @@ -16,7 +16,7 @@ class CfgMods hidePicture = 0; hideName = 0; action = "http://www.epochmod.com"; - version = "0.3.4.0"; + version = "0.3.5.0"; majorVersion = 0.3; //MUST BE A NUMBER!; Change this if we release a new major version, don't change if we push just push a hotfix ArmAVersion = 150; 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."; @@ -27,20 +27,20 @@ class Epoch class Version { //Version System, Check if PBO Version is compatible with Code - A3_epoch_assets = "0.3.4.0"; - A3_epoch_assets_1 = "0.3.4.0"; - epoch_objects = "0.3.4.0"; - A3_epoch_assets_3 = "0.3.4.0"; - A3_epoch_config = "0.3.4.0"; - A3_epoch_language = "0.3.4.0"; - Underground_Epoch = "0.3.4.0"; - A3_epoch_vehicles = "0.3.4.0"; - a3_epoch_weapons = "0.3.4.0"; - a2_epoch_weapons = "0.3.4.0"; - a3_epoch_structures = "0.3.4.0"; - A3_epoch_functions = "0.3.4.0"; - A3_epoch_vehicles_1 = "0.3.4.0"; - Enhanced_Epoch_AiASupport = "0.3.4.0"; + A3_epoch_assets = "0.3.5.0"; + A3_epoch_assets_1 = "0.3.5.0"; + epoch_objects = "0.3.5.0"; + A3_epoch_assets_3 = "0.3.5.0"; + A3_epoch_config = "0.3.5.0"; + A3_epoch_language = "0.3.5.0"; + Underground_Epoch = "0.3.5.0"; + A3_epoch_vehicles = "0.3.5.0"; + a3_epoch_weapons = "0.3.5.0"; + a2_epoch_weapons = "0.3.5.0"; + a3_epoch_structures = "0.3.5.0"; + A3_epoch_functions = "0.3.5.0"; + A3_epoch_vehicles_1 = "0.3.5.0"; + Enhanced_Epoch_AiASupport = "0.3.5.0"; }; }; @@ -146,7 +146,6 @@ class CfgClientFunctions class maintainIT {}; class lockCheck {}; class countdown {}; - class fnc_SelectTarget {}; class fnc_SelectTargetBuild {}; class isBuildAllowed {}; class simulSwap {}; @@ -156,7 +155,7 @@ class CfgClientFunctions class upgradeBUILDv2 {}; class removeBUILD {}; class changeWallState {}; - class QuickUpgrade {}; + class checkBuild {}; }; class traders @@ -178,6 +177,7 @@ class CfgClientFunctions class interface_event_handlers { class KeyDown {}; + class KeyUp {}; class onChar {}; }; @@ -185,6 +185,7 @@ class CfgClientFunctions { class client_publicEH {}; class masterLoop {}; + class masterLoop_v2 {}; class clientInit {}; class clientRespawn {}; class clientRevive {}; @@ -220,6 +221,8 @@ class CfgClientFunctions class fnc_stringLeft {}; class fnc_findSapperStalkLocation {}; class fnc_dirToFuzzy {}; + + class fnc_cursorTarget {}; }; class environment @@ -259,25 +262,31 @@ class CfgClientFunctions class gui { file = "\x\addons\a3_epoch_code\gui\scripts"; class onPause {}; - class interactVehicle {}; class showStats {}; - //class dynamicMenu {}; - //class dynamicMenuCleanup {}; class 3DctrlPitchYaw {}; class 3DctrlSpin {}; class 3DctrlYaw {}; class InterruptConfig {}; class InterruptConfigActions {}; - class gui3DCooldown {}; - class gui3DWorldPos {}; - class gui3DModelPos {}; class getIDC {}; + class guiObjHP {}; + class secureStorageHandler {}; + class dynamicText {}; + class genderSelection {}; }; class config { file = "\x\addons\a3_epoch_code\gui\scripts\config"; class config_keymap {}; }; + + class dynamenu { + file = "\x\addons\a3_epoch_code\gui\scripts\dynamenu"; + class dynamicMenu {}; + class dynamicMenuPopulate {}; + class dynamicMenuCleanup {}; + }; + class gui_craft { file = "\x\addons\a3_epoch_code\gui\scripts\craftingv2"; class crafting_animate {}; @@ -295,7 +304,7 @@ class CfgClientFunctions class crafting_LB_defaults {}; class crafting_LB_doubleClick {}; class crafting_colorScheme {}; - }; + }; class group { file = "\x\addons\a3_epoch_code\gui\scripts\group"; class Group_invitePlayer {}; @@ -331,6 +340,16 @@ class CfgClientFunctions class postprocessCreate {}; class postprocessAdjust {}; class postprocessDestroy {}; + class setDrunk {}; //needs a better name + }; + class worldToScreen { + file = "\x\addons\a3_epoch_code\gui\scripts\worldToScreen"; + class gui3DCooldown {}; + class gui3DCooldownEH {}; + class gui3DWorldPos {}; + class gui3DWorldPosEH {}; + class gui3DModelPos {}; + class gui3DModelPosEH {}; }; }; }; diff --git a/Sources/epoch_code/gui/Epoch_GUI_Config.hpp b/Sources/epoch_code/gui/Epoch_GUI_Config.hpp index e7fed27b2..86662ba61 100644 --- a/Sources/epoch_code/gui/Epoch_GUI_Config.hpp +++ b/Sources/epoch_code/gui/Epoch_GUI_Config.hpp @@ -42,7 +42,7 @@ class ScrollBar; #include "Epoch_GUI_ClientConfigs.hpp" #include "Epoch_GUI_rmx.hpp" -class RscTitles +class RscTitles { #include "Epoch_RscTitles.hpp" }; @@ -116,7 +116,7 @@ class TradeRequest }; }; */ - +/* class QuickUpgrade { idd = -15; @@ -169,7 +169,7 @@ class QuickUpgrade }; }; - +*/ class QuickTake { idd = -5; @@ -275,7 +275,7 @@ class TapOut }; - +/* class SelectGender { idd = -7; @@ -318,6 +318,78 @@ class SelectGender }; }; }; +*/ + +class SelectGender +{ + + idd = -7; + movingEnable = 0; + enableSimulation = 1; + onLoad = "['Select your gender',10] call Epoch_dynamicText; setMousePosition [0.5, 0.5];"; + class ControlsBackground + { + class Background: RscPicture //Replace with custom background + { + idc = 88800; + text = "x\addons\a3_epoch_code\Data\gender_selection.paa"; + x = safezoneX - safezoneW * 0.1; + y = safezoneY - safezoneH * 0.1; + w = safezoneW + safezoneW * 0.3; + h = safezoneH + safezoneH * 0.3; + }; + }; + class Objects + { + class female + { + + idc = 88801; + type = 82; + model = "\x\addons\a3_epoch_assets\models\clone_female.p3d"; + scale = 0.5; + + direction[] = {0, 1, 0}; + up[] = {0, 0, 1}; + + x = -1; + z = 1; + y = 1.8; + + xBack = -1; + zBack = 1; + yBack = 1.8; + + inBack = 0; + enableZoom = 0; + zoomDuration = 0.001; + onMouseButtonDown = "closeDialog 0; EPOCH_PlayerIsMale = false;"; + onLoad = "(_this select 0) ctrlSetModelDirAndUp [[0,1,0],[0,0,1]];"; + }; + class male: female + { + idc = 88802; + model = "\x\addons\a3_epoch_assets\models\clone_male.p3d"; + x = 2; + xBack = 2; + onMouseButtonDown = "closeDialog 0; EPOCH_PlayerIsMale = true;"; + }; + }; + class controls + { + class overlay: RscPicture + { + idc = 88803; + text = "#(argb,8,8,3)color(0,0,0,0)"; + x = safezoneX + 0.4 * safezoneW; + y = safezoneY; + w = safezoneW * 0.2; + h = safezoneH; + onMouseMoving = "(_this select 1) call epoch_genderSelection;"; + onLoad = "(_this select 0) ctrlEnable true;"; + }; + }; +}; class TradeNPCMenu { @@ -390,6 +462,7 @@ class TradeNPCMenu h = 0.282151 * safezoneH; onLBDblClick = "[41501,_this] call EPOCH_npcTraderAdd"; onLBDrop = "[41501,_this] call EPOCH_npcTraderAdd"; + onLoad = "ctrlSetFocus (_this select 0)"; }; class RscListbox_playerOffer: RscListbox { @@ -1191,7 +1264,7 @@ class CraftItem }; }; - +/* class InteractVehicle { idd = -11; @@ -1241,7 +1314,7 @@ class InteractVehicle }; }; }; - +*/ /* class InteractPlayer { @@ -1273,7 +1346,7 @@ class InteractPlayer }; }; */ - +/* class InteractNPC { idd = -12; @@ -1302,7 +1375,7 @@ class InteractNPC h = 0.08; action = "call EPOCH_startNPCTraderMenu;"; }; - /* + class RscButtonMenu_2403: RscButtonMenu { idc = 2403; @@ -1313,7 +1386,7 @@ class InteractNPC h = 0.08; action = "closeDialog 0; player action [""Gear"", cursorTarget];"; }; - */ + class RscButtonMenu_2404: RscButtonMenu { idc = 2405; @@ -1326,6 +1399,7 @@ class InteractNPC }; }; }; +*/ /* class InteractBuilding @@ -1492,6 +1566,7 @@ class InteractBank }; }; }; +/* class InteractBaseBuilding { idd = -14; @@ -1542,9 +1617,10 @@ class InteractBaseBuilding h = 0.08; action = "closeDialog 0; cursorTarget call EPOCH_fnc_SelectTargetBuild;"; }; - + }; }; +*/ /* class InteractItem { @@ -2398,7 +2474,7 @@ class RscDisplayInventory_DLCTemplate }; }; }; - + class RscDisplayInventory { @@ -3235,13 +3311,13 @@ class RscDisplayInventory class EpochBtnBG : IGUIBack { idc = -10; - + //x = 0.433468 * safezoneW + safezoneX; //y = 0.75872 * safezoneH + safezoneY; //w = 0.30231 * safezoneW; //h = 0.0337482 * safezoneH; - + x = "14.5 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "23.9 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "24.5 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; @@ -3254,12 +3330,12 @@ class RscDisplayInventory idc = -11; text = "Group Menu"; onMouseButtonDown = "_this call EPOCH_Inventory_Group"; - + //x = 0.437079 * safezoneW + safezoneX; //y = 0.764 * safezoneH + safezoneY; //w = 0.0711741 * safezoneW; //h = 0.022 * safezoneH; - + x = "33.2 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; @@ -3270,12 +3346,12 @@ class RscDisplayInventory idc = -12; text = "Requests"; onMouseButtonDown = "_this call EPOCH_Inventory_iGroup"; - + //x = 0.511347 * safezoneW + safezoneX; //y = 0.764 * safezoneH + safezoneY; //w = 0.0711741 * safezoneW; //h = 0.022 * safezoneH; - + x = "27.0 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; @@ -3286,12 +3362,12 @@ class RscDisplayInventory idc = -13; text = "EXAMINE"; onMouseButtonDown = "call EPOCH_consumeItem"; - + //x = 0.585617 * safezoneW + safezoneX; //y = 0.764 * safezoneH + safezoneY; //w = 0.0711741 * safezoneW; //h = 0.022 * safezoneH; - + x = "14.62 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; @@ -3302,12 +3378,12 @@ class RscDisplayInventory idc = -14; text = "CRAFT"; onMouseButtonDown = "EPOCH_CraftingItem call EPOCH_crafting_load;"; - + //x = 0.659883 * safezoneW + safezoneX; //y = 0.764 * safezoneH + safezoneY; //w = 0.0711741 * safezoneW; //h = 0.022 * safezoneH; - + x = "20.8 * ( ((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)"; y = "24 * ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - ( ((safezoneW / safezoneH) min 1.2) / 1.2))/2)"; w = "6 * ( ((safezoneW / safezoneH) min 1.2) / 40)"; diff --git a/Sources/epoch_code/gui/Epoch_GUI_rmx.hpp b/Sources/epoch_code/gui/Epoch_GUI_rmx.hpp index f74b585cd..5bd2807c4 100644 --- a/Sources/epoch_code/gui/Epoch_GUI_rmx.hpp +++ b/Sources/epoch_code/gui/Epoch_GUI_rmx.hpp @@ -3,6 +3,7 @@ class rmx_dynamenu { enableSimulation = 1; movingEnable = 1; onLoad = "setMousePosition [0.5, 0.5];"; + onKeyUp = "_this call epoch_keyUp"; class controls {}; }; @@ -47,6 +48,136 @@ class rmx_rscObject }; }; +class rmx_rscContainer +{ + + idd = 99440; + movingEnable = 0; + enableSimulation = 1; + enableDisplay = 0; + + class Objects + { + class _CT_OBJECT_CONTAINER + { + access = 0; // Control access (0 - ReadAndWrite, 1 - ReadAndCreate, 2 - ReadOnly, 3 - ReadOnlyVerified) + idc = 99441; // Control identification (without it, the control won't be displayed) + type = 82; // Type + style = ST_LEFT; // Style + blinkingPeriod = 0; // Time in which control will fade out and back in. Use 0 to disable the effect. + + //model = "\A3\Misc_F\Helpers\UserTexture1m.p3d"; // Displayed model + //model = "\x\addons\a3_epoch_code\gui\terminal2.p3d"; // Displayed model + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\center_plane.p3d"; + scale = 0.2; // Model scale + + x = 26 * GUI_GRID_CENTER_W + GUI_GRID_CENTER_X; // Horizontal coordinates + y = 21 * GUI_GRID_CENTER_H + GUI_GRID_CENTER_Y; // Vertical coordinates + z = 1; // Depth coordinates + //position[] = {0,0,1}; // Alternative XYZ coordinates, where XY is center of the screen + + xBack = 25 * GUI_GRID_CENTER_W + GUI_GRID_CENTER_X; // Horizontal background coordinates + yBack = 12 * GUI_GRID_CENTER_H + GUI_GRID_CENTER_Y; // Vertical background coordinates + zBack = 2; // Depth background coordinates + //positionBack[] = {0,0,2}; // Alternative XYZ coordinates, where XY is center of the screen + + enableZoom = 1; // Allow foreground/background transformation + zoomDuration = 0.5; // Speed of foreground/background transformation + inBack = 0; // Start in back (Back coordinates are used) + + direction[] = {1,0,0.5}; // Model vector dir + up[] = {0.5,1,0}; // Model vector up + + tooltip = "CT_OBJECT"; // Tooltip text + tooltipColorShade[] = {0,0,0,1}; // Tooltip background color + tooltipColorText[] = {1,1,1,1}; // Tooltip text color + tooltipColorBox[] = {1,1,1,1}; // Tooltip frame color + + class Areas // Configurable UI areas. Normally interactive controls (buttons, listboxes, ...) are not interactive here. + { + class UserTextureL + { + selection = "usertextureL"; // Model selection on which the UI will be rendered + class Controls + { + class _CT_STATIC + { + idc = 1100; // Control identification (without it, the control won't be displayed) + type = CT_STATIC; // Type + style = ST_LEFT + ST_CENTER + ST_MULTI; // Style + + x = 0; // Horizontal coordinates (relative to the selection area) + y = 0; // Vertical coordinates (relative to the selection area) + w = 1; // Width (relative to the selection area) + h = 1; // Height (relative to the selection area) + + colorBackground[] = {0,0,0,1}; // Fill color + + text = "\nCT_OBJECT\n_CONTAINER"; // Displayed text + sizeEx = 6 * GUI_GRID_CENTER_H; // Text size + font = "VT323"; // Font from CfgFontFamilies + colorText[] = {1,0,0,1}; // Text color + lineSpacing = 1; // When ST_MULTI style is used, this defines distance between lines (1 is text height) + }; + }; + }; + class UserTexture + { + selection = "usertexture"; // Model selection on which the UI will be rendered + class Controls + { + class _CT_STATIC + { + idc = 11002; // Control identification (without it, the control won't be displayed) + type = CT_STATIC; // Type + style = ST_LEFT + ST_CENTER + ST_MULTI; // Style + + x = 0; // Horizontal coordinates (relative to the selection area) + y = 0; // Vertical coordinates (relative to the selection area) + w = 1; // Width (relative to the selection area) + h = 1; // Height (relative to the selection area) + + colorBackground[] = {0,0,0,1}; // Fill color + + text = "\nCT_OBJECT\n_CONTAINER"; // Displayed text + sizeEx = 6 * GUI_GRID_CENTER_H; // Text size + font = "VT323"; // Font from CfgFontFamilies + colorText[] = {1,0,0,1}; // Text color + lineSpacing = 1; // When ST_MULTI style is used, this defines distance between lines (1 is text height) + }; + }; + }; + class UserTextureR + { + selection = "usertextureR"; // Model selection on which the UI will be rendered + class Controls + { + class _CT_STATIC + { + idc = 11001; // Control identification (without it, the control won't be displayed) + type = CT_STATIC; // Type + style = ST_LEFT + ST_CENTER + ST_MULTI; // Style + + x = 0; // Horizontal coordinates (relative to the selection area) + y = 0; // Vertical coordinates (relative to the selection area) + w = 1; // Width (relative to the selection area) + h = 1; // Height (relative to the selection area) + + colorBackground[] = {0,0,0,1}; // Fill color + + text = "\nCT_OBJECT\n_CONTAINER"; // Displayed text + sizeEx = 6 * GUI_GRID_CENTER_H; // Text size + font = "VT323"; // Font from CfgFontFamilies + colorText[] = {1,0,0,1}; // Text color + lineSpacing = 1; // When ST_MULTI style is used, this defines distance between lines (1 is text height) + }; + }; + }; + }; + }; + }; +}; + class rmx_rscControlsGroup: RscControlsGroup { idc = -1; @@ -620,4 +751,22 @@ class Epoch_main_config_combo: RscCombo }; onLBSelChanged = "_this call EPOCH_InterruptConfigActions;"; +}; + +class rmx_ST1: RscStructuredText +{ + text = ""; + size = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + colorText[] = {1,1,1,1.0}; + shadow = 2; + class Attributes + { + font = "PuristaMedium"; + color = "#ffffff"; + colorLink = "#D09B43"; + align = "center"; + valign = "middle"; + size = "2"; + shadow = 2; + }; }; \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/Epoch_dynamicMenu.sqf b/Sources/epoch_code/gui/scripts/Epoch_dynamicMenu.sqf deleted file mode 100644 index e1011dfeb..000000000 --- a/Sources/epoch_code/gui/scripts/Epoch_dynamicMenu.sqf +++ /dev/null @@ -1,137 +0,0 @@ -#include <\x\Addons\rmx_init\defines.inc> - -//TODO: read key press from global var (profileNamespace config) -//TODO: admin choice to use missionConfigFile -//TODO: (Ask team) suffix code to close dialog when button pressed -//TODO: unlimited categories -//TODO: functionize var Defines, do check before button action -//TODO: nil before closing display -//TODO: add commented out dialog version to display -//TODO: add cooldown -//TODO: prevent from opening and instantly close if known display is on - -if !(isNil "rmx_var_dynamicMenuInProgress") exitWith {}; - -if !(isNil "rmx_var_dynamicMenuHOLD") exitWith {}; - -private ["_display","_cfg","_cat","_buttonSettings","_configs","_subclasses","_action","_entries","_img","_img2","_center","_defaultScaleX","_defaultScaleY","_distance","_scaleLargeX","_scaleLargeY","_scaleSmallX","_scaleSmallY","_scaleSelectedX","_scaleSelectedY","_points","_positions","_positions2","_positions3","_x","_y"]; -disableSerialization; - -rmx_var_dynamicMenuInProgress = true; //needed to suspend button spam, removed later - -_display = (findDisplay 46) createDisplay "rmx_dynamenu"; -_display displaySetEventHandler ["keyUp", "[false,_this select 1] call Epoch_dynamicMenuCleanup;"]; - -//TODO: config choice based on global variable or dynamic config update (slower) -_cfg = param [0,"cfgDynamicMenu" call EPOCH_returnConfig,[configFile]]; - -/** Variable Defines **/ -{ - call compile (format ["%1 = %2;",configName _x,getText _x]); -} count (configProperties [(_cfg >> "variableDefines"),"true",false]); - -_cat = if (isClass _cfg >> "dynaButtons") then { - (_cfg >> "dynaButtons") - } else { - _cfg - }; - -/** Button configs **/ -_buttonSettings = []; - -_configs = "true" configClasses (_cat); -{ - if (call compile (getText(_x >> "condition"))) then { - - _subclasses = configProperties [_x, "isClass _x",true]; - - _action = if (_subclasses isEqualTo []) then { - compile (format ["%1",getText(_x >> "action")]) - } else { - compile (format ["[true,57] call Epoch_dynamicMenuCleanup; %2",getText(_x >> "action")]) - }; - //diag_log _action; - _buttonSettings pushBack [ - getText(_x >> "icon"), - getText(_x >> "tooltip"), - _action - ]; - }; -} forEach _configs; - -_entries = count _buttonSettings; -if (_entries <= 0) exitWith {rmx_var_tabmenu = true; rmx_var_dynamicMenuInProgress = nil;}; - -//Post processing -if (isNil "rmx_var_dynamenuPPHandle") then { - rmx_var_dynamenuPPHandle = ["dynamicBlur",10] call epoch_postProcessCreate; - [rmx_var_dynamenuPPHandle, 1, [1]] call epoch_postprocessAdjust; -}; - -_img = "#(rgb,8,8,3)color(0,0,0,0)"; -_img2 = "x\addons\a3_epoch_code\Data\UI\buttons\dm_selection.paa"; - -//defaults don't edit -_center = 0.5; -_defaultScaleX = 0.4; -_defaultScaleY = 0.5; -_distance = 0.7 + _entries / 100; - -//edit scaling here (divisor only, larger values produce smaller image) -_scaleLargeX = _defaultScaleX / (1.5 + _entries / 10); //anim invisible -_scaleLargeY = _defaultScaleY / (1.5 + _entries / 10); -_scaleSmallX = _defaultScaleX / (2.5 + _entries / 10); //icons -_scaleSmallY = _defaultScaleY / (2.5 + _entries / 10); -_scaleSelectedX = _defaultScaleX / (1.75 + _entries / 10); //anim selected -_scaleSelectedY = _defaultScaleY / (1.75 + _entries / 10); - -_points = 360 / _entries; - -_positions = []; -_positions2 = []; -_positions3 = []; -for "_p" from 0 to 360 step _points do { - - _x = cos _p * (0.3 * _distance); - _y = sin _p * (0.4 * _distance); - - _positions pushBack [_x + (_center - (_scaleLargeX / 2)),_y + (_center - (_scaleLargeY / 2)),_scaleLargeX,_scaleLargeY]; - _positions2 pushBack [_x + (_center - (_scaleSmallX / 2)),_y + (_center - (_scaleSmallY / 2)),_scaleSmallX,_scaleSmallY]; - _positions3 pushBack [_x + (_center - (_scaleSelectedX / 2)),_y + (_center - (_scaleSelectedY / 2)),_scaleSelectedX,_scaleSelectedY]; -}; - -rmx_var_controls = []; -//_buttonSettings [icon,tooltip,action] -for "_e" from 0 to (_entries - 1) do { - private ["_ctrl","_ctrl2"]; - _ctrl = _display ctrlCreate ["rmx_rscPicture",(66600 + _e)]; - _ctrl ctrlSetText _img; - _ctrl ctrlSetPosition (_positions select _e); - _ctrl ctrlCommit 0.1; - _ctrl ctrlSetTooltip (_buttonSettings select _e select 1); - - _ctrl ctrlSetTooltipColorBox [0, 0, 0, 0]; - _ctrl ctrlSetTooltipColorShade [0, 0, 0, 0]; - _ctrl ctrlSetEventHandler ["mouseEnter", (format ["_c = _this select 0; _c ctrlSetText '%1'; _c ctrlSetPosition %2; _c ctrlCommit 0.3;",_img2,(_positions3 select _e)])]; - _ctrl ctrlSetEventHandler ["mouseExit", (format ["_c = _this select 0; _c ctrlSetText '%1'; _c ctrlSetPosition %2; _c ctrlCommit 0.3;",_img,(_positions select _e)])]; - _ctrl ctrlSetEventHandler ["mouseButtonDown", (format ["call %1;",(_buttonSettings select _e select 2)])]; - _ctrl ctrlEnable true; - - _ctrl2 = _display ctrlCreate ["rmx_rscPicture",-(66600 + _e)]; - _ctrl2 ctrlSetTooltip (_buttonSettings select _e select 1); - _ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0]; - _ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0]; - _ctrl2 ctrlSetText (_buttonSettings select _e select 0); - _ctrl2 ctrlSetPosition (_positions2 select _e); - _ctrl2 ctrlCommit 0.1; - - rmx_var_controls pushBack _ctrl; - rmx_var_controls pushBack _ctrl2; -}; - -/** Variable Cleanup **/ -{ - call compile (format ["%1 = nil;",configName _x]); -} count (configProperties [(_cfg >> "variableDefines"),"true",false]); -rmx_var_dynamicMenuInProgress = nil; -true diff --git a/Sources/epoch_code/gui/scripts/Epoch_dynamicMenuCleanup.sqf b/Sources/epoch_code/gui/scripts/Epoch_dynamicMenuCleanup.sqf deleted file mode 100644 index 3c17afe55..000000000 --- a/Sources/epoch_code/gui/scripts/Epoch_dynamicMenuCleanup.sqf +++ /dev/null @@ -1,31 +0,0 @@ -_test = param [1,0]; -if (_test != 57) exitWith {true}; //dirty fix, TODO: read values from epoch startup vars for key - -_this spawn { - if !(isNil "rmx_var_dynamicMenuInProgress") exitWith {}; - _args = param [0,false,[false]]; //true if redirected with category, false for full cleanup - - if (_args) then {rmx_var_dynamicMenuHOLD = true;} else {rmx_var_dynamicMenuHOLD = nil; rmx_var_dynamicMenuCat = nil;}; - - disableSerialization; - private "_animSpeed"; - _animSpeed = 0.1; - { - _x ctrlSetPosition [0.4625,0.45,0.075,0.1]; - _x ctrlSetFade 1; - _x ctrlCommit _animSpeed; - } forEach rmx_var_controls; - - [rmx_var_dynamenuPPHandle, _animSpeed, [0]] call epoch_postprocessAdjust; - - uiSleep _animSpeed; - - findDisplay 66600 closeDisplay 1; - - rmx_var_controls = nil; - - rmx_var_dynamenuPPHandle call epoch_postprocessDestroy; - rmx_var_dynamenuPPHandle = nil; -}; - -true diff --git a/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf b/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf new file mode 100644 index 000000000..04ac06ec1 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/Epoch_dynamicText.sqf @@ -0,0 +1,97 @@ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" + +_text = param [0,"Missing text",["",(text "")]]; +_time = param [1,5,[1]]; +_color = param [2,"#ffffff",[""]]; + +if (typeName _text isEqualTo "STRING") then {_text = parseText _text}; + +_alreadyEnabled = uiNamespace getVariable ["rmx_var_dynamicText",false]; + +_input = count str _text * 2; +_scale = 1; +_width = _scale * GUI_GRID_W; +_height = _scale * GUI_GRID_H; +_centerX = 0.5; +_centerY = -18 * GUI_GRID_H + GUI_GRID_Y; + +disableSerialization; +_display = findDisplay 46; + +_ctrlGroup = _display ctrlCreate ["RscControlsGroupNoScrollbars", call Epoch_getIDC]; +_ctrlGroup ctrlSetPosition [_centerX - _width/2 * _input / 2, _centerY - _height, _width * _input, _height * 2]; +_ctrlGroup ctrlCommit 0; + +_y = 0; +_cnt = -1; +_controls = []; +for "_i" from 0 to (_input - 1) do { + _ctrl = _display ctrlCreate ["RscPicture", call Epoch_getIDC,_ctrlGroup]; + _cnt = _cnt + 1; + if (_cnt == (_input / 2)) then {_y = _height; _cnt = 0;}; + _ctrl ctrlSetPosition [_cnt * _width,_y,_width,_height]; + _ctrl ctrlSetText "#(rgb,8,8,3)color(1,1,1,1)"; + _ctrl ctrlCommit 0; + _ctrl ctrlSetFade 1-(random 0.2); + [_ctrl, 1-(random 0.2),0] call BIS_fnc_ctrlSetScale; + + _controls set [_i, _ctrl]; +}; + +_ctrlText = _display ctrlCreate ["rmx_ST1", call Epoch_getIDC,_ctrlGroup]; +_ctrlText ctrlSetStructuredText _text; +_ctrlText ctrlSetPosition [0, 0, _width * _input /2, _height * 2]; +_ctrlText ctrlCommit 0; + + +_add = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]]; +_add pushBack _ctrlGroup; +uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_add]; + +[_time,_ctrlGroup,_ctrlText,_controls] spawn { + disableSerialization; + params ["_time","_ctrlGroup","_ctrlText","_controls"]; + + _tick = diag_tickTime; + while {(diag_tickTime - _tick) < _time} do { + { + _x ctrlSetFade 1-(random 0.2); + [_x, 1-(random 0.2), (random 1)] call BIS_fnc_ctrlSetScale; + } forEach _controls; + uiSleep 0.5; + }; + _arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]]; + _del = + { + if (str _x isEqualTo str _ctrlGroup) exitWith {_forEachIndex}; + 0 + } forEach _arr; + + _arr deleteAt _del; + uiNamespace setVariable ["rmx_var_dynamicTextCTRL",_arr]; + uiSleep 0.01; + { + _x call Epoch_getIDC; + ctrlDelete _x; + } forEach (_controls + [_ctrlText] + [_ctrlGroup]); +}; + +if !(_alreadyEnabled) then { + uiNamespace setVariable ["rmx_var_dynamicText",true]; + [ctrlPosition _ctrlGroup] spawn { + disableSerialization; + params ["_defaultPos"]; + _yPos = _defaultPos param [1]; + _height = _defaultPos param [3]; + while {uiNamespace getVariable ["rmx_var_dynamicText",false]} do { + _arr = uiNamespace getVariable ["rmx_var_dynamicTextCTRL",[]]; + if (_arr isEqualTo []) exitWith {uiNamespace setVariable ["rmx_var_dynamicText",nil];}; + { + _xPos = (ctrlPosition _x) select 0; + _x ctrlSetPosition [_xPos,_yPos + _height * _forEachIndex]; + _x ctrlCommit 0; + } forEach _arr; + }; + }; +}; +true diff --git a/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf b/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf new file mode 100644 index 000000000..fa896370a --- /dev/null +++ b/Sources/epoch_code/gui/scripts/Epoch_genderSelection.sqf @@ -0,0 +1,10 @@ +_min = safezoneX + 0.4 * safezoneW; +_max = safezoneX + 0.6 * safezoneW; +_r = linearConversion [_min, _max, _this, 0.2, -1, true]; +_r2 = linearConversion [_min, _max, _this, 2, 0.8, true]; +_r3 = linearConversion [_min, _max, _this, safezoneX, safezoneX - safezoneW * 0.3, true]; + +(findDisplay -7 displayCtrl 88801) ctrlSetPosition [_r,1,1.8]; +(findDisplay -7 displayCtrl 88802) ctrlSetPosition [_r2,1,1.8]; +(findDisplay -7 displayCtrl 88800) ctrlSetPosition [_r3,safezoneY - safezoneH * 0.1]; +(findDisplay -7 displayCtrl 88800) ctrlCommit 0; \ 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 1e6e4e65c..12d1932f9 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf +++ b/Sources/epoch_code/gui/scripts/Epoch_getIDC.sqf @@ -4,7 +4,7 @@ */ private ["_in","_list","_out","_find"]; _in = param [0,controlNull,[controlNull]]; -_list = uiNamespace getVariable ["rmx_var_uniqueIDC",[]]; +_list = missionNamespace getVariable ["rmx_var_uniqueIDC",[]]; if (ctrlIDC _in isEqualTo -1) then { _out = -90000 - (count _list); @@ -14,6 +14,6 @@ if (ctrlIDC _in isEqualTo -1) then { _list deleteAt _find; _out = true; }; -uiNamespace setVariable ["rmx_var_uniqueIDC",_list]; +missionNamespace setVariable ["rmx_var_uniqueIDC",_list]; _out diff --git a/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf b/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf new file mode 100644 index 000000000..fcdb85de2 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/Epoch_guiObjHP.sqf @@ -0,0 +1,25 @@ + +private ["_obj","_mode","_hitPoints","_dmg"]; + +_obj = param [0, objNull, [objNull]]; +_mode = param [1, 0, [0]]; + +if (_obj isEqualTo objNull) exitWith {}; + +_hitPoints = getAllHitPointsDamage _obj; + +{ + _dmg = _hitPoints select 2 select _forEachIndex; + if ((_mode isEqualTo 1) || ((_mode isEqualTo 0) && !(_dmg isEqualTo 0))) then { + [ + _obj, + 10, + format ["x\addons\a3_epoch_code\Data\UI\health_parts\%1.paa", floor (_dmg * 10)], + format ["%1%2",100 - (round (_dmg * 100)),"%"], + (_obj selectionPosition _x), + 10 + ] call epoch_gui3dModelPos; + }; +} forEach (_hitPoints select 1); + +true diff --git a/Sources/epoch_code/gui/scripts/Epoch_interactVehicle.sqf b/Sources/epoch_code/gui/scripts/Epoch_interactVehicle.sqf deleted file mode 100644 index 0c549d0af..000000000 --- a/Sources/epoch_code/gui/scripts/Epoch_interactVehicle.sqf +++ /dev/null @@ -1,43 +0,0 @@ -private["_mode","_display","_vehicle","_isLock"]; -_mode = [_this,0,"",[""]] call bis_fnc_param; -_display = [_this,1,displayNull,[displayNull]] call bis_fnc_param; - -_vehicle = cursorTarget; - -if (vehicle player != player) then { - _vehicle = vehicle player; -}; - -if (isNull _vehicle) exitWith { closeDialog 0 }; -disableSerialization; - -_isLock = locked _vehicle in [2,3]; -switch _mode do { - case "onLoad": { - if !((crew _vehicle) isEqualTo []) then { - (_display displayCtrl 2400) ctrlEnable false; - }; - if (_isLock) then { - (_display displayCtrl 2400) ctrlEnable false; //Lock Button - (_display displayCtrl 2402) ctrlEnable false; //Inspect Button - } else { - (_display displayCtrl 2401) ctrlEnable false; //Unlock Button - }; - }; - case "Lock": { - if (!_isLock) then { - EPOCH_lockVehicle_PVS = [_vehicle, true, player, Epoch_personalToken]; - publicVariableServer "EPOCH_lockVehicle_PVS"; - }; - closeDialog 0; - }; - case "Unlock": { - if (_isLock) then { - EPOCH_lockVehicle_PVS = [_vehicle, false, player, Epoch_personalToken]; - publicVariableServer "EPOCH_lockVehicle_PVS"; - }; - closeDialog 0; - }; - - default { closeDialog 0 }; -}; \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf b/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf new file mode 100644 index 000000000..6db7ed5b4 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/Epoch_secureStorageHandler.sqf @@ -0,0 +1,19 @@ +_in = param [0,false]; + +_out = switch (typeName _in) do { + case "STRING": + { + if !(isNull dyna_cursorTarget) then { + dyna_cursorTarget getVariable ["EPOCH_Locked",false] + }; + }; + case "OBJECT": + { + EPOCH_lockStorage_PVS = [_in,(_in getVariable ["EPOCH_Locked",false]),player,Epoch_personalToken]; + publicVariableServer "EPOCH_lockStorage_PVS"; + true + }; + default {false}; +}; + +_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 be60b04e9..40e49f43c 100644 --- a/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf +++ b/Sources/epoch_code/gui/scripts/craftingv2/EPOCH_crafting_load.sqf @@ -129,7 +129,7 @@ rmx_var_crafting_PP_DB = ["dynamicBlur",11] call epoch_postProcessCreate; private "_pos"; _pos = position player; while {rmx_var_craftingLOOPS} do { - if ((_pos distance (position player)) > 0) exitWith {closeDialog 0;}; + if ((_pos distance (position player)) > 1) exitWith {closeDialog 0;}; }; }; true \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf new file mode 100644 index 000000000..79eb2ae1d --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenu.sqf @@ -0,0 +1,117 @@ +disableSerialization; +_in = param [0, "", [""]]; +_display = findDisplay 66600; +_cfg = "CfgActionMenu" call EPOCH_returnConfig; +_arr = []; +_buttonSettings = []; + +/** Variable Defines **/ +{ + call compile (format ["%1 = %2;",configName _x,getText _x]); +} count (configProperties [(_cfg >> "variableDefines"),"true",false]); + +_hasTarget = !(dyna_cursorTarget isEqualTo objNull); + +if (isNull _display && dialog) exitWith {call Epoch_dynamicMenuCleanup; false}; + +if (isNull _display) then { + if (_hasTarget) then { + createDialog "rmx_dynamenu"; + } else { + findDisplay 46 createDisplay "rmx_dynamenu"; + }; +}; + +_selfOrTarget = if !(_hasTarget) then {"self"} else {"target"}; +_checkConfigs = { + + _config = switch (_in) do { + case "build_upgrade": + { + _cfg = "CfgBaseBuilding" call EPOCH_returnConfig; + (_cfg >> dyna_cursorTargetType) + }; + case "": + { + (_cfg >> _selfOrTarget) + }; + default + { + _c = format ["_cfg >> '%1'",_selfOrTarget]; + _arr = _this; + { + _c = _c + (format [" >> '%1'",_x]); + } forEach _arr; + + (call compile _c) + }; + }; + + switch (_in) do { + case "build_upgrade": + { + if !(isClass _config) exitWith {_in = "";}; + + { + _dName = getText(configfile >> "CfgVehicles" >> (_x select 0) >> "DisplayName"); + _tTip = ""; + _icon = ""; + { + if !(typeName _x isEqualTo "ARRAY") then {_x = [_x, 1]}; + _c = configfile >> "CfgMagazines" >> (_x select 0); + _tTip = _tTip + format ["[%1 x %2] ", _x select 1, getText(_c >> "DisplayName")]; + if (_icon isEqualTo "") then {_icon = getText (_c >> "picture")}; + } forEach (_x select 1); + + _tooltip = format ["%1 >> %2 ",_dName,_tTip]; + _action = format ["[dyna_cursorTarget,%1] call EPOCH_upgradeBUILDv2; true call Epoch_dynamicMenuCleanup;",_forEachIndex]; + + _buttonSettings pushBack [ + _icon, + _tooltip, + _action + ]; + + } forEach (getArray (_config >> "upgradeBuilding")); + + + }; + default + { + _configs = "true" configClasses _config; + { + if (call compile (getText(_x >> "condition"))) then { + + if (_selfOrTarget isEqualTo "self" || dyna_distance) then { + + _subclasses = configProperties [_x, "isClass _x",true]; + + _action = if (_subclasses isEqualTo []) then { + format ["%1; true call Epoch_dynamicMenuCleanup;",getText(_x >> "action")] + } else { + format ["%2 %1 call Epoch_dynamicMenu;",_arr + [(configName _x)],getText(_x >> "action")] + }; + + _buttonSettings pushBack [ + getText(_x >> "icon"), + getText(_x >> "tooltip"), + _action + ]; + }; + }; + } forEach _configs; + }; + }; +}; + +call _checkConfigs; +if (_buttonSettings isEqualTo []) then {_selfOrTarget = "self"; call _checkConfigs;}; + +_entries = count _buttonSettings; +if !(_entries <= 0) then { + [_entries, _buttonSettings] call epoch_dynamicMenuPopulate; +} else { + true call Epoch_dynamicMenuCleanup; +}; + +true diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf new file mode 100644 index 000000000..21d500158 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuCleanup.sqf @@ -0,0 +1,30 @@ +private ["_close","_cleanupVars"]; +_close = param [0,false,[false]]; + +_cleanupVars = { + _cfg = "CfgActionMenu" call EPOCH_returnConfig; + { + // call compile (format ["%1 = nil;",configName _x]); + missionNamespace setVariable [configName _x,nil]; + } count (configProperties [(_cfg >> "variableDefines"),"true",false]); +}; + +if (_close) then { + (findDisplay 66600) closeDisplay 1; +}; + +if (uiNamespace getVariable ["rmx_var_dynamicMenuInProgress",false]) then { + + uiNamespace setVariable ["rmx_var_dynamicMenuInProgress", nil]; + + call _cleanupVars; + + + [rmx_var_dynamenuPPHandle, 1, [0]] call epoch_postprocessAdjust; + rmx_var_dynaControls = nil; + rmx_var_dynamenuPPHandle call epoch_postprocessDestroy; + rmx_var_dynamenuPPHandle = nil; +} else { + call _cleanupVars; +}; +true diff --git a/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf new file mode 100644 index 000000000..64cbafaed --- /dev/null +++ b/Sources/epoch_code/gui/scripts/dynamenu/Epoch_dynamicMenuPopulate.sqf @@ -0,0 +1,79 @@ +#include "\A3\ui_f\hpp\defineCommonGrids.inc" +params ["_entries","_buttonSettings"]; +disableSerialization; + +_inProgress = uiNamespace getVariable ["rmx_var_dynamicMenuInProgress", false]; +_display = findDisplay 66600; + +if (_inProgress) then { + { + ctrlDelete _x; + } forEach rmx_var_dynaControls; +} else { + uiNamespace setVariable ["rmx_var_dynamicMenuInProgress", true]; + //Post processing + if (isNil "rmx_var_dynamenuPPHandle") then { + rmx_var_dynamenuPPHandle = ["dynamicBlur",10] call epoch_postProcessCreate; + [rmx_var_dynamenuPPHandle, 1, [1]] call epoch_postprocessAdjust; + }; +}; + +//defaults don't edit +_center = 0.5; +_scale = 12; +_defaultScaleX = _scale * GUI_GRID_W; +_defaultScaleY = _scale * GUI_GRID_H; + +_distance = 0.6 + _entries / 100; + +//edit scaling here (divisor only, larger values produce smaller image) +_scaleLargeX = _defaultScaleX / (1.5 + _entries / 10); //anim +_scaleLargeY = _defaultScaleY / (1.5 + _entries / 10); +_scaleSmallX = _defaultScaleX / (3 + _entries / 10); //icons +_scaleSmallY = _defaultScaleY / (3 + _entries / 10); + +_points = 360 / _entries; + +_positions = []; +_positions2 = []; +for "_p" from 0 to 360 step _points do { + + _x = cos _p * (0.3 * _distance); + _y = sin _p * (0.4 * _distance); + + _positions pushBack [_x + (_center - (_scaleLargeX / 2)),_y + (_center - (_scaleLargeY / 2)),_scaleLargeX,_scaleLargeY]; + _positions2 pushBack [_x + (_center - (_scaleSmallX / 2)),_y + (_center - (_scaleSmallY / 2)),_scaleSmallX,_scaleSmallY]; +}; + +missionNamespace setVariable ["rmx_var_dynaControls",[]]; +//_buttonSettings [icon,tooltip,action] +for "_e" from 0 to (_entries - 1) do { + private ["_ctrl","_ctrl2"]; + _ctrl = _display ctrlCreate ["rmx_rscPicture",(66600 + _e)]; + _ctrl ctrlSetText "x\addons\a3_epoch_code\Data\UI\buttons\dm_selection_b1.paa"; + _ctrl ctrlSetPosition (_positions select _e); + _ctrl ctrlSetFade 1; + _ctrl ctrlCommit 0; + _ctrl ctrlSetTooltip (_buttonSettings select _e select 1); + + _ctrl ctrlSetTooltipColorBox [0, 0, 0, 0]; + _ctrl ctrlSetTooltipColorShade [0, 0, 0, 0]; + _ctrl ctrlSetEventHandler ["mouseEnter", "_c = _this select 0; _c ctrlSetFade 0; [_c,0.85,0.1] call BIS_fnc_ctrlSetScale"]; + _ctrl ctrlSetEventHandler ["mouseExit", "_c = _this select 0; _c ctrlSetFade 1; [_c,1,0.1] call BIS_fnc_ctrlSetScale"]; + _ctrl ctrlSetEventHandler ["mouseButtonDown", (_buttonSettings select _e select 2)]; + _ctrl ctrlEnable true; + + _ctrl2 = _display ctrlCreate ["rmx_rscPicture",-(66600 + _e)]; + _ctrl2 ctrlSetTooltip (_buttonSettings select _e select 1); + _ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0]; + _ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0]; + _ctrl2 ctrlSetText (_buttonSettings select _e select 0); + _ctrl2 ctrlSetPosition (_positions2 select _e); + _ctrl2 ctrlCommit 0.1; + + _arr = missionNamespace getVariable ["rmx_var_dynaControls",[]]; + _arr append [_ctrl,_ctrl2]; + missionNamespace setVariable ["rmx_var_dynaControls",_arr]; +}; + +true diff --git a/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf b/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf new file mode 100644 index 000000000..5d9af5874 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/post_process/Epoch_setDrunk.sqf @@ -0,0 +1,74 @@ +/* + Usage: + 0.5 call epoch_setDrunk; + [0.2, _time] call epoch_setDrunk; + Notes: + Drunk levels 1-9, 0 to disable + Use low times, wet distortion does not work well when animated over time +*/ + +private ["_level","_speed"]; +params [["_level",0,[0]],["_speed",0,[0]]]; + +if (isNil "rmx_var_drunkHandles") then { + + _priority = 15; + _wd = ["wetdistortion",_priority] call epoch_postProcessCreate; + _db = ["dynamicBlur",_priority] call epoch_postProcessCreate; + + rmx_var_drunkHandles = [_wd,_db]; +}; + +switch _level do { + case 0: + { + rmx_var_drunkHandles call epoch_postprocessDestroy; + rmx_var_drunkHandles = nil; + }; + case 0.1: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.551644,0.0309715,0.202484,0,0,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + }; + case 0.2: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.551644,0.0309715,0.390503,0,0,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + }; + case 0.3: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.53718,-0.157049,0.390503,-1,0,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + }; + case 0.4: + { + [(rmx_var_drunkHandles select 0), _speed, [-1,0.0144629,0,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + }; + case 0.5: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0144616,0.0144629,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.146676]] call epoch_postprocessAdjust; + }; + case 0.6: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0144616,0.0144629,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.334697]] call epoch_postprocessAdjust; + }; + case 0.7: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0144616,0.0289258,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.334697]] call epoch_postprocessAdjust; + }; + case 0.8: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0289245,0.0289258,1,0,-0.53718,-0.157049,0.390503,-1,1,-0.161139,0,0,1,1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.334697]] call epoch_postprocessAdjust; + }; + case 0.9: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0,-0.0867792,0.435939,-0.592987,-0.739664,-1,0.144629,-1,0.103286,0.247918,0,0,1,-0.378086]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.0940112]] call epoch_postprocessAdjust; + }; + case 1: + { + [(rmx_var_drunkHandles select 0), _speed, [1,0.0723131,-0.0433885,1,-0.592987,-0.811979,-1,0.882248,-1,1,1,0,0,0.373996,-1]] call epoch_postprocessAdjust; + [(rmx_var_drunkHandles select 1), _speed, [0.151864]] call epoch_postprocessAdjust; + }; +}; \ No newline at end of file diff --git a/Sources/epoch_code/gui/scripts/Epoch_gui3DCooldown.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf similarity index 79% rename from Sources/epoch_code/gui/scripts/Epoch_gui3DCooldown.sqf rename to Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf index ffc87b349..be80b939e 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_gui3DCooldown.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldown.sqf @@ -13,7 +13,7 @@ */ _this spawn { - private ["_error","_pos","_time","_distance","_bool","_display","_ctrlPos","_ctrlGrp","_ctrl","_partTime","_ct","_cl"]; + private ["_error","_pos","_time","_distance","_bool","_display","_ctrlPos","_ctrlGrp","_rnd","_var","_id","_ctrl","_partTime","_ct","_cl"]; disableSerialization; params [ @@ -35,21 +35,11 @@ _this spawn { _ctrlGrp ctrlSetPosition _ctrlPos; _ctrlGrp ctrlCommit 0; - _id = call compile format - [ - " - missionNamespace setVariable ['rmx_var_3DCD_temp%1',[_ctrlGrp, _distance, _pos]]; - _id = addMissionEventHandler ['Draw3D',{ - _arr = missionNamespace getVariable 'rmx_var_3DCD_temp%1'; - _scale = linearConversion [0, (_arr select 1), player distance (_arr select 2), 0, 1, false]; - (_arr select 0) ctrlSetPosition (worldToScreen (_arr select 2)); - (_arr select 0) ctrlSetFade _scale; - (_arr select 0) ctrlCommit 0; - }]; - [_id,'rmx_var_3DCD_temp%1'] - " - ,floor random 10000 - ]; + _rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5]; + uiNamespace setVariable [_rnd,[_ctrlGrp, _pos,(ctrlPosition _ctrlGrp),_distance/2]]; + _var = format ["uiNamespace getVariable '%1'",_rnd]; + + _id = addMissionEventHandler ['Draw3D',_var + "call Epoch_gui3DCooldownEH;"]; _ctrl = []; for "_i" from 0 to 9 do { @@ -87,8 +77,8 @@ _this spawn { if !(_continue) exitWith {}; }; - removeMissionEventHandler ["Draw3D", _id select 0]; - missionNamespace setVariable [_id select 1, nil]; + removeMissionEventHandler ["Draw3D", _id]; + uiNamespace setVariable [_rnd, nil]; { _x call epoch_getIDC; ctrlDelete _x; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf new file mode 100644 index 000000000..afb3be85d --- /dev/null +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DCooldownEH.sqf @@ -0,0 +1,10 @@ +params ["_ctrlGrp", "_loc","_pos","_dst"]; +_pos2 = worldToScreen _loc; +if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]}; +_pos set [0, (_pos2 select 0)-((_pos select 2)/2)]; +_pos set [1, (_pos2 select 1)-((_pos select 3)/2)]; +_ctrlGrp ctrlSetPosition _pos; +_scale = linearConversion [0, _dst, player distance _loc, 0, 1, false]; +_ctrlGrp ctrlSetFade _scale; +_ctrlGrp ctrlCommit 0; +true diff --git a/Sources/epoch_code/gui/scripts/Epoch_gui3DModelPos.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf similarity index 64% rename from Sources/epoch_code/gui/scripts/Epoch_gui3DModelPos.sqf rename to Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf index e0936ec84..151b14802 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_gui3DModelPos.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPos.sqf @@ -4,7 +4,7 @@ */ #include "\A3\ui_f\hpp\defineCommonGrids.inc" _this spawn { - private ["_obj","_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_imgParsed","_txtParsed","_id","_tick"]; + private ["_obj","_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_rnd","_var","_imgParsed","_txtParsed","_id","_tick"]; disableSerialization; params [ @@ -30,22 +30,11 @@ _this spawn { _ctrl ctrlSetStructuredText (composeText [_imgParsed, parseText "
", _txtParsed]); - _id = call compile format - [ - " - missionNamespace setVariable ['rmx_var_3DMP_temp%1',[_ctrl, _dst, _obj, _loc]]; - _id = addMissionEventHandler ['Draw3D',{ - _arr = missionNamespace getVariable 'rmx_var_3DMP_temp%1'; - _pos = worldToScreen ((_arr select 2) modelToWorld (_arr select 3)); - (_arr select 0) ctrlSetPosition _pos; - (_arr select 0) ctrlCommit 0; - _scale = linearConversion [0, (_arr select 1), player distance ((_arr select 2) modelToWorld (_arr select 3)), 1, 0, false]; - [(_arr select 0), _scale, 0] call BIS_fnc_ctrlSetScale; - }]; - [_id,'rmx_var_3DMP_temp%1'] - " - ,floor random 10000 - ]; + _rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5]; + uiNamespace setVariable [_rnd,[_ctrl, _obj, _loc, (ctrlPosition _ctrl),_dst/2]]; + _var = format ["uiNamespace getVariable '%1'",_rnd]; + + _id = addMissionEventHandler ['Draw3D',_var + "call epoch_gui3dModelPosEH;"]; _tick = diag_tickTime; while {(diag_tickTime - _tick) < _time} do { @@ -53,8 +42,8 @@ _this spawn { if ((player distance (_obj modelToWorld _loc)) > _dst) exitWith {}; }; - removeMissionEventHandler ["Draw3D", _id select 0]; - missionNamespace setVariable [_id select 1, nil]; + removeMissionEventHandler ["Draw3D", _id]; + uiNamespace setVariable [_rnd, nil]; _ctrl call epoch_getIDC; ctrlDelete _ctrl; }; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf new file mode 100644 index 000000000..6a73a2285 --- /dev/null +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DModelPosEH.sqf @@ -0,0 +1,11 @@ +params ["_ctrl", "_obj", "_loc","_pos","_dst"]; +_m2w = _obj modelToWorld _loc; +_pos2 = worldToScreen _m2w; +if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]}; +_pos set [0, (_pos2 select 0)-((_pos select 2)/2)]; +_pos set [1, (_pos2 select 1)-((_pos select 3)/2)]; +_ctrl ctrlSetPosition _pos; +_scale = linearConversion [0, _dst, player distance _m2w, 0, 1, false]; +_ctrl ctrlSetFade _scale; +_ctrl ctrlCommit 0; +true diff --git a/Sources/epoch_code/gui/scripts/Epoch_gui3DWorldPos.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf similarity index 63% rename from Sources/epoch_code/gui/scripts/Epoch_gui3DWorldPos.sqf rename to Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf index 1b80b41d8..134a22d64 100644 --- a/Sources/epoch_code/gui/scripts/Epoch_gui3DWorldPos.sqf +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPos.sqf @@ -4,7 +4,7 @@ */ #include "\A3\ui_f\hpp\defineCommonGrids.inc" _this spawn { - private ["_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_imgParsed","_txtParsed","_id","_tick"]; + private ["_loc","_time","_pic","_txt","_dst","_bool","_display","_ctrl","_rnd","_var","_imgParsed","_txtParsed","_id","_tick"]; disableSerialization; params [ @@ -17,7 +17,7 @@ _this spawn { ]; _display = findDisplay 46; - + _ctrl = _display ctrlCreate ["RscStructuredText",call epoch_getIDC]; _ctrl ctrlSetPosition [10 * GUI_GRID_W + GUI_GRID_X,10 * GUI_GRID_H + GUI_GRID_Y,10 * GUI_GRID_W,10 * GUI_GRID_H]; _ctrl ctrlCommit 0; @@ -27,22 +27,12 @@ _this spawn { _ctrl ctrlSetStructuredText (composeText [_imgParsed, parseText "
", _txtParsed]); - _id = call compile format - [ - " - missionNamespace setVariable ['rmx_var_3DWP_temp%1',[_ctrl, _dst, _loc]]; - _id = addMissionEventHandler ['Draw3D',{ - _arr = missionNamespace getVariable 'rmx_var_3DWP_temp%1'; - _pos = worldToScreen (_arr select 2); - (_arr select 0) ctrlSetPosition _pos; - (_arr select 0) ctrlCommit 0; - _scale = linearConversion [0, (_arr select 1), player distance (_arr select 2), 1, 0, false]; - [(_arr select 0), _scale, 0] call BIS_fnc_ctrlSetScale; - }]; - [_id,'rmx_var_3DWP_temp%1'] - " - ,floor random 10000 - ]; + _rnd = format ["rmx_var_temp%1%2",floor random 100, ["A","B","C","D","E","F"] select random 5]; + uiNamespace setVariable [_rnd,[_ctrl, _loc,(ctrlPosition _ctrl),_dst/2]]; + _var = format ["uiNamespace getVariable '%1'",_rnd]; + + _id = addMissionEventHandler ['Draw3D',_var + "call epoch_gui3dWorldPosEH;"]; + _tick = diag_tickTime; while {(diag_tickTime - _tick) < _time} do { @@ -50,8 +40,8 @@ _this spawn { if ((player distance _loc) > _dst) exitWith {}; }; - removeMissionEventHandler ["Draw3D", _id select 0]; - missionNamespace setVariable [_id select 1, nil]; + removeMissionEventHandler ["Draw3D", _id]; + uiNamespace setVariable [_rnd, nil]; _ctrl call epoch_getIDC; ctrlDelete _ctrl; }; diff --git a/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf new file mode 100644 index 000000000..78983d52b --- /dev/null +++ b/Sources/epoch_code/gui/scripts/worldToScreen/Epoch_gui3DWorldPosEH.sqf @@ -0,0 +1,12 @@ +params ["_ctrl","_loc","_pos","_dst"]; +_pos2 = worldToScreen _loc; +if (_pos2 isEqualTo []) then {_pos2 = [-2,-2]}; +_pos set [0, (_pos2 select 0)-((_pos select 2)/2)]; +_pos set [1, (_pos2 select 1)-((_pos select 3)/2)]; +_ctrl ctrlSetPosition _pos; +_scale = linearConversion [0, _dst, player distance _loc, 0, 1, false]; +_ctrl ctrlSetFade _scale; +_ctrl ctrlCommit 0; + +//[_ctrl, _scale, 0] call BIS_fnc_ctrlSetScale; +true diff --git a/Sources/epoch_code/init/both_init.sqf b/Sources/epoch_code/init/both_init.sqf index c3776a769..53f618f1f 100644 --- a/Sources/epoch_code/init/both_init.sqf +++ b/Sources/epoch_code/init/both_init.sqf @@ -1,7 +1,7 @@ // Init Custom vars EPOCH_customVars = []; EPOCH_defaultVars = []; -_customVarsDefaults = [ +EPOCH_customVarsDefaults = [ ["Temp",98.6], ["Hunger",5000], ["Thirst",2500], @@ -15,9 +15,12 @@ _customVarsDefaults = [ ["Crypto",0], ["HitPoints",[0,0,0,0]], ["BloodP",100], - ["SpawnArray",[]] + ["SpawnArray",[]], + ["Karma",0], + ["Alcohol",0], + ["Radiation",0] ]; -_customVarsInit = ["CfgEpochClient", "customVarsDefaults", _customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2; +_customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2; { EPOCH_customVars pushBack (_x select 0); EPOCH_defaultVars pushBack (_x select 1); diff --git a/Sources/epoch_code/init/client_init.sqf b/Sources/epoch_code/init/client_init.sqf index 0f3e076a5..4ec06a4a7 100644 --- a/Sources/epoch_code/init/client_init.sqf +++ b/Sources/epoch_code/init/client_init.sqf @@ -11,6 +11,7 @@ EPOCH_group_level_img = ["x\addons\a3_epoch_code\data\owner.paa", "x\addons\a3_e if (isNil 'EPOCH_diag_fps') then { EPOCH_diag_fps = 0; }; +EPOCH_playerIsSwimming = false; EPOCH_lastTrash = diag_tickTime; EPOCH_tradeDone = false; EPOCH_bankBalance = 0; @@ -49,6 +50,7 @@ if(EPOCH_AirDropChance < 0)then{EPOCH_AirDropChance = 101;EPOCH_AirDropCheck = 9 EPOCH_droneRndChance = 100; // Custom Keys +EPOCH_keysActionPressed = false; //prevents EH spam 0 call EPOCH_clientKeyMap; //ON INIT and RESPAWN diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp new file mode 100644 index 000000000..38a40f824 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_core.hpp @@ -0,0 +1,27 @@ +class CfgActionMenu +{ + class variableDefines //must be global, nil when menu closes + { + dyna_cursorTarget = "([10] call EPOCH_fnc_cursorTarget)"; + dyna_cursorTargetType = "typeOf ([10] call EPOCH_fnc_cursorTarget)"; + dyna_inVehicle = "vehicle player != player"; + dyna_itemsPlayer = "items player"; + dyna_distance = "(player distance dyna_cursorTarget) < 5"; + + 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_locked = "locked dyna_cursorTarget in [2,3]"; + dyna_lockedInVehicle = "locked vehicle player in [2,3]"; + }; + + class self + { + #include "CfgActionMenu_self.hpp" + }; + + class target + { + #include "CfgActionMenu_target.hpp" + }; +}; diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp new file mode 100644 index 000000000..4a0a83e4f --- /dev/null +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp @@ -0,0 +1,21 @@ +class veh_lock +{ + condition = "dyna_inVehicle && !dyna_lockedInVehicle"; + action = "EPOCH_lockVehicle_PVS = [vehicle player, true, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock"; +}; +class veh_unLock +{ + condition = "dyna_inVehicle && dyna_lockedInVehicle"; + action = "EPOCH_lockVehicle_PVS = [vehicle player, false, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock"; +}; +class player_inspect +{ + condition = "true"; + action = "call EPOCH_lootTrash;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Examine"; +}; diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp new file mode 100644 index 000000000..230575d5c --- /dev/null +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp @@ -0,0 +1,117 @@ +//Build mode enabled +class build_upgrade +{ + condition = "dyna_buildMode select 0"; + //action = "dyna_cursorTarget call EPOCH_QuickUpgrade;"; //TODO: scripted dyna menu + action = ""; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_upgrade.paa"; + tooltip = "Upgrade"; + class special {}; //uses external config, hardcoded +}; +class build_remove +{ + condition = "dyna_buildMode select 1"; + action = "dyna_cursorTarget call EPOCH_removeBUILD;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_remove.paa"; + tooltip = "Remove"; +}; +class build_move +{ + condition = "dyna_buildMode select 2"; + action = "dyna_cursorTarget call EPOCH_fnc_SelectTargetBuild;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa"; + tooltip = "Move"; +}; + +//Vehicle interaction +class veh_gear +{ + condition = "dyna_isVehicle && !dyna_locked"; + action = "call Epoch_client_gearVehicle;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Inspect"; +}; +class veh_lock +{ + condition = "dyna_isVehicle && !dyna_locked"; + action = "EPOCH_lockVehicle_PVS = [dyna_cursorTarget, true, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock"; +}; +class veh_unLock +{ + condition = "dyna_isVehicle && dyna_locked"; + action = "EPOCH_lockVehicle_PVS = [dyna_cursorTarget, false, player, Epoch_personalToken]; publicVariableServer 'EPOCH_lockVehicle_PVS';"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock"; +}; + +//Trader interaction +class tra_talk +{ + condition = "dyna_isTrader"; + action = "dyna_cursorTarget call EPOCH_startInteractNPC;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\talk_blue.paa"; + tooltip = "Talk"; +}; +class tra_shop +{ + condition = "dyna_isTrader"; + action = "call EPOCH_startNPCTraderMenu;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\krypto.paa"; + tooltip = "Shop"; +}; + +//User action replacement +class maintain_jammer +{ + condition = "dyna_cursorTargetType isEqualTo 'PlotPole_EPOCH' && (damage dyna_cursorTarget < 1)"; + action = "dyna_cursorTarget call EPOCH_maintainIT;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; + tooltip = "Maintain"; +}; +//lock unlock +class unlock_lockbox +{ + condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock Lockbox"; +}; +class lock_lockbox +{ + condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock Lockbox"; +}; +class unlock_safe +{ + condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa"; + tooltip = "Unlock Safe"; +}; +class lock_safe +{ + condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "dyna_cursorTarget call Epoch_secureStorageHandler"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa"; + tooltip = "Lock Safe"; +}; + +//pack +class pack_lockbox +{ + condition = "(dyna_cursorTargetType in ['LockBox_EPOCH','LockBoxProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "EPOCH_packStorage_PVS = [dyna_cursorTarget,player,Epoch_personalToken]; publicVariableServer 'EPOCH_packStorage_PVS';"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_pack.paa"; + tooltip = "Pack Lockbox"; +}; +class pack_safe +{ + condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])"; + action = "EPOCH_packStorage_PVS = [dyna_cursorTarget,player,Epoch_personalToken]; publicVariableServer 'EPOCH_packStorage_PVS';"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_pack.paa"; + tooltip = "Pack Safe"; +}; diff --git a/Sources/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp b/Sources/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp new file mode 100644 index 000000000..799f73812 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgActionMenu/EXAMPLE.hpp @@ -0,0 +1,79 @@ +class CfgActionMenu +{ + /** GLOBAL VARIABLES ONLY - removed automatically **/ + class variableDefines //must be global, nil when menu closes + { + dyna_cursorTarget = "cursorTarget"; + dyna_typeOfCursorTarget = "typeOf cursorTarget"; + + dyna_player = "vehicle player"; + dyna_itemsPlayer = "items player"; + }; + + /** No cursor target **/ + class CfgActionMenu_self + { + class player_craftMenu + { + condition = "true"; + action = "call EPOCH_crafting_load;"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; + tooltip = "Crafting V2"; + }; + }; + + /** Has cursor target **/ + class CfgActionMenu_target + { + class player_inspect + { + condition = "dyna_typeOfCursorTarget isEqualTo 'someClassName'"; + action = "hint 'Detective is on the case'"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Examine"; + }; + }; +}; + +/** Sub-category example **/ +/* +class CAT_pad +{ + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(1,0,1,0.5)"; + tooltip = "Main cat"; + + class SUB_CAT_test1 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(1,1,1,0.5)"; + tooltip = "Subcat1"; + + class SUB_CAT_test2 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(1,0,0,0.5)"; + tooltip = "Subcat2"; + + class SUB_CAT_test3 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(0,1,1,0.5)"; + tooltip = "Subcat3"; + + class SUB_CAT_test4 + { + condition = "true"; //must be value + action = ""; //can be empty for categories + icon = "#(rgb,8,8,3)color(0,1,0,0.5)"; + tooltip = "Subcat4"; + }; + }; + }; + }; +}; +*/ \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgAmmo.hpp b/Sources/epoch_config/Configs/CfgAmmo.hpp index df8facf95..770d10f3b 100644 --- a/Sources/epoch_config/Configs/CfgAmmo.hpp +++ b/Sources/epoch_config/Configs/CfgAmmo.hpp @@ -1,5 +1,122 @@ +class CraterSpike { + class CraterSmokeCustom1 + { + simulation = "particles"; + type = "SpikeCraterEffect"; // CraterSmokeCustom + position[] = {0,0,0}; + intensity = 1; + interval = 0.1; + lifeTime = 0.5; + }; + class CraterSmokeCustom4 + { + simulation = "particles"; + type = "WoodChippings3"; // CraterSmokeCustom + position[] = {0,0,0}; + intensity = 1; + interval = 1; + lifeTime = 0.5; + }; + +}; + +class CraterMetal { + class CraterSmokeCustom1 + { + simulation = "particles"; + type = "SpikeCraterEffect"; // CraterSmokeCustom + position[] = {0,0,0}; + intensity = 1; + interval = 0.1; + lifeTime = 0.5; + }; + class CraterSmokeCustom2 + { + simulation = "particles"; + type = "ScrapsCraterEffect"; // CraterSmokeCustom + position[] = {0,0,0}; + intensity = 1; + interval = 0.1; + lifeTime = 0.5; + }; + class CraterSmokeCustom3 + { + simulation = "particles"; + type = "WoodChippings3"; // CraterSmokeCustom + position[] = {0,0,0}; + intensity = 1; + interval = 1; + lifeTime = 0.5; + }; + +}; + class CfgAmmo { + + class DirectionalBombBase; + class Spike_TRAP_AMMO_EPOCH: DirectionalBombBase + { + hit = 10; + indirectHit = 5; + indirectHitRange = 3; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\swing_box.p3d"; + mineModelDisabled = "\x\addons\a3_epoch_assets_3\CfgVehicles\swing_box.p3d"; + defaultMagazine = "APERSTripMine_Wire_Mag"; + icon = "iconExplosiveAP"; + + soundHit[] = {"a3\sounds_f\characters\movements\bodyfalls\bodyfall_concrete_2",2.5,1,150}; + soundTrigger[] = {"a3\sounds_f\arsenal\sfx\bullet_hits\body_08",0.56234133,1,40}; + soundActivation[] = {"",1,1,40}; + + minimumSafeZone = 0; + explosionAngle = 360; + explosionEffects = ""; + CraterEffects = "CraterSpike"; + whistleDist = 8; + cost = 200; + mineTrigger = "RangeTriggerBounding"; + mineInconspicuousness = 100; + + class CamShakeHit + { + power = 1; + duration = 1; + frequency = 20; + }; + }; + + class Metal_TRAP_AMMO_EPOCH: DirectionalBombBase + { + hit = 15; + indirectHit = 8; + indirectHitRange = 4; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\swing_box.p3d"; + mineModelDisabled = "\x\addons\a3_epoch_assets_3\CfgVehicles\swing_box.p3d"; + defaultMagazine = "APERSTripMine_Wire_Mag"; + icon = "iconExplosiveAP"; + + soundHit[] = {"a3\sounds_f\characters\movements\bodyfalls\bodyfall_concrete_2",2.5,1,150}; + soundTrigger[] = {"a3\sounds_f\arsenal\sfx\bullet_hits\body_08",0.56234133,1,40}; + soundActivation[] = {"a3\sounds_f\vehicles\boat\noises\Light_metal_boat_crash_wood_02",1,1,40}; + + minimumSafeZone = 0; + explosionAngle = 360; + explosionEffects = ""; + CraterEffects = "CraterMetal"; + whistleDist = 8; + cost = 200; + mineTrigger = "RangeTriggerBounding"; + mineInconspicuousness = 100; + + class CamShakeHit + { + power = 1.2; + duration = 1; + frequency = 20; + }; + }; + class BulletBase; class B_EnergyPack: BulletBase { @@ -150,13 +267,13 @@ class CfgAmmo timeToLive = 60; fuseDistance = 0; soundHit[] = { "", 0, 1 }; - + SmokeShellSoundLoop1[] = { "A3\Sounds_F\weapons\smokeshell\smoke_loop1", 0.12589253, 1, 70 }; SmokeShellSoundLoop2[] = { "A3\Sounds_F\weapons\smokeshell\smoke_loop2", 0.12589253, 1, 70 }; grenadeFireSound[] = {}; grenadeBurningSound[] = { "SmokeShellSoundLoop1", 0.5, "SmokeShellSoundLoop2", 0.5 }; - + impactGroundSoft[] = {}; impactGroundHard[] = {}; impactIron[] = {}; @@ -173,12 +290,12 @@ class CfgAmmo impactMetal[] = {}; impactMetalplate[] = {}; impactWater[] = {}; - + effectsSmoke = "SmokeShellWhiteEffect"; whistleDist = 0; smokeColor[] = { 0.039, 0.278, 0, 0.5 }; }; - + class B_Test_Caseless: BulletBase { hit = 10; @@ -254,4 +371,4 @@ class CfgAmmo soundHit[] = {"","db-90",1}; soundEngine[] = {"","db-80",4}; }; -}; \ No newline at end of file +}; diff --git a/Sources/epoch_config/Configs/CfgBaseBuilding.hpp b/Sources/epoch_config/Configs/CfgBaseBuilding.hpp index 62f214c26..4de1ff669 100644 --- a/Sources/epoch_config/Configs/CfgBaseBuilding.hpp +++ b/Sources/epoch_config/Configs/CfgBaseBuilding.hpp @@ -20,6 +20,14 @@ class CfgBaseBuilding { { removeParts[] = { { "PartPlankPack", 4 } }; }; + class Hesco3_EPOCH : Default + { + removeParts[] = { { "KitHesco3", 1 } }; + }; + class TankTrap_EPOCH : Default + { + removeParts[] = { { "KitTankTrap", 1 } }; + }; class SolarGen_EPOCH : Default { removeParts[] = { { "KitSolarGen", 1 } }; @@ -34,8 +42,13 @@ class CfgBaseBuilding { }; class WoodFloor_EPOCH : Default { + upgradeBuilding[] = { { "MetalFloor_EPOCH", { { "ItemCorrugatedLg", 2 } } } }; removeParts[] = { { "PartPlankPack", 2 } }; }; + class MetalFloor_EPOCH : Default + { + removeParts[] = { { "ItemCorrugatedLg", 2 } }; + }; class CinderWallGarage_EPOCH : Default { removeParts[] = { { "CinderBlocks", 4 }, { "ItemCorrugatedLg", 1 }, { "CircuitParts", 1 } }; diff --git a/Sources/epoch_config/Configs/CfgCloudlets.hpp b/Sources/epoch_config/Configs/CfgCloudlets.hpp index f2a388574..b81d2aa27 100644 --- a/Sources/epoch_config/Configs/CfgCloudlets.hpp +++ b/Sources/epoch_config/Configs/CfgCloudlets.hpp @@ -1,6 +1,101 @@ class CfgCloudlets { class Default; + + class SpikeCraterEffect: Default + { + interval = 0.001; + circleRadius = 0; + circleVelocity[] = {0,0,0}; + particleShape = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\spike.p3d"; + particleFSNtieth = 0; + particleFSIndex = 1; + particleFSFrameCount = 0; + particleFSLoop = 0; + angleVar = 1; + animationName = ""; + particleType = "spaceobject"; + timerPeriod = 1; + lifeTime = 20; + moveVelocity[] = {0,0,0}; + rotationVelocity = 1; + weight = 5; + volume = 1; + rubbing = 0.01; + size[] = {1,1}; + color[] = {{1,1,1,1},{1,1,1,0}}; + animationSpeed[] = {0}; + animationSpeedCoef = 1; + randomDirectionPeriod = 0.1; + randomDirectionIntensity = 0.05; + onTimerScript = ""; + beforeDestroyScript = ""; + destroyOnWaterSurface = 1; + destroyOnWaterSurfaceOffset = -0.1; + lifeTimeVar = 0; + position[] = {0, 0, 0}; + positionVar[] = {1,1,1}; + moveVelocityVar[] = {2,2,2}; + positionVarConst[] = {0, 0, 0}; + + rotationVelocityVar = 360; + sizeVar = 0; + colorVar[] = {0,0,0,0}; + randomDirectionPeriodVar = 0; + randomDirectionIntensityVar = 0; + + bounceOnSurface = 0.01; + bounceOnSurfaceVar = 0.01; + + }; + + class ScrapsCraterEffect: Default + { + interval = 0.002; + circleRadius = 0; + circleVelocity[] = {0,0,0}; + particleShape = "\x\addons\a3_epoch_assets\models\scraps.p3d"; + particleFSNtieth = 0; + particleFSIndex = 1; + particleFSFrameCount = 0; + particleFSLoop = 0; + angleVar = 1; + animationName = ""; + particleType = "spaceobject"; + timerPeriod = 1; + lifeTime = 20; + moveVelocity[] = {0,0,0}; + rotationVelocity = 1; + weight = 5; + volume = 1; + rubbing = 0.01; + size[] = {1,1}; + color[] = {{1,1,1,1},{1,1,1,0}}; + animationSpeed[] = {0}; + animationSpeedCoef = 1; + randomDirectionPeriod = 0.1; + randomDirectionIntensity = 0.05; + onTimerScript = ""; + beforeDestroyScript = ""; + destroyOnWaterSurface = 1; + destroyOnWaterSurfaceOffset = -0.1; + lifeTimeVar = 0; + position[] = {0, 0, 0}; + positionVar[] = {1,1,1}; + moveVelocityVar[] = {2,2,2}; + positionVarConst[] = {0, 0, 0}; + + rotationVelocityVar = 360; + sizeVar = 0; + colorVar[] = {0,0,0,0}; + randomDirectionPeriodVar = 0; + randomDirectionIntensityVar = 0; + + bounceOnSurface = 0.01; + bounceOnSurfaceVar = 0.01; + + }; + class ObjectDestructionFire1SmallxG: Default { interval = 0.01; @@ -210,7 +305,7 @@ class CfgCloudlets constantDistance = 1.0; damageType = "Fire"; }; - + /* class Blood1 : Default { @@ -334,4 +429,4 @@ class CfgCloudlets randomDirectionIntensityVar = 0; }; */ -}; \ No newline at end of file +}; diff --git a/Sources/epoch_config/Configs/CfgDynamicMenu-EXAMPLE.hpp b/Sources/epoch_config/Configs/CfgDynamicMenu-EXAMPLE.hpp deleted file mode 100644 index 3a0035edd..000000000 --- a/Sources/epoch_config/Configs/CfgDynamicMenu-EXAMPLE.hpp +++ /dev/null @@ -1,70 +0,0 @@ -//IMPORTANT - do not add semicolons here, script takes care of it - -class cfgDynamicMenu -{ - /** GLOBAL VARIABLES ONLY - removed automatically **/ - class variableDefines //must be global, nil when menu closes - { - dyna_cursorTarget = "cursorTarget"; - dyna_typeOfCursorTarget = "typeOf cursorTarget"; - - dyna_player = "vehicle player"; - dyna_itemsPlayer = "items player"; - }; - - /** BUTTON DEFINES **/ - class dynaButtons - { - class example /** Single button **/ - { - condition = "true"; //must be value - action = "hint 'example button'"; - icon = "#(rgb,8,8,3)color(1,1,1,0.5)"; - tooltip = "example button"; - }; - - class example2: example /** Single button from inherited values above **/ - { - icon = "#(rgb,8,8,3)color(1,0,1,0.5)"; - action = "systemchat 'example button 2'"; - }; - - /** ------------------------------ **/ - // Category works like a folder, when clicked, it replaces current buttons - // with fresh batch from it's own subclasses - /** ------------------------------ **/ - - class category_example /** Category button, add subclasses to enable this mode**/ - { - condition = "true"; //must be value - action = "hint 'Category button 1'"; //can be empty for categories - icon = "#(rgb,8,8,3)color(1,0,0,0.5)"; - tooltip = "Category button 1"; - - class category_subclass_example /** Same config as the rest **/ - { - condition = "true"; //must be value - action = "hint 'example category button 1'"; - icon = "#(rgb,8,8,3)color(1,1,1,0.5)"; - tooltip = "example button"; - }; - - class category_subclass_example2: category_subclass_example /** Subclass inheritance **/ - { - action = "hint 'example category button 2'"; - }; - }; - class category_example2: category_example /** Category Inheritance, includes all buttons **/ - { - action = "hint 'Category button 2'"; - tooltip = "Category button 2"; - class category_subclass_example2 /** REPLACE inherited button **/ - { - condition = "true"; //must be value - action = "hint 'inherited category button replaced'"; - icon = "#(rgb,8,8,3)color(1,1,1,0.5)"; - tooltip = "replaced button"; - }; - }; - }; -}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgDynamicMenu.hpp b/Sources/epoch_config/Configs/CfgDynamicMenu.hpp deleted file mode 100644 index 0015a2b4c..000000000 --- a/Sources/epoch_config/Configs/CfgDynamicMenu.hpp +++ /dev/null @@ -1,85 +0,0 @@ -//IMPORTANT - do not add semicolons here, script takes care of it - -class cfgDynamicMenu -{ - dyna_displayWhitelist[] = {}; - - /** GLOBAL VARIABLES ONLY - removed automatically **/ - class variableDefines //must be global, nil when menu closes - { - dyna_cursorTarget = "cursorTarget"; - dyna_typeOfCursorTarget = "typeOf cursorTarget"; - - dyna_player = "vehicle player"; - dyna_itemsPlayer = "items player"; - }; - - /** BUTTON DEFINES **/ - class dynaButtons - { - - /* - class close_Button_if_dialog_used_instead - { - condition = "true"; - action = "findDisplay 66600 closeDisplay 1"; - icon = "#(rgb,8,8,3)color(1,0,0,1)"; - tooltip = "CLOSE"; - }; - */ - class player_craftMenu - { - condition = "true"; - action = "call EPOCH_crafting_load;"; - icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_maintain.paa"; - tooltip = "Crafting V2"; - }; - class player_inspect - { - condition = "true"; - action = "hint 'Detective is on the case'"; - icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; - tooltip = "Examine"; - }; - - class CAT_pad - { - condition = "true"; //must be value - action = ""; //can be empty for categories - icon = "#(rgb,8,8,3)color(1,0,1,0.5)"; - tooltip = "Main cat"; - - class SUB_CAT_test1 - { - condition = "true"; //must be value - action = ""; //can be empty for categories - icon = "#(rgb,8,8,3)color(1,1,1,0.5)"; - tooltip = "Subcat1"; - - class SUB_CAT_test2 - { - condition = "true"; //must be value - action = ""; //can be empty for categories - icon = "#(rgb,8,8,3)color(1,0,0,0.5)"; - tooltip = "Subcat2"; - - class SUB_CAT_test3 - { - condition = "true"; //must be value - action = ""; //can be empty for categories - icon = "#(rgb,8,8,3)color(0,1,1,0.5)"; - tooltip = "Subcat3"; - - class SUB_CAT_test4 - { - condition = "true"; //must be value - action = ""; //can be empty for categories - icon = "#(rgb,8,8,3)color(0,1,0,0.5)"; - tooltip = "Subcat4"; - }; - }; - }; - }; - }; - }; -}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgEpochClient.hpp b/Sources/epoch_config/Configs/CfgEpochClient.hpp index 7fcae7cfa..d59251481 100644 --- a/Sources/epoch_config/Configs/CfgEpochClient.hpp +++ b/Sources/epoch_config/Configs/CfgEpochClient.hpp @@ -1,6 +1,6 @@ class CfgEpochClient { - epochVersion = "0.3.4.0"; + epochVersion = "0.3.5.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 @@ -38,7 +38,10 @@ class CfgEpochClient {"Crypto",0}, {"HitPoints",{0,0,0,0}}, {"BloodP",100}, - {"SpawnArray",{}} + {"SpawnArray",{}}, + {"Karma",0}, + {"Alcohol",0}, + {"Radiation",0} }; // controls max group limit and cost @@ -63,7 +66,7 @@ class CfgEpochClient { "cabinetPos", "Cabinet_EPOCH", false } }; - + #include "CfgEpochClient\takistan.hpp" #include "CfgEpochClient\australia.hpp" #include "CfgEpochClient\ProvingGrounds_PMC.hpp" diff --git a/Sources/epoch_config/Configs/CfgMagazines.hpp b/Sources/epoch_config/Configs/CfgMagazines.hpp index f5aecd33f..40687cbd5 100644 --- a/Sources/epoch_config/Configs/CfgMagazines.hpp +++ b/Sources/epoch_config/Configs/CfgMagazines.hpp @@ -72,7 +72,7 @@ class CfgMagazines interactText = "BUILD"; buildClass = "Safe_SIM_EPOCH"; }; - + class PartPlankPack: CA_Magazine { @@ -1052,6 +1052,33 @@ class CfgMagazines interactAttributes[] = {0,3000,0,0,0,0,0,0,0,0}; }; + class KitSpikeTrap: CA_Magazine + { + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa"; + displayName = "Wooden Spike Trap"; + scope = 2; + descriptionShort = "Wooden Spike Trap"; + count = 1; + mass = 20; + interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build + interactText = "BUILD"; + buildClass = "Spike_TRAP_SIM_EPOCH"; + }; + class KitMetalTrap: CA_Magazine + { + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa"; + displayName = "Metal Spike Trap"; + scope = 2; + descriptionShort = "Metal Spike Trap"; + count = 1; + mass = 20; + interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build + interactText = "BUILD"; + buildClass = "Metal_TRAP_SIM_EPOCH"; + }; + class KitStudWall: CA_Magazine { model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; @@ -1118,6 +1145,32 @@ class CfgMagazines interactText = "BUILD"; buildClass = "WoodRamp_EPOCH"; }; + class KitTankTrap : CA_Magazine + { + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa"; + displayName = "Tank Trap"; + scope = 2; + descriptionShort = "Tank Trap"; + count = 1; + mass = 20; + interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build + interactText = "BUILD"; + buildClass = "TankTrap_SIM_EPOCH"; + }; + class KitHesco3 : CA_Magazine + { + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + picture = "\x\addons\a3_epoch_assets_1\pictures\equip_wooden_crate_ca.paa"; + displayName = "Hesco Wide"; + scope = 2; + descriptionShort = "Hesco Wide"; + count = 1; + mass = 20; + interactAction = 3; // 0 = examine, 1 = eat, 2 = drink, 3 = build + interactText = "BUILD"; + buildClass = "Hesco3_EPOCH"; + }; class KitWoodLadder : CA_Magazine { model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; diff --git a/Sources/epoch_config/Configs/CfgMasterLoop.hpp b/Sources/epoch_config/Configs/CfgMasterLoop.hpp new file mode 100644 index 000000000..5b8a54c8c --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMasterLoop.hpp @@ -0,0 +1,42 @@ +class CfgMasterLoop +{ + class Init + { + file = "\x\addons\a3_epoch_code\compile\setup\masterLoop\init.sqf"; + }; + + class Events + { + condition = "alive player"; + file = "\x\addons\a3_epoch_code\compile\setup\masterLoop"; + + class Event1 + { + delay = 1; // in seconds + }; + class Event2 + { + delay = 10; + }; + class Event3 + { + delay = 15; + }; + class Event4 + { + delay = 30; + }; + class Event5 + { + delay = 60; + }; + class Event6 + { + delay = 300; + }; + class Event7 + { + delay = 600; + }; + }; +}; diff --git a/Sources/epoch_config/Configs/CfgPricing.hpp b/Sources/epoch_config/Configs/CfgPricing.hpp index 32e20f87c..1a746f383 100644 --- a/Sources/epoch_config/Configs/CfgPricing.hpp +++ b/Sources/epoch_config/Configs/CfgPricing.hpp @@ -47,7 +47,7 @@ class CfgPricing class 130Rnd_338_Mag{ price = 2; tax = 0.9; }; class 10Rnd_93x64_DMR_05_Mag { price = 2; tax = 0.9; }; class 10Rnd_127x54_Mag { price = 2; tax = 0.9; }; - + // Paint class PaintCanClear {price = 1;}; class PaintCanBlk {price = 1;}; @@ -104,7 +104,7 @@ class CfgPricing class Towelette {price = 1;}; class HeatPack {price = 2;}; class ColdPack {price = 2;}; - + class sr25_epoch { price = 50; }; class l85a2_epoch { price = 50; }; class l85a2_pink_epoch { price = 50; }; @@ -213,7 +213,7 @@ class CfgPricing class M14Grn_EPOCH {price = 150;}; class m4a3_EPOCH {price = 100;}; class AKM_EPOCH {price = 100;}; - + // new magazines kiory class 30rnd_556_magazine{ price = 5; tax = 0.9; }; class 20rnd_762_magazine{ price = 5; tax = 0.9; }; @@ -246,12 +246,12 @@ class CfgPricing class MeleeSledge {price = 50;}; class MeleeSword { price = 1111; }; class MeleeRod { price = 100; }; - + class CrudeHatchet { price = 5; }; class MeleeMaul { price = 10; }; class WoodClub { price = 5; }; class Plunger { price = 15; }; - + class 16Rnd_9x21_Mag {price = 2; tax = 0.9;}; class 30Rnd_9x21_Mag {price = 3; tax = 0.9;}; class 9Rnd_45ACP_Mag {price = 1; tax = 0.9;}; @@ -319,6 +319,8 @@ class CfgPricing // DLC muzzles class muzzle_snds_338_black { price = 3; }; class muzzle_snds_338_green { price = 3; }; + class muzzle_snds_338_sand { price = 3; }; + class muzzle_snds_93mmg { price = 3; }; class muzzle_snds_93mmg_tan { price = 3; }; @@ -356,13 +358,16 @@ class CfgPricing class KitWoodStairs {price = 10;}; class KitWoodTower {price = 10;}; class KitWoodRamp {price = 14;}; + class KitSpikeTrap {price = 25;}; + class KitMetalTrap {price = 25;}; + class KitTankTrap {price = 25;}; + class KitHesco3 { price = 25; }; class KitWoodLadder { price = 10; }; - class KitFirePlace {price = 4;}; class KitTiPi {price = 10;}; class KitShelf {price = 90;}; class KitWorkbench { price = 10; }; - + class KitWoodFoundation { price = 20; }; class KitFoundation {price = 90;}; class KitPlotPole {price = 300;}; @@ -490,7 +495,7 @@ class CfgPricing class U_C_Driver_1_yellow {price = 5;}; class U_C_Driver_1_orange {price = 5;}; - + class V_F0_EPOCH { price = 5; }; class V_F1_EPOCH { price = 5; }; class V_F2_EPOCH { price = 5; }; @@ -692,7 +697,7 @@ class CfgPricing class K02 {price = 300;}; class K03 {price = 300;}; class K04 {price = 300;}; - + //Mission Items class B_UavTerminal {price = 10;}; class O_UavTerminal {price = 10;}; diff --git a/Sources/epoch_config/Configs/CfgSnapChecks.hpp b/Sources/epoch_config/Configs/CfgSnapChecks.hpp new file mode 100644 index 000000000..d6d89148a --- /dev/null +++ b/Sources/epoch_config/Configs/CfgSnapChecks.hpp @@ -0,0 +1,53 @@ +// Snap Checks - EpochMod.com +class CfgSnapChecks { + class Hesco3_EPOCH { + 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}} + }; + }; + 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}} + }; + }; + class WoodWall1_EPOCH : WoodLargeWall_EPOCH {}; + class WoodWall2_EPOCH : WoodLargeWall_EPOCH {}; + class WoodWall3_EPOCH : WoodLargeWall_EPOCH {}; + class WoodWall4_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallCor_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallDoorway_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallDoor_EPOCH : WoodLargeWall_EPOCH {}; + class WoodLargeWallDoorL_EPOCH : WoodLargeWall_EPOCH {}; + class CinderWallGarage_EPOCH : WoodLargeWall_EPOCH {}; + class CinderWall_EPOCH : WoodLargeWall_EPOCH {}; + 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}}, + + {{2.5555,0,0.15},{2.5555,0,-0.15}}, + {{-2.5555,0,0.15},{-2.5555,0,-0.15}}, + {{0,-2.5555,0.15},{0,-2.5555,-0.15}}, + {{0,2.5555,0.15},{0,2.5555,-0.15}} + }; + }; + class MetalFloor_EPOCH : WoodFloor_Epoch {}; + class WoodStairs_EPOCH { + nails[] = { + {{0.1,0,0.05},{0.1,0,-0.20}}, + {{-0.1,0,0.05},{-0.1,0,-0.20}} + }; + }; + class WoodStairs2_EPOCH : WoodStairs_EPOCH {}; + class WoodTower_EPOCH : WoodStairs_EPOCH {}; + class WoodRamp_EPOCH : WoodStairs_EPOCH {}; +}; diff --git a/Sources/epoch_config/Configs/CfgVehicles.hpp b/Sources/epoch_config/Configs/CfgVehicles.hpp index c1d22c822..354714994 100644 --- a/Sources/epoch_config/Configs/CfgVehicles.hpp +++ b/Sources/epoch_config/Configs/CfgVehicles.hpp @@ -1927,7 +1927,7 @@ class CfgVehicles class TransportItems{}; class Eventhandlers{}; }; - + class I_MRAP_03_F; class I_MRAP_03_EPOCH : I_MRAP_03_F { @@ -1942,7 +1942,7 @@ class CfgVehicles typicalCargo[] = {}; class TransportItems{}; class Eventhandlers{}; - + class RenderTargets { class commander_display @@ -2359,7 +2359,7 @@ class CfgVehicles waterResistanceCoef = 0.8; waterAngularDampingCoef = 10; destrType = "DestructNo"; - + mapSize = 0.14; icon = "iconObject_2x3"; cost = 1000; @@ -2408,14 +2408,67 @@ class CfgVehicles cost = 1000; interactMode = 1; }; - /* - class Sword_SIM_EPOCH: Constructions_modular_F + + class Spike_TRAP_SIM_EPOCH: Constructions_modular_F { scope = 2; - model = "\x\addons\a3_epoch_assets\models\sword.p3d"; - displayName = "Sword"; + model = "\x\addons\a3_epoch_assets\models\sticks.p3d"; + displayName = "Spike Trap (SIM)"; + simulClass = "Spike_TRAP_SIM_EPOCH"; + staticClass = "Spike_TRAP_EPOCH"; + GhostPreview = "Spike_TRAP_EPOCH"; + limitNearby = 1; + bypassJammer = 1; }; - */ + + class Metal_TRAP_SIM_EPOCH: Constructions_modular_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets\models\sticks.p3d"; + displayName = "Metal Trap (SIM)"; + simulClass = "Metal_TRAP_SIM_EPOCH"; + staticClass = "Metal_TRAP_EPOCH"; + GhostPreview = "Metal_TRAP_EPOCH"; + limitNearby = 1; + bypassJammer = 1; + }; + + class TankTrap_SIM_EPOCH: Constructions_modular_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d"; + displayName = "Tank Trap (SIM)"; + simulClass = "TankTrap_SIM_EPOCH"; + staticClass = "TankTrap_EPOCH"; + GhostPreview = "TankTrap_EPOCH"; + limitNearby = 4; + bypassJammer = 1; + }; + + class Hesco3_SIM_EPOCH : Constructions_modular_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\hesco.p3d"; + displayName = "Hesco Wide (SIM)"; + simulClass = "Hesco3_SIM_EPOCH"; + staticClass = "Hesco3_EPOCH"; + GhostPreview = "Hesco3_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = { "C", "E", "W" }; + allowedSnapPoints[] = { "C", "E", "W" }; + allowedSnapObjects[] = { "Hesco3_EPOCH" }; + energyCost = 0.4; + slingLoadCargoMemoryPoints[] = {}; + limitNearby = 4; + bypassJammer = 1; + + /* + hiddenSelections[] = { "Camo" }; + hiddenSelectionsTextures[] = { "\x\addons\a3_epoch_assets\textures\hesco\hesco_co.paa" }; + hiddenSelectionsMaterials[] = { "\x\addons\a3_epoch_assets\textures\hesco\hesco.rvmat" }; + */ + }; + class SapperHead_SIM_EPOCH: Constructions_modular_F { scope = 2; @@ -2459,6 +2512,7 @@ class CfgVehicles simulClass = "Fireplace_SIM_EPOCH"; staticClass = "Fireplace_EPOCH"; GhostPreview = "Fireplace_EPOCH"; + isTemporary = 1; }; class Jack_SIM_EPOCH : Constructions_modular_F { @@ -2656,6 +2710,21 @@ class CfgVehicles energyCost = 0.2; slingLoadCargoMemoryPoints[] = { "N", "S", "E", "W" }; }; + class MetalFloor_SIM_EPOCH : Constructions_modular_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets_1\models\metal_floor.p3d"; + displayName = "Metal Floor"; + 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" }; + allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "C" }; + allowedSnapObjects[] = { "Const_floors_static_F", "Constructions_foundation_F" }; + energyCost = 0.5; + slingLoadCargoMemoryPoints[] = { "N", "S", "E", "W" }; + }; class WoodLargeWall_SIM_EPOCH: Constructions_modular_F { @@ -3587,6 +3656,7 @@ class CfgVehicles simulClass = "PlotPole_SIM_EPOCH"; model = "\x\addons\a3_epoch_assets\models\jammer.p3d"; + /* class UserActions { class MaintainIT @@ -3600,6 +3670,7 @@ class CfgVehicles statement = "this call EPOCH_maintainIT"; }; }; + */ removeParts[] = { { "KitPlotPole", 1 } }; bypassJammer = 1; interactMode = 1; @@ -3659,7 +3730,7 @@ class CfgVehicles }; */ - class Constructions_lockedstatic_F : NonStrategic + class Constructions_lockedstatic_F : WeaponHolder { mapSize = 1.27; author = "Epoch"; @@ -3672,6 +3743,12 @@ class CfgVehicles vehicleclass = "Epoch_objects"; destrType = "DestructBuilding"; cost = 1000; + // storage defaults + isGround = 0; + showWeaponCargo = 0; + forceSupply = 0; + maximumLoad = 600; + isSecureStorage = 1; }; class LockBox_EPOCH : Constructions_lockedstatic_F @@ -3684,10 +3761,12 @@ class CfgVehicles weaponHolderProxy = "LockBoxProxy_EPOCH"; GhostPreview = "LockBox_EPOCH"; armor = 5000; + maximumLoad = 600; bypassJammer = 1; limitNearby = 2; isSecureStorage = 1; returnOnPack[] = { { "ItemLockbox", 1 } }; + /* class UserActions { class Unlock @@ -3710,6 +3789,7 @@ class CfgVehicles statement = "EPOCH_packStorage_PVS = [this,player,Epoch_personalToken]; publicVariableServer ""EPOCH_packStorage_PVS"";"; }; }; + */ }; @@ -3723,12 +3803,15 @@ class CfgVehicles weaponHolderProxy = "SafeProxy_EPOCH"; GhostPreview = "Safe_EPOCH"; armor = 15000; + maximumLoad = 3600; bypassJammer = 1; limitNearby = 2; isSecureStorage = 1; returnOnPack[] = { { "ItemSafe", 1 } }; + /* class UserActions { + class Unlock { displayName = "Unlock"; @@ -3739,6 +3822,7 @@ class CfgVehicles condition = "(this getVariable[""EPOCH_secStorParent"", objNull]) getVariable [""EPOCH_Locked"",true]"; statement = "EPOCH_lockStorage_PVS = [this,false,player,Epoch_personalToken]; publicVariableServer ""EPOCH_lockStorage_PVS"";"; }; + class Pack { displayName = "Pack"; @@ -3748,7 +3832,86 @@ class CfgVehicles condition = "(this getVariable[""EPOCH_secStorParent"", objNull]) getVariable [""EPOCH_Locked"",true]"; statement = "EPOCH_packStorage_PVS = [this,player,Epoch_personalToken]; publicVariableServer ""EPOCH_packStorage_PVS"";"; }; + }; + */ + + }; + + + class TankTrap_EPOCH: Constructions_static_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d"; + displayName = "Tank Trap"; + simulClass = "TankTrap_SIM_EPOCH"; + staticClass = "TankTrap_EPOCH"; + GhostPreview = "TankTrap_EPOCH"; + energyCost = 0.2; + limitNearby = 4; + bypassJammer = 1; + }; + + class TRAP_EPOCH : Constructions_static_F {}; + class Spike_TRAP_EPOCH: Constructions_static_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets\models\sticks.p3d"; + displayName = "Spike Trap (SIM)"; + 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; + armor = 0.1 + }; + + class Metal_TRAP_EPOCH: Constructions_static_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets\models\sticks.p3d"; + displayName = "Metal Trap (SIM)"; + 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; + armor = 0.1 + }; + + class Hesco3_EPOCH: Const_All_Walls_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\hesco.p3d"; + displayName = "Hesco Wide"; + simulClass = "Hesco3_SIM_EPOCH"; + staticClass = "Hesco3_EPOCH"; + GhostPreview = "Hesco3_Ghost_EPOCH"; + snapType = "snapPointsPara"; + snapPointsPara[] = { "C", "E", "W" }; + allowedSnapPoints[] = { "C", "E", "W" }; + energyCost = 0.2; + limitNearby = 4; + bypassJammer = 1; + + /* + hiddenSelections[] = { "Camo" }; + hiddenSelectionsTextures[] = { "\x\addons\a3_epoch_assets\textures\hesco\hesco_co.paa" }; + hiddenSelectionsMaterials[] = { "\x\addons\a3_epoch_assets\textures\hesco\hesco.rvmat" }; + */ + + /* + selectionDamage = "zbytek"; + class Damage + { + tex[] = {}; + mat[] = { "x\addons\a3_epoch_assets\textures\cinder\cinder.rvmat", "x\addons\a3_epoch_assets\textures\cinder\cinder_destruct50.rvmat", "x\addons\a3_epoch_assets\textures\cinder\cinder_destruct50.rvmat" }; + }; + */ }; class WoodRamp_EPOCH : Constructions_static_F @@ -3792,7 +3955,7 @@ class CfgVehicles scope = 2; model = "\x\addons\a3_epoch_assets\models\cinder.p3d"; displayName = "Cinder Block Wall"; - upgradeBuilding[] = { "CinderWallGarage_EPOCH", { { "ItemCorrugatedLg", 1 }, { "CircuitParts", 1 } } }; + // upgradeBuilding[] = { "CinderWallGarage_EPOCH", { { "ItemCorrugatedLg", 1 }, { "CircuitParts", 1 } } }; simulClass = "CinderWall_SIM_EPOCH"; staticClass = "CinderWall_EPOCH"; GhostPreview = "CinderWall_EPOCH"; @@ -3801,7 +3964,7 @@ class CfgVehicles allowedSnapPoints[] = { "N", "S", "E", "W" }; energyCost = 0.4; armor = 10000; - removeParts[] = { { "CinderBlocks", 4 }, { "ItemRock", 2 } }; + }; class CinderWallGarage_EPOCH : Const_Cinder_static_F { @@ -3948,7 +4111,28 @@ class CfgVehicles snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"}; allowedSnapPoints[] = {"NF","SF","EF","WF","C"}; energyCost = 0.2; - removeParts[] = { { "PartPlankPack", 2 } }; + }; + class MetalFloor_EPOCH : Const_floors_static_F + { + scope = 2; + model = "\x\addons\a3_epoch_assets_1\models\metal_floor.p3d"; + displayName = "Metal Floor"; + 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" }; + allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "C" }; + energyCost = 0.5; + armor = 15000; + + selectionDamage = "zbytek"; + class Damage + { + tex[] = {}; + // TODO: make seperate rvmat for destruction check for issues due to camo zbytek applying to all mats + mat[] = { "x\addons\a3_epoch_assets_1\textures\metal_floor.rvmat", "x\addons\a3_epoch_assets\textures\PlyPlank_destruct50.rvmat", "x\addons\a3_epoch_assets\textures\PlyPlank_destruct50.rvmat" }; + }; }; // Wood wall seed item lvl 0 @@ -4024,6 +4208,20 @@ class CfgVehicles ladders[] = {}; }; + class MetalFloor_Ghost_EPOCH : Const_Ghost_EPOCH + { + scope = 2; + model = "\x\addons\a3_epoch_assets_1\models\metal_floor_ghost.p3d"; + displayName = "Metal Floor Ghost"; + staticClass = "MetalFloor_EPOCH"; + + snapPointsPara[] = { "NF", "SF", "EF", "WF", "C", "CB" }; + snapPointsPerp[] = { "N", "S", "E", "W", "CinN", "CinS", "CinE", "CinW" }; + allowedSnapPoints[] = { "NF", "SF", "EF", "WF", "C" }; + allowedSnapObjects[] = { "Const_floors_static_F", "Constructions_foundation_F" }; + + ladders[] = {}; + }; class WoodLadder_Ghost_EPOCH : Const_Ghost_EPOCH { @@ -4081,6 +4279,22 @@ class CfgVehicles ladders[] = {}; }; + + class Hesco3_Ghost_EPOCH : Const_Ghost_EPOCH + { + scope = 2; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\hesco_ghost.p3d"; + displayName = "Hesco Wide (Ghost)"; + staticClass = "Hesco3_EPOCH"; + + snapPointsPara[] = {}; + snapPointsPerp[] = {}; + allowedSnapPoints[] = { "C", "E", "W" }; + allowedSnapObjects[] = { "Hesco3_EPOCH" }; + + ladders[] = {}; + }; + class CinderWallHalf_Ghost_EPOCH : Const_Ghost_EPOCH { scope = 2; @@ -5073,60 +5287,9 @@ class CfgVehicles }; }; - class Secure_Storage_Proxy : WeaponHolder {}; - class LockBoxProxy_EPOCH : Secure_Storage_Proxy - { - scope = 2; - model = "\A3\Weapons_f\dummyweapon.p3d"; - displayName = "Lockbox WH"; - isGround = 0; - showWeaponCargo = 0; - forceSupply = 0; - maximumLoad = 600; - isSecureStorage = 1; - parentClass = "LockBox_EPOCH"; - - class UserActions - { - class Lock - { - displayName = "Lock"; - displayNameDefault = ""; - onlyforplayer = 1; - position = "Door_knopf"; - radius = 3; - condition = "this == this"; - statement = "EPOCH_lockStorage_PVS = [this,true,player,Epoch_personalToken]; publicVariableServer ""EPOCH_lockStorage_PVS"";"; - }; - }; - }; - - class SafeProxy_EPOCH : Secure_Storage_Proxy - { - scope = 2; - model = "\x\addons\a3_epoch_assets_1\models\safe_proxy.p3d"; - displayName = "Safe WH"; - isGround = 0; - showWeaponCargo = 0; - forceSupply = 0; - maximumLoad = 3600; - isSecureStorage = 1; - parentClass = "Safe_EPOCH"; - - class UserActions - { - class Lock - { - displayName = "Lock"; - displayNameDefault = ""; - onlyforplayer = 1; - position = "Door_knopf"; - radius = 3; - condition = "this == this"; - statement = "EPOCH_lockStorage_PVS = [this,true,player,Epoch_personalToken]; publicVariableServer ""EPOCH_lockStorage_PVS"";"; - }; - }; - }; + // class Secure_Storage_Proxy : WeaponHolder {}; + class LockBoxProxy_EPOCH : LockBox_EPOCH {}; + class SafeProxy_EPOCH : Safe_EPOCH {}; class CouchProxy_EPOCH: WeaponHolder { diff --git a/Sources/epoch_config/Configs/cfgCrafting.hpp b/Sources/epoch_config/Configs/cfgCrafting.hpp index 061737d59..35afc435b 100644 --- a/Sources/epoch_config/Configs/cfgCrafting.hpp +++ b/Sources/epoch_config/Configs/cfgCrafting.hpp @@ -263,14 +263,14 @@ class CfgCrafting }; class MortarBucket : Part { - usedIn[] = {"KitFoundation","KitCinderWall"}; + usedIn[] = {"KitFoundation","KitCinderWall", "KitHesco3"}; previewPosition[] = {0.799442,1,0.426761}; previewScale = 0.6; previewVector = 0; }; class ItemScraps : Item { - usedIn[] = { "ItemCorrugated" }; + usedIn[] = { "ItemCorrugated", "KitMetalTrap"}; nearby[] = {{"Fire", "", "fire", {1,{"ALL"}}, 3, 1, 1, 0}}; recipe[] = { { "PartOre", 2 } }; previewPosition[] = {0.797144,1,0.309158}; @@ -637,16 +637,17 @@ class CfgCrafting }; class ItemCorrugatedLg : Kit { - usedIn[] = { "VehicleRepairLg", "KitPlotPole" }; + usedIn[] = { "VehicleRepairLg", "KitPlotPole", "KitTankTrap", "KitHesco3" }; recipe[] = { { "ItemCorrugated", 3 } }; nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}}; previewPosition[] = {0.797491,1,0.32899}; previewScale = 0.25; previewVector = 0.5; }; + class PartPlankPack : Kit { - usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench"}; + usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench","KitSpikeTrap","KitMetalTrap"}; recipe[] = {{"WoodLog_EPOCH",2}}; previewPosition[] = {0.797837,1,0.288258}; previewScale = 0.2; @@ -661,6 +662,29 @@ class CfgCrafting previewScale = 0.2; previewVector = 1.5; }; + + + + class KitSpikeTrap : Kit + { + recipe[] = {{"PartPlankPack",4}}; + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}}; + previewPosition[] = {0.797675,1,0.398882}; + previewScale = 0.07; + previewVector = 0; + }; + class KitMetalTrap : Kit + { + recipe[] = {{"PartPlankPack",4}, {"ItemScraps",2}}; + model = "\x\addons\a3_epoch_assets_1\models\supply_crate.p3d"; + nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}}; + previewPosition[] = {0.797675,1,0.398882}; + previewScale = 0.07; + previewVector = 0; + }; + + class KitStudWall : Kit { recipe[] = {{"PartPlankPack",4}}; @@ -698,6 +722,24 @@ class CfgCrafting previewScale = 0.05; previewVector = 0; }; + class KitTankTrap : Kit + { + recipe[] = { { "ItemCorrugatedLg", 1 } }; + nearby[] = {{"Workbench", "", "workbench", {1,{"WorkBench_EPOCH"}}, 3, 1, 0, 1}}; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\tank_trap.p3d"; + previewPosition[] = { 0.803749, 1, 0.448515 }; + previewScale = 0.17; + previewVector = 0; + }; + class KitHesco3 : Kit + { + recipe[] = { { "MortarBucket", 2 }, { "ItemCorrugatedLg", 2 } }; + nearby[] = { { "Workbench", "", "workbench", { 1, { "WorkBench_EPOCH" } }, 3, 1, 0, 1 } }; + model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Defense\hesco.p3d"; + previewPosition[] = { 0.803749, 1, 0.448515 }; + previewScale = 0.02; + previewVector = 0; + }; class KitWoodStairs : Kit { recipe[] = {{"PartPlankPack",4}}; diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32310-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32310-01.paa new file mode 100644 index 000000000..c43d5cfe0 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32310-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32310-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32310-02.paa new file mode 100644 index 000000000..182f815ac Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32310-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32310-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32310-03.paa new file mode 100644 index 000000000..99a999e3c Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32310-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32310-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32310-04.paa new file mode 100644 index 000000000..ddc6dcd33 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32310-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32310.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32310.fxy new file mode 100644 index 000000000..e54046cc7 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32310.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32311-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32311-01.paa new file mode 100644 index 000000000..a126046c5 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32311-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32311-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32311-02.paa new file mode 100644 index 000000000..1fea30719 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32311-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32311-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32311-03.paa new file mode 100644 index 000000000..44cce0a59 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32311-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32311-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32311-04.paa new file mode 100644 index 000000000..89dc116df Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32311-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32311.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32311.fxy new file mode 100644 index 000000000..9304a1422 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32311.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32312-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32312-01.paa new file mode 100644 index 000000000..f87f93856 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32312-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32312-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32312-02.paa new file mode 100644 index 000000000..350fefe1d Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32312-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32312-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32312-03.paa new file mode 100644 index 000000000..be7c497be Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32312-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32312-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32312-04.paa new file mode 100644 index 000000000..f9bedab38 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32312-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32312.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32312.fxy new file mode 100644 index 000000000..b21dd4dad Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32312.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32313-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32313-01.paa new file mode 100644 index 000000000..6184034e1 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32313-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32313-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32313-02.paa new file mode 100644 index 000000000..b0ddb9107 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32313-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32313-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32313-03.paa new file mode 100644 index 000000000..5396c2947 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32313-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32313-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32313-04.paa new file mode 100644 index 000000000..f5b4807da Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32313-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32313.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32313.fxy new file mode 100644 index 000000000..8638a227e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32313.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32314-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32314-01.paa new file mode 100644 index 000000000..7cefb045d Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32314-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32314-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32314-02.paa new file mode 100644 index 000000000..7529ed8f5 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32314-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32314-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32314-03.paa new file mode 100644 index 000000000..7f19fdd53 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32314-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32314-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32314-04.paa new file mode 100644 index 000000000..d1ce3dcf2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32314-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32314.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32314.fxy new file mode 100644 index 000000000..ac619daf5 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32314.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32315-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32315-01.paa new file mode 100644 index 000000000..e847c41cc Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32315-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32315-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32315-02.paa new file mode 100644 index 000000000..e0b8ee082 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32315-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32315-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32315-03.paa new file mode 100644 index 000000000..019768c9a Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32315-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32315-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32315-04.paa new file mode 100644 index 000000000..35ecb9062 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32315-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32315.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32315.fxy new file mode 100644 index 000000000..86b8c1a29 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32315.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32316-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32316-01.paa new file mode 100644 index 000000000..9632249a7 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32316-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32316-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32316-02.paa new file mode 100644 index 000000000..6a74c403c Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32316-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32316-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32316-03.paa new file mode 100644 index 000000000..666904db2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32316-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32316-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32316-04.paa new file mode 100644 index 000000000..4b6fc74c2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32316-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32316.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32316.fxy new file mode 100644 index 000000000..52596def8 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32316.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32317-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32317-01.paa new file mode 100644 index 000000000..568b2cb00 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32317-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32317-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32317-02.paa new file mode 100644 index 000000000..68abeae8a Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32317-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32317-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32317-03.paa new file mode 100644 index 000000000..cf64b0383 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32317-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32317-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32317-04.paa new file mode 100644 index 000000000..c1b5d97f0 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32317-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32317.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32317.fxy new file mode 100644 index 000000000..4e2abfa9d Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32317.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32318-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32318-01.paa new file mode 100644 index 000000000..028fbbf93 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32318-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32318-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32318-02.paa new file mode 100644 index 000000000..0c4c4aada Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32318-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32318-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32318-03.paa new file mode 100644 index 000000000..f0d8d6a59 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32318-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32318-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32318-04.paa new file mode 100644 index 000000000..630000bf2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32318-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32318.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32318.fxy new file mode 100644 index 000000000..edd6a02f0 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32318.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32319-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32319-01.paa new file mode 100644 index 000000000..fff4cfff4 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32319-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32319-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32319-02.paa new file mode 100644 index 000000000..b10615b41 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32319-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32319-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32319-03.paa new file mode 100644 index 000000000..3a4101ed9 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32319-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32319-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32319-04.paa new file mode 100644 index 000000000..b4fab0601 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32319-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32319.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32319.fxy new file mode 100644 index 000000000..78a667165 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32319.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32320-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32320-01.paa new file mode 100644 index 000000000..a3a6a3983 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32320-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32320-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32320-02.paa new file mode 100644 index 000000000..3229445bf Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32320-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32320-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32320-03.paa new file mode 100644 index 000000000..4ad24b115 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32320-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32320-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32320-04.paa new file mode 100644 index 000000000..9dd228088 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32320-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32320.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32320.fxy new file mode 100644 index 000000000..d02f03cf9 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32320.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32321-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32321-01.paa new file mode 100644 index 000000000..ab75a6d8a Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32321-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32321-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32321-02.paa new file mode 100644 index 000000000..bb9dbefed Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32321-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32321-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32321-03.paa new file mode 100644 index 000000000..c3130eaaa Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32321-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32321-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32321-04.paa new file mode 100644 index 000000000..a144ee8af Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32321-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32321.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32321.fxy new file mode 100644 index 000000000..4270f013e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32321.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32322-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32322-01.paa new file mode 100644 index 000000000..f3eb091fc Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32322-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32322-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32322-02.paa new file mode 100644 index 000000000..6a7694a0c Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32322-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32322-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32322-03.paa new file mode 100644 index 000000000..9c20ce4dc Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32322-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32322-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32322-04.paa new file mode 100644 index 000000000..6e596679e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32322-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32322.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32322.fxy new file mode 100644 index 000000000..1aae93007 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32322.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32323-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32323-01.paa new file mode 100644 index 000000000..6e9d49acf Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32323-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32323-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32323-02.paa new file mode 100644 index 000000000..7126a42bd Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32323-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32323-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32323-03.paa new file mode 100644 index 000000000..498f909c7 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32323-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32323-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32323-04.paa new file mode 100644 index 000000000..d4b2b2632 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32323-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32323.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32323.fxy new file mode 100644 index 000000000..b003db9df Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32323.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32324-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32324-01.paa new file mode 100644 index 000000000..92eb79b4f Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32324-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32324-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32324-02.paa new file mode 100644 index 000000000..ca8e2cfac Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32324-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32324-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32324-03.paa new file mode 100644 index 000000000..37f4b207f Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32324-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32324-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32324-04.paa new file mode 100644 index 000000000..09fe1f648 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32324-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32324.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32324.fxy new file mode 100644 index 000000000..f043c930f Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32324.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32325-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32325-01.paa new file mode 100644 index 000000000..c470319c9 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32325-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32325-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32325-02.paa new file mode 100644 index 000000000..e96e09cb9 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32325-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32325-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32325-03.paa new file mode 100644 index 000000000..75a96ad80 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32325-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32325-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32325-04.paa new file mode 100644 index 000000000..31d8bd7b4 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32325-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32325.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32325.fxy new file mode 100644 index 000000000..5383236e5 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32325.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32326-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32326-01.paa new file mode 100644 index 000000000..eb8e1ffc7 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32326-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32326-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32326-02.paa new file mode 100644 index 000000000..ddbe36329 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32326-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32326-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32326-03.paa new file mode 100644 index 000000000..3149fcc4a Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32326-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32326-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32326-04.paa new file mode 100644 index 000000000..dfb2536d8 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32326-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32326.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32326.fxy new file mode 100644 index 000000000..166b37320 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32326.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32327-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32327-01.paa new file mode 100644 index 000000000..09ea5893e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32327-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32327-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32327-02.paa new file mode 100644 index 000000000..e9154cb2b Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32327-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32327-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32327-03.paa new file mode 100644 index 000000000..9bf1b3e13 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32327-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32327-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32327-04.paa new file mode 100644 index 000000000..56b4c9624 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32327-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32327.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32327.fxy new file mode 100644 index 000000000..8965d63ac Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32327.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32328-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32328-01.paa new file mode 100644 index 000000000..f45afaa1c Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32328-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32328-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32328-02.paa new file mode 100644 index 000000000..a57310bb8 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32328-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32328-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32328-03.paa new file mode 100644 index 000000000..fc7ca5388 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32328-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32328-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32328-04.paa new file mode 100644 index 000000000..e4c23a208 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32328-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32328.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32328.fxy new file mode 100644 index 000000000..d0f0973f4 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32328.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32329-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32329-01.paa new file mode 100644 index 000000000..f0a59138b Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32329-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32329-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32329-02.paa new file mode 100644 index 000000000..0b798430c Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32329-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32329-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32329-03.paa new file mode 100644 index 000000000..ad60a8625 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32329-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32329-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32329-04.paa new file mode 100644 index 000000000..c21f2faf0 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32329-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32329.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32329.fxy new file mode 100644 index 000000000..99657d4a3 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32329.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32330-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32330-01.paa new file mode 100644 index 000000000..170320af8 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32330-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32330-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32330-02.paa new file mode 100644 index 000000000..24782f7e1 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32330-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32330-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32330-03.paa new file mode 100644 index 000000000..a14ddf78d Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32330-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32330-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32330-04.paa new file mode 100644 index 000000000..cd38d3468 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32330-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32330.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32330.fxy new file mode 100644 index 000000000..db7d7e00a Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32330.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32331-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32331-01.paa new file mode 100644 index 000000000..fd33948a8 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32331-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32331-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32331-02.paa new file mode 100644 index 000000000..b042f71e2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32331-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32331-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32331-03.paa new file mode 100644 index 000000000..12092f0cb Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32331-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32331-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32331-04.paa new file mode 100644 index 000000000..e1da7cf18 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32331-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32331.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32331.fxy new file mode 100644 index 000000000..34992c696 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32331.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32334-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32334-01.paa new file mode 100644 index 000000000..96e17624e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32334-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32334-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32334-02.paa new file mode 100644 index 000000000..66a54faa5 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32334-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32334-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32334-03.paa new file mode 100644 index 000000000..d65ae40e4 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32334-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32334-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32334-04.paa new file mode 100644 index 000000000..57ee0f2c7 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32334-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32334.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32334.fxy new file mode 100644 index 000000000..76dffd9e0 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32334.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32335-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32335-01.paa new file mode 100644 index 000000000..731b9fa60 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32335-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32335-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32335-02.paa new file mode 100644 index 000000000..28d4e1875 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32335-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32335-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32335-03.paa new file mode 100644 index 000000000..9a5309d9a Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32335-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32335-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32335-04.paa new file mode 100644 index 000000000..16830a69e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32335-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32335.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32335.fxy new file mode 100644 index 000000000..a7bc90d45 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32335.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32337-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32337-01.paa new file mode 100644 index 000000000..1a246491e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32337-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32337-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32337-02.paa new file mode 100644 index 000000000..e4a32cb8f Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32337-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32337-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32337-03.paa new file mode 100644 index 000000000..f36a6d42d Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32337-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32337-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32337-04.paa new file mode 100644 index 000000000..3562134c1 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32337-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32337.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32337.fxy new file mode 100644 index 000000000..5b326724d Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32337.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32346-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32346-01.paa new file mode 100644 index 000000000..82b247e83 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32346-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32346-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32346-02.paa new file mode 100644 index 000000000..f01c812ff Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32346-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32346-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32346-03.paa new file mode 100644 index 000000000..b96e43e08 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32346-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32346-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT32346-04.paa new file mode 100644 index 000000000..4c61164c2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32346-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT32346.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT32346.fxy new file mode 100644 index 000000000..0d5985707 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT32346.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3236-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3236-01.paa new file mode 100644 index 000000000..cd694d96c Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3236-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3236-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3236-02.paa new file mode 100644 index 000000000..2614641df Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3236-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3236-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3236-03.paa new file mode 100644 index 000000000..6c88d2c75 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3236-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3236-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3236-04.paa new file mode 100644 index 000000000..ab6219163 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3236-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3236.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT3236.fxy new file mode 100644 index 000000000..72412a792 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3236.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3237-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3237-01.paa new file mode 100644 index 000000000..583b8c9ef Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3237-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3237-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3237-02.paa new file mode 100644 index 000000000..063df0b41 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3237-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3237-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3237-03.paa new file mode 100644 index 000000000..673d0b703 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3237-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3237-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3237-04.paa new file mode 100644 index 000000000..244dffe78 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3237-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3237.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT3237.fxy new file mode 100644 index 000000000..efb909231 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3237.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3238-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3238-01.paa new file mode 100644 index 000000000..7b7d43763 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3238-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3238-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3238-02.paa new file mode 100644 index 000000000..9716e4291 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3238-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3238-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3238-03.paa new file mode 100644 index 000000000..ebc0c2cd7 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3238-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3238-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3238-04.paa new file mode 100644 index 000000000..4169ac994 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3238-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3238.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT3238.fxy new file mode 100644 index 000000000..b1b82a71e Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3238.fxy differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3239-01.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3239-01.paa new file mode 100644 index 000000000..2d702e9b8 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3239-01.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3239-02.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3239-02.paa new file mode 100644 index 000000000..8fe497b42 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3239-02.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3239-03.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3239-03.paa new file mode 100644 index 000000000..454f58fc0 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3239-03.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3239-04.paa b/Sources/epoch_config/Data/Fonts/VT323/VT3239-04.paa new file mode 100644 index 000000000..fd8a9ace2 Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3239-04.paa differ diff --git a/Sources/epoch_config/Data/Fonts/VT323/VT3239.fxy b/Sources/epoch_config/Data/Fonts/VT323/VT3239.fxy new file mode 100644 index 000000000..8c1144bfe Binary files /dev/null and b/Sources/epoch_config/Data/Fonts/VT323/VT3239.fxy differ diff --git a/Sources/epoch_config/config.cpp b/Sources/epoch_config/config.cpp index dd6d66a4d..f19e196b8 100644 --- a/Sources/epoch_config/config.cpp +++ b/Sources/epoch_config/config.cpp @@ -18,7 +18,7 @@ class CfgPatches requiredAddons[] = { "a3_map_altis", "a3_map_stratis", "A3_epoch_assets_3", "a3_epoch_weapons", "epoch_objects", "A3_epoch_vehicles", "A3_epoch_assets_1", "A3_epoch_assets", "A3_Soft_F", "A3_Characters_F", "A3_Characters_F_Beta", "A3_Characters_F_EPA", "A3_Characters_F_EPB", "A3_Structures_F", "A3_Armor_F_Beta", "A3_Data_F", "A3_Weapons_F", "A3_Characters_F_Kart", "A3_Soft_F_Kart_Kart_01", "a2_epoch_weapons", "A3_Air_F_Gamma_UAV_01", "A3_Soft_F_Car", "A3_Soft_F_Heli_Car", "A3_Soft_F_Offroad_01", "A3_Soft_F_Quadbike", "A3_Soft_F_Heli_Quadbike", "A3_Soft_F_SUV", "A3_Soft_F_Heli_SUV", "A3_Boat_F_Boat_Transport_01", "A3_Soft_F_Truck", "A3_Soft_F_Heli_Truck", "A3_Soft_F_Bootcamp_Truck", "A3_Boat_F_Civilian_Boat", "A3_Air_F_Heli_Light_01", "A3_Air_F_Heli_Heli_Light_01", "A3_Air_F_Beta_Heli_Transport_01", "A3_Boat_F_SDV_01", "A3_Boat_F_Heli_SDV_01", "A3_Soft_F_MRAP_01", "A3_Soft_F_Heli_MRAP_01", "A3_Soft_F_HEMTT", "A3_Soft_F_Gamma_HEMTT", "A3_Soft_F_TruckHeavy", "A3_Soft_F_Gamma_TruckHeavy", "A3_Soft_F_EPC_Truck_03", "A3_Air_F_Heli_Light_02", "A3_Air_F_Beta_Heli_Transport_02", "A3_Air_F_EPB_Heli_Light_03", "A3_Air_F_Heli_Heli_Transport_04", "A3_Air_F_Heli_Heli_Transport_03", "A3_Animals_F_Dog", "A3_Animals_F_Rabbit", "A3_Animals_F_Chicken", "A3_Characters_F_Common", "A3_Structures_F_Ind_Transmitter_Tower", "a3_epoch_structures" }; magazines[] = { "30Rnd_test_mag", "5Rnd_rollins_mag", "CSGAS", "sledge_swing", "30Rnd_test_mag_Tracer", "EnergyPack", "1Rnd_Soda", "1Rnd_Food", "WoodLog_EPOCH", "PaintCanBlk", "PaintCanBlu", "PaintCanBrn", "PaintCanGrn", "PaintCanOra", "PaintCanPur", "PaintCanRed", "PaintCanTeal", "PaintCanYel" }; ammo[] = { "B_EnergyPack", "B_Swing", "Sapper_Charge_Ammo", "SapperB_Charge_Ammo", "B_Soda", "B_Food", "B_Test_Caseless", "ChainSaw_Bullet", "SmokeShellCustom" }; - epochVersion = "0.3.4.0"; + epochVersion = "0.3.5.0"; }; }; @@ -40,11 +40,11 @@ class CfgAddons #include "\x\addons\a3_epoch_config\Configs\cfgCrafting.hpp" #include "\x\addons\a3_epoch_config\Configs\cfgPricing.hpp" #include "\x\addons\a3_epoch_config\Configs\CfgEpochClient.hpp" +#include "\x\addons\a3_epoch_config\Configs\CfgMasterLoop.hpp" #include "\x\addons\a3_epoch_config\Configs\CfgBaseBuilding.hpp" +#include "\x\addons\a3_epoch_config\Configs\CfgSnapChecks.hpp" #include "\x\addons\a3_epoch_config\Configs\CfgBuildingLootPos.hpp" - -//gitmerge fix -#include "\x\addons\a3_epoch_config\Configs\CfgDynamicMenu.hpp" +#include "\x\addons\a3_epoch_config\Configs\CfgActionMenu\CfgActionMenu_core.hpp" #include "\x\addons\a3_epoch_config\Configs\CfgEpochConfiguration.hpp" class DefaultEventhandlers; @@ -105,8 +105,18 @@ class CfgAnimationSourceSounds class CfgCommands { // allowedHTMLLoadURIs[] += // think this adds to an existing array - allowedHTMLLoadURIs[] = + allowedHTMLLoadURIs[] = { "https://raw.githubusercontent.com/epochmodteam/epoch/test/changelog.html" //there are some issues with capitalization used in github links }; -}; \ No newline at end of file +}; + +class CfgFontFamilies +{ + class VT323 + { + fonts[] = {"x\addons\a3_epoch_config\Data\Fonts\VT323\VT3236","x\addons\a3_epoch_config\Data\Fonts\VT323\VT3237","x\addons\a3_epoch_config\Data\Fonts\VT323\VT3238","x\addons\a3_epoch_config\Data\Fonts\VT323\VT3239","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32310","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32311","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32312","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32313","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32314","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32315","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32316","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32317","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32318","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32319","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32320","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32321","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32322","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32323","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32324","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32325","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32326","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32327","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32328","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32329","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32330","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32331","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32334","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32335","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32337","x\addons\a3_epoch_config\Data\Fonts\VT323\VT32346"}; + spaceWidth = 0.7; + spacing = 0.2; + }; +}; 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 a69a21b85..a6087ddd6 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 @@ -8,12 +8,12 @@ private["_range", "_nearBy", "_target", "_soundIndex", "_sound"]; if !([_this select 0, _this select 3] call EPOCH_server_getPToken) exitWith{}; -_target = _this select 1; +_target = param [1,objNull]; if (isNull _target) exitWith {}; -_soundIndex = _this select 2; -_sound = EPOCH_sounds select _soundIndex; +_soundIndex = param [2,-1]; +_sound = EPOCH_sounds param [_soundIndex,-1]; -if (!isNil "_sound") then { +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]; { 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 eb8557c9d..0da78b0c4 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_loadBuildings.sqf @@ -49,10 +49,6 @@ for "_i" from 0 to _this do { _textureSlot = _arr select 4; }; - - - - // experiment with damage factor based on time only for now. _damage = ((1 - (_ttl / _maxTTL)) min 1) max 0; @@ -65,11 +61,22 @@ for "_i" from 0 to _this do { // remove old safes on && !(_class isKindOf 'Constructions_lockedstatic_F') if (isClass (configFile >> "CfgVehicles" >> _class) && (_damage < 1) && !(_class isKindOf 'Constructions_lockedstatic_F')) then { - _baseObj = createVehicle [_class, _location, [], 0, "CAN_COLLIDE"]; + _baseObj = createVehicle [_class, _location, [], 0, "CAN_COLLIDE"]; _baseObj setVectorDirAndUp _worldspace; _baseObj setposATL _location; + // spawn additional object for trap + _ammoClass = (configFile >> "CfgVehicles" >> _class >> "ammoClass"); + if(isText _ammoClass) then { + _ammoClass = getText _ammoClass; + _ammoObj = createVehicle [_ammoClass, _location, [], 0, "CAN_COLLIDE"]; + _ammoObj setVectorDirAndUp _worldspace; + _ammoObj setposATL _location; + _baseObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj]; + }; + + // set persistent Animations if (_arrCount >= 6) then{ _anims = _arr param[5, [], [[]]]; { @@ -77,8 +84,8 @@ for "_i" from 0 to _this do { } foreach(getArray(configFile >> "CfgVehicles" >> _class >> "persistAnimations")); }; - // TODO make config based - if (_class == "PlotPole_EPOCH") then { + // Handle Jammers and create marker if EPOCH_SHOW_JAMMERS set true. + if (_class isKindOf "PlotPole_EPOCH") then { if (EPOCH_SHOW_JAMMERS) then { _marker = createMarker[str(_location), _location]; _marker setMarkerShape "ICON"; 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 1b8b7cb4a..e9a31ff4a 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_maintBUILD.sqf @@ -60,7 +60,7 @@ if (typeOf _object == "PlotPole_EPOCH") then { }; }; if (_counter > _maintCount) exitWith{}; - } forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Secure_Storage_Proxy"], _buildingJammerRange]; + } forEach nearestObjects[_object, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange]; // effect crypto _playerCryptoLimit = [(configFile >> "CfgSecConf" >> "limits"), "playerCrypto", 25000] call EPOCH_fnc_returnConfigEntry; 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 7bb663fb6..214f54bba 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_removeBUILD.sqf @@ -43,7 +43,7 @@ if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ // if normal storage device dump items on ground. if (_building isKindOf "Buildable_Storage") then { - + // may not be needed but should prevent in DB. _wepsItemsCargo = weaponsItemsCargo _building; if (isNil "_wepsItemsCargo") then{ @@ -54,7 +54,7 @@ if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ _magsAmmoCargo = []; }; - // dump items on ground + // dump items on ground _inventory = [ _wepsItemsCargo, _magsAmmoCargo, @@ -103,7 +103,7 @@ if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ }; } forEach _x; - // add all attachments to vehicle + // add all attachments to vehicle // TODO replace with adding attachments directly to gun (Arma feature dependant) { _gwh addItemCargoGlobal[_x, 1]; @@ -148,6 +148,12 @@ if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ } else { + // Remove trap object + _ammoObj = _building getVariable ["EPOCH_TRAP_OBJ",objNull]; + if !(isNull _ammoObj) then { + deleteVehicle _ammoObj; + }; + [_building, _player] call EPOCH_server_save_killedBuilding; deleteVehicle _building; }; @@ -158,7 +164,7 @@ if (_vehSlot != -1 || _storageSlot != "ABORT" || _isTemporary == 1) then{ _gwh addMagazineCargoGlobal[_x select 0, _x select 1]; } forEach _removeParts; }; - + }; }; 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 d3ecef02d..a1dde6a28 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_saveBuilding.sqf @@ -31,65 +31,27 @@ if (isText _config) then { EPOCH_StorageSlotsCount = count EPOCH_StorageSlots; publicVariable "EPOCH_StorageSlotsCount"; - // Secure storage - if (getNumber(configFile >> "CfgVehicles" >> _staticClass >> "isSecureStorage") == 1) then{ - - // remove sim - _vehiclePos = getposATL _vehicle; - _vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle]; - deleteVehicle _vehicle; - - // create static dummy placeholder for secure storage - _newVehicle = createVehicle[_staticClass, _vehiclePos, [], 0, "CAN_COLLIDE"]; - _newVehicle setVectorDirAndUp _vectorDirAndUp; - _newVehicle setposATL _vehiclePos; - - if (!isNull _newVehicle) then{ - - _buildClass = getText(configFile >> "CfgVehicles" >> _staticClass >> "weaponHolderProxy"); - if (_buildClass != "") then{ - - // TODO need some sanity checks here - _storageObj = createVehicle[_buildClass, _vehiclePos, [], 0.0, "CAN_COLLIDE"]; - _storageObj setVectorDirAndUp _vectorDirAndUp; - _storageObj setposATL _vehiclePos; - - // set reference to storage object on dummy object - _newVehicle setVariable["EPOCH_secStorParent", _storageObj]; - _storageObj setVariable["EPOCH_secStorChild",_newVehicle]; - - _storageObj setVariable["EPOCH_Locked", false, true]; - _storageObj setVariable["STORAGE_OWNERS", [_plyrUID]]; - _storageObj setVariable["STORAGE_SLOT", _slot, true]; + // Secure and insecure storage + _vehiclePos = getposATL _vehicle; + _vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle]; + deleteVehicle _vehicle; - _storageObj call EPOCH_server_save_storage; - _storageObj call EPOCH_server_storageInit; + _storageObj = createVehicle[_staticClass, _vehiclePos, [], 0, "CAN_COLLIDE"]; + _storageObj setVectorDirAndUp _vectorDirAndUp; + _storageObj setposATL _vehiclePos; - diag_log format["STORAGE: %1 created storage %2 at %3", _plyrUID, _buildClass, _pos]; - - }; - }; - - // insecure storage - } else { - - _vehiclePos = getposATL _vehicle; - _vectorDirAndUp = [vectordir _vehicle, vectorup _vehicle]; - deleteVehicle _vehicle; - - _storageObj = createVehicle[_staticClass, _vehiclePos, [], 0, "CAN_COLLIDE"]; - _storageObj setVectorDirAndUp _vectorDirAndUp; - _storageObj setposATL _vehiclePos; + if (getNumber(configFile >> "CfgVehicles" >> _staticClass >> "isSecureStorage") == 1) then{ + _storageObj setVariable["EPOCH_Locked", false, true]; + }; - _storageObj setVariable["STORAGE_OWNERS", [_plyrUID]]; - _storageObj setVariable["STORAGE_SLOT", _slot, true]; + _storageObj setVariable["STORAGE_OWNERS", [_plyrUID]]; - _storageObj call EPOCH_server_save_storage; - _storageObj call EPOCH_server_storageInit; + _storageObj setVariable["STORAGE_SLOT", _slot, true]; - diag_log format["STORAGE: %1 created storage %2 at %3", _plyrUID, _staticClass, _vehiclePos]; + _storageObj call EPOCH_server_save_storage; + _storageObj call EPOCH_server_storageInit; - }; + diag_log format["STORAGE: %1 created storage %2 at %3 with slot %4", _plyrUID, _staticClass, _vehiclePos, _slot]; }; } else { 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 88f5883e9..5f8cfee04 100644 --- a/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf +++ b/Sources/epoch_server/compile/epoch_bases/EPOCH_server_simulSwap.sqf @@ -43,6 +43,16 @@ if (_objSlot != -1) then { }; }; + // spawn additional object for trap + _ammoClass = (configFile >> "CfgVehicles" >> _class >> "ammoClass"); + if (isText _ammoClass) then { + _ammoClass = getText _ammoClass; + _ammoObj = createVehicle [_ammoClass, _worldspace select 0, [], 0, "CAN_COLLIDE"]; + _ammoObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; + _ammoObj setposATL (_worldspace select 0); + _newObj setVariable ["EPOCH_TRAP_OBJ",_ammoObj]; + }; + _newObj setVectorDirAndUp [(_worldspace select 1),(_worldspace select 2)]; _newObj setposATL (_worldspace select 0); _newObj setDamage _damage; @@ -51,4 +61,4 @@ if (_objSlot != -1) then { }; }; }; -_return \ No newline at end of file +_return 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 b95b7de86..a472d5d61 100644 --- a/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf @@ -4,12 +4,33 @@ Epoch Mod - EpochMod.com All Rights Reserved. */ -private["_reject", "_plyr", "_instanceID", "_plyrNetID", "_plyrUID", "_response", "_arr", "_defaultUniform", "_class", "_vest", "_medical", "_alreadyDead", "_worldspace", "_dir", "_location", "_prevInstance", "_plyrGroup", "_canBeRevived", "_vars", "_hitpoints", "_group", "_newPlyr", "_currWeap", "_apperance", "_goggles", "_headgear", "_backpack", "_uniform", "_weaponsAndItems", "_equipped", "_weapon", "_type", "_attachments", "_attachment", "_wMags", "_itemSlot", "_itemqtys", "_found", "_contentArray", "_deadPlayer"]; +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","_contentArray","_plyrGroup","_response","_reject","_fnc_addItemToX","_worldspace","_prevInstance","_medical","_server_vars","_hitpoints","_deadPlayer","_alreadyDead","_newPlyr","_plyrUID","_serverSettingsConfig","_plyr","_instanceID","_plyrNetID"]; _reject = true; +_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 (typename _this == "ARRAY") then { + // load server settings + _serverSettingsConfig = configFile >> "CfgEpochServer"; + _plyr = _this select 0; _instanceID = call EPOCH_fn_InstanceID; @@ -26,31 +47,43 @@ if (typename _this == "ARRAY") then { if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then { _arr = (_response select 1); }; - _defaultUniform = "U_Test_uniform"; + + // Apperance defaults + _uniform = [_serverSettingsConfig, "defaultUniformFemale", "U_Test_uniform"] call EPOCH_fnc_returnConfigEntry; _class = "Epoch_Female_F"; - _vest = "V_F41_EPOCH"; + _vest = [_serverSettingsConfig, "defaultVestFemale", "V_F41_EPOCH"] call EPOCH_fnc_returnConfigEntry; if (_this select 1) then { //true == male - _defaultUniform = "U_Test1_uniform"; + _uniform = [_serverSettingsConfig, "defaultUniformMale", "U_Test1_uniform"] call EPOCH_fnc_returnConfigEntry; _class = "Epoch_Male_F"; - _vest = "V_41_EPOCH"; + _vest = [_serverSettingsConfig, "defaultVestMale", "V_41_EPOCH"] call EPOCH_fnc_returnConfigEntry; }; + _goggles = [_serverSettingsConfig, "defaultGoggles", ""] call EPOCH_fnc_returnConfigEntry; + _headgear = [_serverSettingsConfig, "defaultHeadgear", ""] call EPOCH_fnc_returnConfigEntry; + _backpack = [_serverSettingsConfig, "defaultBackpack", ""] call EPOCH_fnc_returnConfigEntry; + + // Inventory defaults + _linkedItems = [_serverSettingsConfig, "linkedItems", ["ItemMap","EpochRadio0"]] call EPOCH_fnc_returnConfigEntry; + _itemsInContainers = [_serverSettingsConfig, "itemsInContainers", []] call EPOCH_fnc_returnConfigEntry; + _weaponsInContainers = [_serverSettingsConfig, "weaponsInContainers", []] call EPOCH_fnc_returnConfigEntry; + _normalMagazines = [_serverSettingsConfig, "normalMagazines", []] call EPOCH_fnc_returnConfigEntry; + _weaponsAndItems = [_serverSettingsConfig, "weaponsAndItems", ["", []]] call EPOCH_fnc_returnConfigEntry; + + diag_log format["DEBUG (Load Player) _linkedItems 1: %1", _linkedItems]; if (count _arr < 11) then { // invaild format attempt to override - _arr = [[0, [], _instanceID], [0, 0, 1, 0, []], ["", "", _vest, "", _defaultUniform, _class], [""], [] + EPOCH_defaultVars_SEPXVar, ["", []], ["ItemMap"], [], [], [], "", true]; + _arr = [[0, [], _instanceID], [0, 0, 1, 0, []], [_goggles, _headgear, _vest, _backpack, _uniform, _class], [""], [] + EPOCH_defaultVars_SEPXVar, _weaponsAndItems, _linkedItems, _normalMagazines, _itemsInContainers, _weaponsInContainers, "", true]; }; _worldspace = _arr select 0; _dir = _worldspace select 0; _location = _worldspace select 1; _prevInstance = _worldspace select 2; - _medical = _arr select 1; + _server_vars = _arr select 3; + _vars = _arr select 4; _plyrGroup = _arr select 10; _canBeRevived = _arr select 11; - - _server_vars = _arr select 3; - _vars = _arr select 4; _hitpoints = _vars select 11; @@ -76,12 +109,13 @@ if (typename _this == "ARRAY") then { }; } forEach allUnits; + // find existing group if (_plyrGroup != "") then { - { - if ((_x getVariable["GROUP", ""]) == _plyrGroup) exitWith{ - _group = group _x; - }; - } forEach playableUnits; + { + if ((_x getVariable["GROUP", ""]) == _plyrGroup) exitWith{ + _group = group _x; + }; + } forEach playableUnits; }; if (isNull _group) then { @@ -117,63 +151,64 @@ if (typename _this == "ARRAY") then { _backpack = _apperance select 3; _uniform = _apperance select 4; - if (_uniform != "") then { - _newPlyr addUniform _uniform; - }; - if (_backpack != "") then { - _newPlyr addBackpack _backpack; - }; - if (_goggles != "") then { - _newPlyr addGoggles _goggles; - }; - if (_headgear != "") then { - _newPlyr addHeadgear _headgear; - }; - if (_vest != "") then { - _newPlyr addVest _vest; - }; - // Weapons _weaponsAndItems = _arr select 5; - if (count _weaponsAndItems >= 2) then { - - _equipped = _weaponsAndItems select 2; - { - _weapon = _x deleteAt 0; - _type = getNumber(configfile >> "cfgweapons" >> _weapon >> "type"); - - _attachments = []; - _wMags = false; - _wMagsArray = []; - // suppressor, laser, optics, magazines(array), bipods - { - // magazines - if (typeName(_x) == "ARRAY") then{ - _wMags = true; - _wMagsArray = _x; - } - else { - // attachments - if (_x != "") then{ - _attachments pushBack _x; - }; - }; - } forEach _x; - - // add weapon if equiped - if (_weapon in _equipped) then { - - _equipped = _equipped - [_weapon]; + _linkedItems = _arr select 6; + _normalMagazines = _arr select 7; + _itemsInContainers = _arr select 8; + _weaponsInContainers = _arr select 9; + }; - if (_wMags) then { - _newPlyr addMagazine _wMagsArray; - }; + // Load Apperance START + if (_uniform != "") then { + _newPlyr addUniform _uniform; + }; + if (_backpack != "") then { + _newPlyr addBackpack _backpack; + }; + if (_goggles != "") then { + _newPlyr addGoggles _goggles; + }; + if (_headgear != "") then { + _newPlyr addHeadgear _headgear; + }; + if (_vest != "") then { + _newPlyr addVest _vest; + }; + // Load Apperance END - if (_weapon != "") then { - _newPlyr addWeapon _weapon; + // Load inventory + defaults START + if (count _weaponsAndItems >= 2) then { + _equipped = _weaponsAndItems select 2; + { + _weapon = _x deleteAt 0; + _type = getNumber(configfile >> "cfgweapons" >> _weapon >> "type"); + _attachments = []; + _wMags = false; + _wMagsArray = []; + // suppressor, laser, optics, magazines(array), bipods + { + // magazines + if (typeName(_x) == "ARRAY") then{ + _wMags = true; + _wMagsArray = _x; + } else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; }; - - switch _type do { + }; + } forEach _x; + // add weapon if equiped + if (_weapon in _equipped) then { + _equipped = _equipped - [_weapon]; + if (_wMags) then { + _newPlyr addMagazine _wMagsArray; + }; + if (_weapon != "") then { + _newPlyr addWeapon _weapon; + }; + switch _type do { case 1: { // primary removeAllPrimaryWeaponItems _newPlyr; { _newPlyr addPrimaryWeaponItem _x } forEach _attachments; @@ -187,69 +222,41 @@ if (typename _this == "ARRAY") then { { _newPlyr removeSecondaryWeaponItem _x; } forEach (secondaryWeaponItems _newPlyr); + { _newPlyr addSecondaryWeaponItem _x } forEach _attachments; }; - }; - } - else { // overflow need to add these items to storage - { - _newPlyr addItem _x; - } forEach _attachments; - - if (_wMags) then { - _newPlyr addMagazine _wMagsArray; - }; }; - } forEach(_weaponsAndItems select 1); - - _currWeap = _weaponsAndItems select 0; - }; - - // Linked items - { - if (_x in["Binocular", "Rangefinder"]) then { - _newPlyr addWeapon _x; - } - else { - _newPlyr linkItem _x; + } else { + // overflow need to add these items to storage + { + _newPlyr addItem _x; + } forEach _attachments; + if (_wMags) then { + _newPlyr addMagazine _wMagsArray; + }; }; - } forEach(_arr select 6); + } forEach(_weaponsAndItems select 1); + _currWeap = _weaponsAndItems select 0; + }; + // Linked items + { + if (_x in["Binocular", "Rangefinder"]) then { + _newPlyr addWeapon _x; + } else { + _newPlyr linkItem _x; + }; + } forEach _linkedItems; + diag_log format["DEBUG (Load Player) _linkedItems: %1", _linkedItems]; - // 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 }; - }; - }; - } forEach(_x select 0); - } forEach(_arr select 8); + // add items to containers + [_newPlyr, _itemsInContainers] 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 }; - }; - }; - } forEach(_x select 0); - } forEach(_arr select 9); + // add weapons to containers + [_newPlyr, _weaponsInContainers] call _fnc_addItemToX; - // Add magazines - { - _newPlyr addMagazine _x; - } forEach(_arr select 7); - }; + // Add magazines + {_newPlyr addMagazine _x} forEach _normalMagazines; + // Load inventory + defaults END // Final Push if (isNull _plyr) then { @@ -292,9 +299,6 @@ if (typename _this == "ARRAY") then { }; diag_log format["DEBUG (Load Player) Set Group: %1", _plyrGroup]; }; - - // may not be needed, just here to see if we can force the data to sync quicker - // _plyr setPosATL _location; _newPlyr setVariable["SETUP", true]; _newPlyr setVariable["PUID", _plyrUID]; 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 ef5ca42ef..9ddee61c2 100644 --- a/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf +++ b/Sources/epoch_server/compile/epoch_traders/EPOCH_server_loadTraders.sqf @@ -93,6 +93,7 @@ for "_i" from 0 to _this do { if (_arr isEqualTo [[], []]) then{ _arr = EPOCH_starterTraderItems; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX; }; _agent setVariable ["AI_ITEMS", _arr, true]; @@ -162,8 +163,46 @@ for "_i" from 0 to _this do { _arr = (_response select 1); if (_arr isEqualTo []) then { - _arr = [[],[]]; + _arr = [[], []]; }; + + _toBeRemoved = []; + // count vehicles + { + _limit = ["CfgTraderLimits", _x, 100] call EPOCH_fnc_returnConfigEntryV2; + _currentStock = (_arr select 1) param[_forEachIndex, 0]; + if (_limit == 0) then { + // mark for removal since limit is 0 + _toBeRemoved pushBack _forEachIndex; + _currentStock = 0; + } else { + // lower to limit current qty is over limit + if (_currentStock > _limit) then { + (_arr select 1) set [_forEachIndex,_limit]; + _currentStock = _limit; + }; + }; + if (_x isKindOf "Air" || _x isKindOf "Ship" || _x isKindOf "LandVehicle" || _x isKindOf "Tank") then { + if (EPOCH_storedVehicleCount <= _storedVehicleLimit) then { + EPOCH_storedVehicleCount = EPOCH_storedVehicleCount + _currentStock; + } else { + _toBeRemoved pushBack _forEachIndex; + }; + + }; + } forEach (_arr select 0); + + // remove any marked for removal + { + (_arr select 0) deleteAt _x; + (_arr select 1) deleteAt _x + } forEach _toBeRemoved; + + if (_arr isEqualTo [[], []]) then{ + _arr = EPOCH_starterTraderItems; + ["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, _arr] call EPOCH_fnc_server_hiveSETEX; + }; + }; _agent setVariable ["AI_ITEMS", _arr, true]; 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 787d16742..b920a5ee1 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_storage.sqf @@ -23,10 +23,16 @@ for "_i" from 1 to _this do { EPOCH_StorageSlots deleteAt _storageSlotIndex; - _class = _arr select 0; + _class_raw = _arr select 0; _damage = _arr select 2; _inventory = _arr select 3; + _class = switch (_class_raw) do { + case "LockBoxProxy_EPOCH": { "LockBox_EPOCH" }; + case "SafeProxy_EPOCH": { "Safe_EPOCH" }; + default { _class_raw }; + }; + if (typeName(_inventory) != "ARRAY") then { _inventory = []; }; _worldspace = _arr select 1; @@ -47,7 +53,6 @@ for "_i" from 1 to _this do { _location = (_location select 0) vectorAdd(_location select 1); }; - // set to ground if only x,y if (count _location == 2) then { _location set [2, 0]; @@ -60,25 +65,6 @@ for "_i" from 1 to _this do { _vehicle = createVehicle[_class, _location, [], 0, "CAN_COLLIDE"]; - // if proxy create visable safe - if (_class isKindOf "Secure_Storage_Proxy") then { - _dummyClass = getText(configFile >> "CfgVehicles" >> _class >> "parentClass"); - _dummyVehicle = createVehicle [_dummyClass, _location, [], 0, "CAN_COLLIDE"]; - - if (typeName _dir == "ARRAY") then { - _dummyVehicle setVectorDirAndUp _dir; - } else { - _dummyVehicle setDir _dir; - }; - - _dummyVehicle setposATL _location; - - // used on save to get ref to storage object - _dummyVehicle setVariable ["EPOCH_secStorParent", _vehicle]; - // used on save to get loction of dummy object - _vehicle setVariable["EPOCH_secStorChild",_dummyVehicle]; - }; - if (typeName _dir == "ARRAY") then { _vehicle setVectorDirAndUp _dir; } else { @@ -119,12 +105,9 @@ for "_i" from 1 to _this do { if (count _arr >= 6) then { _vehicle setVariable ["STORAGE_OWNERS", _arr select 5]; - if (_class isKindOf 'Secure_Storage_Proxy') then{ - - // TODO: could be used to unlock safe? + if (_class isKindOf 'Constructions_lockedstatic_F') then{ + // set locked state of secure storage if ((_arr select 6) != -1) then { - _location set [2, -10]; - _vehicle setPosATL _location; _vehicle setVariable["EPOCH_Locked", true, true]; }; }; @@ -240,6 +223,6 @@ for "_i" from 1 to _this do { EPOCH_StorageSlotsCount = count EPOCH_StorageSlots; publicVariable "EPOCH_StorageSlotsCount"; -diag_log format ["Storage SPAWN TIMER %1", diag_tickTime - _diag]; +diag_log format ["Storage SPAWN TIMER: %1 slots left: %2", diag_tickTime - _diag, EPOCH_StorageSlotsCount]; true 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 9161472bf..859a7467a 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_load_vehicles.sqf @@ -55,7 +55,7 @@ for "_i" from 1 to _this do { _vehicle call EPOCH_server_setVToken; _vehicle setposATL _location; - + _vehicle setVectorDirAndUp _worldspace; _vehicle setDamage _damage; @@ -248,6 +248,6 @@ if (_immuneVehicleSpawn) then{ addToRemainsCollector _allVehicles; -diag_log format ["VEH SPAWN TIMER %1, LOADED 2% VEHICLES", diag_tickTime - _diag, count _allVehicles]; +diag_log format ["VEH SPAWN TIMER %1, LOADED %2 VEHICLES", diag_tickTime - _diag, count _allVehicles]; true diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_killedBuilding.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_killedBuilding.sqf index aa8728898..50ff34c1f 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_killedBuilding.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_killedBuilding.sqf @@ -7,6 +7,13 @@ if (!isNull _building) then { _vehSlot = _building getVariable["BUILD_SLOT", -1]; if (_vehSlot != -1) then { + + // Set off trap object + _ammoObj = _building getVariable ["EPOCH_TRAP_OBJ",objNull]; + if !(isNull _ammoObj) then { + _ammoObj setDamage 1; + }; + _vehHiveKey = format ["%1:%2", (call EPOCH_fn_InstanceID), _vehSlot]; ["Building", _vehHiveKey, []] call EPOCH_fnc_server_hiveSET; EPOCH_BuildingSlots set [_vehSlot, 0]; diff --git a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_storage.sqf b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_storage.sqf index 67bb62e57..840ae859d 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_storage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_save_storage.sqf @@ -54,13 +54,6 @@ if (!isNull _this) then { _locked = if (_vehicle getVariable["EPOCH_Locked", true]) then {1} else {-1}; - // get position of dummy safe instead of proxy position - _storageChild = _vehicle getVariable["EPOCH_secStorChild",objNull]; - if !(isNull _storageChild) then { - _vehiclePos = getposATL _storageChild; - _vehicle = _storageChild; - }; - _worldspace = [(_vehiclePos call EPOCH_precisionPos), vectordir _vehicle, vectorup _vehicle]; _VAL = [_class, _worldspace, _damage, _inventory, _colorSlot, _storageOwners, _locked]; 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 6ace542ad..7b5f5ae06 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockStorage.sqf @@ -14,29 +14,20 @@ _plyrGroup = _plyr getVariable ["GROUP",""]; // functions _fnc_lock = { _this setVariable ["EPOCH_Locked", true, true]; - _currentPos = getPosATL _this; - _currentPos set[2, -10]; - _this setPosATL _currentPos; // force save on lock if !(_this in EPOCH_saveStorQueue) then { EPOCH_saveStorQueue pushBack _this }; }; _fnc_unlock = { - _weaponHolder = _this getVariable["EPOCH_secStorParent", objNull]; - diag_log format["DEBUG: Unlock _weaponHolder %1", _weaponHolder]; - if (!isNull _weaponHolder) then { - _weaponHolder setVariable ["EPOCH_Locked", false, true]; - _weaponHolder setPosATL (getPosATL _this); - }; + _this setVariable ["EPOCH_Locked", false, true]; }; // functions if (getNumber(configFile >> "CfgVehicles" >> _type >> "isSecureStorage") == 1) then{ - // direct ref to proxy - if (_type isKindOf "Secure_Storage_Proxy") then { + _owners = _unit getVariable["STORAGE_OWNERS", []]; - _owners = _unit getVariable["STORAGE_OWNERS", []]; - //diag_log format["_owners2 %1", _owners]; + // locked > unlocked + if !(_unit getVariable ["EPOCH_Locked", true]) then { // allow group members and owner access if (_plyrGroup != "") then { @@ -63,43 +54,30 @@ if (getNumber(configFile >> "CfgVehicles" >> _type >> "isSecureStorage") == 1) t }; }; - - // ref Dummy obj + // unlocked > locked } else { - _weaponHolder = _unit getVariable["EPOCH_secStorParent", objNull]; - //diag_log format["DEBUG: SecStor _weaponHolder %1", _weaponHolder]; - - if (!isNull _weaponHolder) then { - _owners = _weaponHolder getVariable["STORAGE_OWNERS", []]; - //diag_log format["_owners %1", _owners]; - - // allow group members and owner access - if (_plyrGroup != "") then { - if (_plyrGroup in _owners) then { - _unit call _fnc_unlock; - } else { - _response = ["Group", _plyrGroup] call EPOCH_fnc_server_hiveGETRANGE; - if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then { - _gArray = _response select 1; - if ( - {(_x select 0) in _owners }count(_gArray select 3) > 0 || - {(_x select 0) in _owners}count(_gArray select 4) > 0 || - _plyrUID in _owners - ) then { - _unit call _fnc_unlock; - }; - }; - }; + // allow group members and owner access + if (_plyrGroup != "") then { + if (_plyrGroup in _owners) then { + _unit call _fnc_unlock; } else { - if (_plyrUID in _owners) then { - _unit call _fnc_unlock; + _response = ["Group", _plyrGroup] call EPOCH_fnc_server_hiveGETRANGE; + if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then { + _gArray = _response select 1; + if ( + {(_x select 0) in _owners }count(_gArray select 3) > 0 || + {(_x select 0) in _owners}count(_gArray select 4) > 0 || + _plyrUID in _owners + ) then { + _unit call _fnc_unlock; + }; }; }; + } else { + if (_plyrUID in _owners) then { + _unit call _fnc_unlock; + }; }; - - - }; - }; 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 6d44f5bdf..d6d8042d9 100644 --- a/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf +++ b/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_packStorage.sqf @@ -6,129 +6,121 @@ if (isNull _unit) exitWith{}; if (_plyr distance _unit > 20) exitWith{}; _class = typeOf _unit; -if (_class isKindOf 'Constructions_lockedstatic_F') then{ +if (_class isKindOf 'Constructions_lockedstatic_F') then { - _weaponHolder = _unit getVariable["EPOCH_secStorParent", objNull]; - //diag_log format["DEBUG: Pack _weaponHolder %1", _weaponHolder]; + _owners = _unit getVariable["STORAGE_OWNERS", []]; + if ((getPlayerUID _plyr) in _owners) then { - if (!isNull _weaponHolder) then { - _owners = _weaponHolder getVariable["STORAGE_OWNERS", []]; - if ((getPlayerUID _plyr) in _owners) then { + _posWH = getPosATL _unit; - _posWH = getPosATL _unit; - [_unit, _plyr] call EPOCH_server_save_killedBuilding; - deleteVehicle _unit; - - // may not be needed but should prevent in DB. - _wepsItemsCargo = weaponsItemsCargo _weaponHolder; - if (isNil "_wepsItemsCargo") then { - _wepsItemsCargo = []; - }; - _magsAmmoCargo = magazinesAmmoCargo _weaponHolder; - if (isNil "_magsAmmoCargo") then { - _magsAmmoCargo = []; - }; + // may not be needed but should prevent in DB. + _wepsItemsCargo = weaponsItemsCargo _unit; + if (isNil "_wepsItemsCargo") then { + _wepsItemsCargo = []; + }; + _magsAmmoCargo = magazinesAmmoCargo _unit; + if (isNil "_magsAmmoCargo") then { + _magsAmmoCargo = []; + }; - // dump items on ground - _inventory = [ - _wepsItemsCargo, - _magsAmmoCargo, - getBackpackCargo _weaponHolder, - getItemCargo _weaponHolder - ]; + // dump items on ground + _inventory = [ + _wepsItemsCargo, + _magsAmmoCargo, + getBackpackCargo _unit, + getItemCargo _unit + ]; + [_unit, _plyr] call EPOCH_server_save_killedStorage; + deleteVehicle _unit; - [_weaponHolder, _plyr] call EPOCH_server_save_killedStorage; - deleteVehicle _weaponHolder; + _gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"]; + _gwh setPosATL _posWH; - _gwh = createVehicle["groundWeaponHolder", _posWH, [], 0, "CAN_COLLIDE"]; - _gwh setPosATL _posWH; + _returnItems = getArray(configFile >> "CfgVehicles" >> _class >> "returnOnPack"); + { + _gwh addMagazineCargoGlobal _x; + } forEach _returnItems; - _returnItems = getArray(configFile >> "CfgVehicles" >> _class >> "returnOnPack"); - { - _gwh addMagazineCargoGlobal _x; - } forEach _returnItems; + { + _objType = _forEachIndex; - { - _objType = _forEachIndex; + _objTypes = _x; + _objQty = []; - _objTypes = _x; - _objQty = []; - - if (_objType in[2, 3]) then { - _objTypes = _x select 0; - _objQty = _x select 1; - }; + if (_objType in[2, 3]) then { + _objTypes = _x select 0; + _objQty = _x select 1; + }; - { - switch _objType do { - case 0: { - if (typeName _x == "ARRAY") then { - _arrCount = count _x; - if (_arrCount >= 4) then { - - _gwh addWeaponCargoGlobal[_x deleteAt 0, 1]; - - _attachments = []; - _wMags = false; - _wMagsArray = []; - // suppressor, laser, optics, magazines(array), bipods - { - // magazines - if (typeName(_x) == "ARRAY") then{ - _wMags = true; - _wMagsArray = _x; - } - else { - // attachments - if (_x != "") then{ - _attachments pushBack _x; - }; + { + switch _objType do { + case 0: { + if (typeName _x == "ARRAY") then { + _arrCount = count _x; + if (_arrCount >= 4) then { + + _gwh addWeaponCargoGlobal[_x deleteAt 0, 1]; + + _attachments = []; + _wMags = false; + _wMagsArray = []; + // suppressor, laser, optics, magazines(array), bipods + { + // magazines + if (typeName(_x) == "ARRAY") then{ + _wMags = true; + _wMagsArray = _x; + } + else { + // attachments + if (_x != "") then{ + _attachments pushBack _x; }; - } forEach _x; + }; + } forEach _x; - // add all attachments to vehicle - // TODO replace with adding attachments directly to gun (Arma feature dependant) - { - _gwh addItemCargoGlobal[_x, 1]; - } forEach _attachments; + // add all attachments to vehicle + // TODO replace with adding attachments directly to gun (Arma feature dependant) + { + _gwh addItemCargoGlobal[_x, 1]; + } forEach _attachments; - if (_wMags) then{ - if (typeName _wMagsArray == "ARRAY" && (count _wMagsArray) >= 2) then{ - _gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; - }; + if (_wMags) then{ + if (typeName _wMagsArray == "ARRAY" && (count _wMagsArray) >= 2) then{ + _gwh addMagazineAmmoCargo[_wMagsArray select 0, 1, _wMagsArray select 1]; }; - }; + }; }; - case 1: { - if (typeName _x == "ARRAY") then { - if ((count _x) == 2) then { - _magazineName = _x select 0; - _magazineSize = _x select 1; - - if ((typeName _magazineName == "STRING") && (typeName _magazineSize == "SCALAR")) then { - _gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize]; - }; + }; + case 1: { + if (typeName _x == "ARRAY") then { + if ((count _x) == 2) then { + _magazineName = _x select 0; + _magazineSize = _x select 1; + + if ((typeName _magazineName == "STRING") && (typeName _magazineSize == "SCALAR")) then { + _gwh addMagazineAmmoCargo[_magazineName, 1, _magazineSize]; }; }; }; - case 2: { - if (typeName _x == "STRING") then { - _qty = _objQty select _forEachIndex; - _gwh addBackpackCargoGlobal[_x, _qty]; - }; - }; - case 3: { - if (typeName _x == "STRING") then { - _qty = _objQty select _forEachIndex; - _gwh addItemCargoGlobal[_x, _qty]; - }; + }; + case 2: { + if (typeName _x == "STRING") then { + _qty = _objQty select _forEachIndex; + _gwh addBackpackCargoGlobal[_x, _qty]; }; + }; + case 3: { + if (typeName _x == "STRING") then { + _qty = _objQty select _forEachIndex; + _gwh addItemCargoGlobal[_x, _qty]; }; - }forEach _objTypes; - }forEach _inventory; - }; + }; + }; + }forEach _objTypes; + }forEach _inventory; }; }; diff --git a/Sources/epoch_server/config.cpp b/Sources/epoch_server/config.cpp index 98b3fd74e..c4bc8c4dc 100644 --- a/Sources/epoch_server/config.cpp +++ b/Sources/epoch_server/config.cpp @@ -44,7 +44,7 @@ class cfgFunctions }; class CfgServerVersion { - client = "0.3.4.0"; - config = "0.3.4.0"; + client = "0.3.5.0"; + config = "0.3.5.0"; hive = "0.5.1.7"; }; diff --git a/Sources/epoch_server/init/server_compiles.sqf b/Sources/epoch_server/init/server_compiles.sqf index e4abeb2e5..c5b4926f9 100644 --- a/Sources/epoch_server/init/server_compiles.sqf +++ b/Sources/epoch_server/init/server_compiles.sqf @@ -58,7 +58,7 @@ EPOCH_server_vehicleInit = compileFinal preprocessFileLineNumbers "\x\ad EPOCH_server_storageInit = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_storageInit.sqf"; EPOCH_server_buildingInit = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_buildingInit.sqf"; EPOCH_server_traderKilled = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_traderKilled.sqf"; -EPOCH_server_setWeather = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_setWeather.sqf"; +// EPOCH_server_setWeather = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_setWeather.sqf"; EPOCH_localCleanup = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_localCleanup.sqf"; EPOCH_server_createTeleport = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_createTeleport.sqf"; EPOCH_server_teleportPlayer = compileFinal preprocessFileLineNumbers "\x\addons\a3_epoch_server\compile\epoch_server\EPOCH_server_teleportPlayer.sqf"; diff --git a/Sources/epoch_server/init/server_init.sqf b/Sources/epoch_server/init/server_init.sqf index 437c910fe..5598498a3 100644 --- a/Sources/epoch_server/init/server_init.sqf +++ b/Sources/epoch_server/init/server_init.sqf @@ -92,8 +92,8 @@ if (epoch_centerMarkerPosition isEqualTo [0,0,0]) then { }; EPOCH_dynamicVehicleArea = _worldSize / 2; -diag_log "Epoch: Set Weather"; -true call EPOCH_server_setWeather; +// diag_log "Epoch: Set Weather"; +// true call EPOCH_server_setWeather; // custom radio channels EPOCH_customChannels = []; diff --git a/Sources/epoch_server/init/server_securityfunctions.sqf b/Sources/epoch_server/init/server_securityfunctions.sqf index 3e4a4553d..8464fd619 100644 --- a/Sources/epoch_server/init/server_securityfunctions.sqf +++ b/Sources/epoch_server/init/server_securityfunctions.sqf @@ -37,7 +37,7 @@ _skn_nilVarCheckArray = [_cfg_variablesConfig, "nilVars", ['EPOCH_antiWallCount' _skn_commandMenuArray = [(_config >> "commandMenu"), "menus",['','RscSelectTeam','RscTeam','RscMoveHigh','#GETIN','#RscStatus','#WATCH0','RscCombatMode','RscMenuReply','RscCallSupport','#CUSTOM_RADIO','#User:BIS_fnc_addCommMenuItem_menu','RscRadio','RscReply','#ACTION','RscMenuFormations','#WATCH','RscGroupRootMenu','RscMainMenu','RscMenuMove','RscWatchDir','RscWatchMoveDir','#User:BIS_Menu_GroupCommunication','RscMenuStatus','RscFormations']] call EPOCH_fnc_returnConfigEntry; _skn_displayAddEHKeyDown = [(_config >> "displayAddEventHandler"), "keyDown",'_this call EPOCH_KeyDown'] call EPOCH_fnc_returnConfigEntry; -_skn_displayAddEHKeyUp = [(_config >> "displayAddEventHandler"), "keyUp",''] call EPOCH_fnc_returnConfigEntry; +_skn_displayAddEHKeyUp = [(_config >> "displayAddEventHandler"), "keyUp",'_this call EPOCH_KeyUp'] call EPOCH_fnc_returnConfigEntry; _skn_addEHConfig = (_config >> "addEventHandler"); _skn_displayAddEHChecks = [_skn_addEHConfig, "checks",[]] call EPOCH_fnc_returnConfigEntry; @@ -137,7 +137,7 @@ switch (_this select 0) do { case 'message': { 'epochserver' callExtension format['901|%1', _this select 1] }; case 'lock': { 'epochserver' callExtension '931' }; case 'unlock': { 'epochserver' callExtension '930' }; - case 'kick': { + case 'kick': { _playerUID = _this select 1; if (typeName _playerUID == 'OBJECT') then{ if (!isNull(_playerUID)) then{ @@ -175,7 +175,7 @@ if (!_skn_enableAntihack) exitWith { EPOCH_server_kickToLobby = compileFinal("true"); }; -// Check AH init code +// Check AH init code _skn_AH_rndVarAHInitCheck = _skn_rndVA deleteAt 0; // Init as array call compile(_skn_AH_rndVarAHInitCheck+"=[];"); @@ -298,7 +298,7 @@ EPOCH_server_disconnect = compileFinal(" " +_skn_AH_rndVarAHInitCheck + " deleteAt _index; _ret = true; }; - _ret + _ret "); _stringInArray = { @@ -381,7 +381,7 @@ _case = _skn_adminMenuOwnerSetting; //All Cfg for Owner Menu for "_i" from 1 to 3 do { _temp = "[['=============== MAIN MENU ===============',[],'','1',[]]"; if (["PLAYER-TELEPORT","MAP-TELEPORT","INFRONT-TELEPORT"] call _stringInArray) then { - + if ("PLAYER-TELEPORT" in _case) then { _temp = _temp + " ,[' Player To Admin',[],{[101,_this select 1] call "+_skn_adminRequest_PVC+"},'4',[]] @@ -467,7 +467,7 @@ for "_i" from 1 to 3 do { _temp = _temp + ",['Old Visualisation Tools', [],'','1',[]]"; if ("OLD-ESP" in _case) then { _temp = _temp + ",[' 3D ESP', [], "+_skn_old_esp+", '2', []]"; - }; + }; if ("OLD-MAP" in _case) then { _temp = _temp + ",[' MAP ESP', [], "+_skn_old_espMap+", '2', []]"; }; @@ -658,7 +658,7 @@ call compile ("'"+_skn_doKickBan+"' addPublicVariableEventHandler { _trusted = "+_str_learningModeCheck+"; if !(_unknownVar in _safeVars) then{ if (_trusted) then { - + _safeVars pushBack _unknownVar; missionNamespace setVariable ["+str _skn_whitelistVars+",_safeVars]; publicVariable "+str _skn_whitelistVars+"; @@ -804,18 +804,12 @@ _skn_code_antihack = compileFinal (" if !(commandingMenu in "+str _skn_commandMenuArray+") then { [format['Menu: commandMenu: %1',commandingMenu],0] call "+_sknBanANDSleep+"; }; - + onMapSingleClick ''; player allowDamage true; vehicle player allowDamage true; onEachFrame EPOCH_onEachFrame; - _addCase = addMissionEventHandler ['Draw3D', {}]; - removeMissionEventHandler ['Draw3D',0]; - if (_addCase > 0) then { - [format['MEH: Draw3D %1',_addCase],0] call "+_sknBanANDSleep+"; - }; - { _ehKey = _x select 0; if (_x select 2) then { @@ -831,7 +825,7 @@ _skn_code_antihack = compileFinal (" [format['EH: %1 %2',_ehKey,_addCase],0] call "+_sknBanANDSleep+"; }; } forEach "+str _skn_addEHArray+"; - + uiSleep 0.01; }; }; @@ -845,7 +839,7 @@ _skn_code_antihack = compileFinal (" _personalToken = Epoch_personalToken; _antiWallCount = 0; waitUntil{!isNull (findDisplay 46)}; - setViewDistance "+str _skn_viewDistance+"; + setViewDistance "+str _skn_viewDistance+"; setObjectViewDistance["+str _skn_viewDistanceObects+", 100]; setTerrainGrid "+str _skn_terrainGrid+"; uiSleep 5; @@ -950,7 +944,7 @@ _skn_code_antihack = compileFinal (" vehicle player setPosATL _lastPos; _cntBan = _cntBan + 1; if (_cntBan > 4) then { - + }; } else { uiSleep 10; @@ -1108,7 +1102,7 @@ call compile ("'"+_skn_doAdminRequest+"' addPublicVariableEventHandler { if ((_content isKindOf 'LandVehicle') || (_content isKindOf 'Air') || (_content isKindOf 'Ship') || (_content isKindOf 'Tank')) then { [_content, _admin] call EPOCH_server_save_killedVehicle; } else { - if (_content isKindOf 'Secure_Storage_Proxy' || (_content isKindOf 'Buildable_Storage')) then{ + if (_content isKindOf 'Constructions_lockedstatic_F' || (_content isKindOf 'Buildable_Storage')) then{ [_content, _admin] call EPOCH_server_save_killedStorage; } else { [_content, _admin] call EPOCH_server_save_killedBuilding; @@ -1229,7 +1223,7 @@ 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'; @@ -1335,7 +1329,7 @@ _skn_admincode = compileFinal (" if (isPlayer _x) then { _display drawIcon [ getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x, name _x - ]; + ]; }; }forEach playableUnits; }; @@ -1343,7 +1337,7 @@ _skn_admincode = compileFinal (" _size = (1/ctrlMapScale _display) max 20; { if (!isNull _x) then { - _color = [1,1,1,1]; + _color = [1,1,1,1]; _display drawIcon [ getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _color, visiblePosition _x, _size, _size, getDir _x, typeOf _x ]; @@ -1353,7 +1347,7 @@ _skn_admincode = compileFinal (" if ("+_skn_tg_map_loot+") then { { if (!isNull _x) then { - _color = [1,1,1,1]; + _color = [1,1,1,1]; _display drawRectangle [ visiblePosition _x, 5, @@ -1368,7 +1362,7 @@ _skn_admincode = compileFinal (" if ("+_skn_tg_map_vehicle+") then { _size = (1/ctrlMapScale _display) max 20; { - if (alive _x) then { + if (alive _x) then { _display drawIcon [ getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x, getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName') @@ -1379,7 +1373,7 @@ _skn_admincode = compileFinal (" if ("+_skn_tg_map_ai+") then { _size = (0.5/ctrlMapScale _display) max 20; { - if (isPlayer _x) then { + if (isPlayer _x) then { _display drawIcon [ getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'Icon'), _x call _getDmgColor, visiblePosition _x, _size, _size, getDir _x, getText (configFile >> 'CfgVehicles' >> typeOf _x >> 'displayName') @@ -1415,7 +1409,7 @@ _skn_admincode = compileFinal (" }; }; }; - }forEach EPOCH_ESPMAP_TARGETS; + }forEach EPOCH_ESPMAP_TARGETS; }; }]; }forEach ['ESP_mainMap','ESP_adminMap']; @@ -1669,7 +1663,7 @@ _skn_admincode = compileFinal (" if (surfaceIsWater _pos) then [{vehicle player setPosASL _pos},{vehicle player setPosATL _pos}]; } else { [109,_pos] call "+_skn_adminRequest_PVC+"; - }; + }; if (!dialog) then {openMap [false, false]}; }; }; diff --git a/Sources/epoch_server/init/server_variables.sqf b/Sources/epoch_server/init/server_variables.sqf index 3121ed3c5..cad64de76 100644 --- a/Sources/epoch_server/init/server_variables.sqf +++ b/Sources/epoch_server/init/server_variables.sqf @@ -45,7 +45,7 @@ _configArray = [ ["B_Heli_Light_01_EPOCH", 2], ["B_SDV_01_EPOCH", 2], ["B_MRAP_01_EPOCH", 3], - ["I_MRAP_03_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], @@ -69,7 +69,7 @@ _configArray = [ ["K04", 2], ["ebike_epoch", 7], ["mosquito_epoch", 5], - ["C_Heli_Light_01_civil_EPOCH",5] + ["C_Heli_Light_01_civil_EPOCH",5] ] ], ["taxRate", 0.1], @@ -94,13 +94,13 @@ _configArray = [ EPOCH_fnc_returnConfigEntry = { private["_defaultData", "_config", "_varData"]; _defaultData = _this select 2; - _config = (_this select 0) >> (_this select 1); if (isClass(_this select 0)) then{ + _config = (_this select 0) >> (_this select 1); _varData = switch (typeName _defaultData) do { - case "SCALAR": {getNumber _config}; - case "BOOL": {(getNumber _config) == 1}; - case "ARRAY": {getArray _config}; - case "STRING": {getText _config}; + case "SCALAR": {if (isNumber (_config)) then { getNumber _config } else {_defaultData} }; + case "BOOL": {if (isText (_config)) then { (getText _config) isEqualTo "true" } else {_defaultData} }; + case "ARRAY": {if (isArray (_config)) then { getArray _config } else {_defaultData} }; + case "STRING": {if (isText (_config)) then { getText _config } else {_defaultData} }; default {_defaultData}; }; } else { diff --git a/Sources/epoch_server/system/server_monitor.fsm b/Sources/epoch_server/system/server_monitor.fsm index 5ffa508c5..ad10f30dd 100644 --- a/Sources/epoch_server/system/server_monitor.fsm +++ b/Sources/epoch_server/system/server_monitor.fsm @@ -48,7 +48,7 @@ class FSM init = /*%FSM*/"diag_log ""Loaded Server FSM"";" \n "" \n "_serverSettingsConfig = configFile >> ""CfgEpochServer"";" \n - "_ahInitAuthCfg = [_serverSettingsConfig, ""antihack_ahInitAuthCfg"", [0,90]] call EPOCH_fnc_returnConfigEntry;" \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 "" \n @@ -464,4 +464,4 @@ class FSM { }; }; -/*%FSM*/ \ No newline at end of file +/*%FSM*/ diff --git a/Sources/epoch_server_core/README.md b/Sources/epoch_server_core/README.md index 7de7a173e..69687054a 100644 --- a/Sources/epoch_server_core/README.md +++ b/Sources/epoch_server_core/README.md @@ -2,39 +2,21 @@ ================ Arma 3 Epoch Mod +Server Framework Core +http://epochmod.com/ -------------------------- Developers -------------------------- * Aaron Clark - [VB]AWOL - Game Design, Code -* Kenneth Bente - Axle - Public Relations -* 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 -* SteamPunkGears - Models -* Raymix - UI and Code - --------------------------- -Install Notes +Install Notes --------------------------- Hive DLL requires vs2013 redist: http://www.microsoft.com/en-us/download/details.aspx?id=40784 - ---------------------------- -Tools Used ---------------------------- -Mikero's tools - https://dev-heaven.net/projects/mikero-pbodll/files - moveobject - repath previous epoch content - proproject -BIS Tools - --------------------------- Resources --------------------------- diff --git a/Sources/epoch_server_core/compile/epoch_hive/README.md b/Sources/epoch_server_core/compile/epoch_hive/README.md new file mode 100644 index 000000000..bc7e3bf76 --- /dev/null +++ b/Sources/epoch_server_core/compile/epoch_hive/README.md @@ -0,0 +1,226 @@ +**EPOCH_fnc_server_hiveSET** + +Permanent storage of value with given prefix:key + +_Uses Hive Call: (**101, 111) or (100, 110)**_ + +_Input: Key Prefix, Unique Key, Value_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key + +_plyrUID = getPlayerUID _playerObject; + +// Fill your Array with data +_VAL = [damage _playerObject]; + +// Save value to database with given prefix:key +["PlayerMYCustomKey", _plyrUID, _VAL] call EPOCH_server_hiveSET; + +``` + +**EPOCH_fnc_server_hiveSETEX** + +Semi-Permanent storage of value with given prefix:key. This command is very useful at preventing long term data bloat in the database and should be used for storing data that does not need to be stored forever. + +_Uses Hive Call: (**101, 121) or (100, 120)**_ + +_Input: Key Prefix, Unique Key, Expires in # seconds, Value_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// string (time in seconds) the key should last. +_expires = "2592000"; // 30 days + +// Fill your array with data +_VAL = [damage _playerObject]; + +// Save value to database with given prefix:key and expiration. +["PlayerMYCustomKey", _plyrUID, _expires, _VAL] call EPOCH_server_hiveSETEX; +``` + +**EPOCH_fnc_server_hiveEXPIRE** + +Set a timeout on key. After the timeout has expired, the key will automatically be deleted. + +_Uses Hive Call: (**131) or (130)**_ + +_Input: Key Prefix, Unique Key, Expires in # seconds_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key. +_plyrUID = getPlayerUID _playerObject; + +// string (time in seconds) the key should last. +_expires = "2592000"; // 30 days + +// Set expiration on given prefix:key. +["PlayerMYCustomKey", _plyrUID, _expires] call EPOCH_server_hiveEXPIRE;  +``` + +**EPOCH_fnc_server_hiveSETBIT** + +Permanent storage of bit value with given prefix:key + +_Uses Hive Call: **141**_ + +_Input: Key Prefix, Unique Key, Bit Index, Value_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// index to get bit value +_index = 0; + +// 1 = true, 0 = false +_value = 1; + +// Set bit at given index for prefix:key +["PlayerMYCustomBitKey", _plyrUID, _index, _value] call EPOCH_server_hiveSETBIT; +``` + +**EPOCH_fnc_server_hiveGET** + +Made to exceed the character limits of callextension within the dll using extra c++ and sqf logic. The GETRANGE function has proven to be more reliable to use for data sets that are known to exceed 8k chars. + +_Uses Hive Call: **200**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Array(Status, Array)_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// Get data using prefix:key. "PlayerMYCustomKey" is the prefix and "_plyrUID" unique key. +_response = ["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveGET; + +if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then { + _status = _response select 0; + _arr = _response select 1; + // do something with _arr data here +}; +``` + +**EPOCH_fnc_server_hiveGETTTL** + +Made to exceed the character limits of callextension within the dll using extra c++ and sqf logic. Also, returns the ttl or expire time in seconds. + +_Uses Hive Call: **200, 210**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Array(Status, Array,TTL)_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// Get data and ttl using prefix:key. "PlayerMYCustomKey" is the prefix and "_plyrUID" unique key. +_response = ["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveGETTTL; + +if ((_response select 0) == 1 && typeName (_response select 1) == "ARRAY" && !((_response select 1) isEqualTo [])) then { + _status = _response select 0; + _arr = _response select 1; + _ttl = _response select 2; + + // do something with data here +} +``` + +**EPOCH_fnc_server_hiveGETBIT** + +Returns the bit value at offset in the string value stored at key. + +_Uses Hive Call: **240**_ + +_Input: Key Prefix, Unique Key, Bit Index_ + +_Returns: Bool(true|false)_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// index to get bit value +_index = 0; + +// Get bit value with given index at prefix:key +_return = ["PlayerMYCustomBitKey", _plyrUID, _index] call EPOCH_server_hiveGETBIT; + +if (_return) then { + // do something if true +}; +``` + +**EPOCH_fnc_server_hiveGETRANGE** + +Made to exceed the character limits of callextension by using the redis command GETRANGE and sqf logic. + +_Uses Hive Call: **220**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Array(Status, Array)_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// PlayerMYCustomKey is the prefix and _plyrUID unique key +_response = ["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveGETRANGE; + +if ((_response select 0) == 1 && typeName(_response select 1) == "ARRAY") then { + _status = _response select 0; + _arr = _response select 1; + // do something with data here +}; +``` + +**EPOCH_fnc_server_hiveDEL** + +Removes the specified key. + +_Uses Hive Call: **400**_ + +_Input: Key Prefix, Unique Key_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// Remove key +["PlayerMYCustomKey", _plyrUID] call EPOCH_server_hiveDEL; +``` + +**EPOCH_fnc_server_hiveLog** + +Removes the specified key. + +_Uses Hive Call: **700**_ + +_Input: Key Prefix, Message_ + +_Returns: Nothing_ + +``` +// get reference to player and get playerUID to use as unique key +_plyrUID = getPlayerUID _playerObject; + +// Log to database, This data can be access via the database and can be found with the key "MyCustomLog-LOG" +['MyCustomLog', format["%1 (%2) at %3", _playerObject, _plyrUID, getPosATL _playerObject]] call EPOCH_server_hiveLog; +``` diff --git a/Sources/epoch_server_core/config.cpp b/Sources/epoch_server_core/config.cpp index ae4d0de0c..b9731ac10 100644 --- a/Sources/epoch_server_core/config.cpp +++ b/Sources/epoch_server_core/config.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.4.0) +Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.5.0) *****************************************************************************/ #define _ARMA_ class CfgPatches { diff --git a/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf b/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf index ad4baaf69..ca799f8a8 100644 --- a/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf +++ b/Sources/epoch_server_settings/EpochEvents/CarnivalSpawner.sqf @@ -6,7 +6,7 @@ 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 */ - +private ["_item","_marker","_ferrisPosition"]; _ferrisPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos; if ((count _ferrisPosition) == 2) then{ _item = createVehicle["ferrisWheel_EPOCH", _ferrisPosition, [], 0.0, "CAN_COLLIDE"]; diff --git a/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf b/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf index a9bca9f5a..5fd7dd8d5 100644 --- a/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf +++ b/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf @@ -9,6 +9,8 @@ https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/ChangeWeather.sqf */ +private ["_tempOVRD","_rainOVRD","_fogOVRD","_overcastOVRD","_windOVRD","_arr","_response","_windValX","_windValZ","_WeatherChangeTime","_force","_rnd_temp","_fog","_rain","_overcast"]; + // Initalize variable for tracking time between runs. if (isNil "EPOCH_lastWeatherChange") then { EPOCH_lastWeatherChange = diag_tickTime; @@ -69,7 +71,7 @@ if (_rain > 0.5) then { _windValZ = random 20 - 10; }; -if !(isNil "_windOVRD") then { +if !(isNil "_windOVRD") then { _windValX = _windOVRD select 0; _windValZ = _windOVRD select 1; }; @@ -81,4 +83,4 @@ if (_force) then { forceWeatherChange; }; -diag_log format["Weather Change: fog: %1 rain: %2 overcast: %3 windx: %4 windz: %5 forced: %6", _fog, _overcast, _rain, _windValX, _windValZ, _force]; \ No newline at end of file +diag_log format["Weather Change: fog: %1 rain: %2 overcast: %3 windx: %4 windz: %5 forced: %6", _fog, _overcast, _rain, _windValX, _windValZ, _force]; diff --git a/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf b/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf index cbfbcb1f5..b86dc08fc 100644 --- a/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf +++ b/Sources/epoch_server_settings/EpochEvents/ContainerSpawner.sqf @@ -6,6 +6,7 @@ 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 */ +private ["_marker","_item","_cargoPosition"]; _cargoPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 1] call BIS_fnc_findSafePos; if ((count _cargoPosition) == 2) then{ _item = createVehicle["Cargo_Container", _cargoPosition, [], 0.0, "CAN_COLLIDE"]; diff --git a/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf b/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf index e4df7b1f7..a8917dc96 100644 --- a/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf +++ b/Sources/epoch_server_settings/EpochEvents/EarthQuake.sqf @@ -6,6 +6,7 @@ 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 */ +private ["_marker","_minerals","_randomIndex","_item","_plyrsNearEpicenter","_position"]; _position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos; if ((count _position) == 2) then{ _plyrsNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000]; diff --git a/Sources/epoch_server_settings/EpochEvents/MessageServer.sqf b/Sources/epoch_server_settings/EpochEvents/MessageServer.sqf index 87d6ef023..6010ca226 100644 --- a/Sources/epoch_server_settings/EpochEvents/MessageServer.sqf +++ b/Sources/epoch_server_settings/EpochEvents/MessageServer.sqf @@ -1,5 +1,5 @@ // Random Messages - +/* _messages = [ "Message 1", "Message 2", @@ -7,10 +7,8 @@ _messages = [ "Message 4", ]; ["message", _messages param [floor(random (count _messages))]] call EPOCH_serverCommand; - +*/ // Restart time -/* _restartIn = round((EPOCH_forceRestartTime-diag_tickTime)/60); ["message", format["Welcome to Epoch Mod, server wlll restart in %1 minutes",_restartIn]] call EPOCH_serverCommand; -*/ diff --git a/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf b/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf index f361b329f..0c2ce7e42 100644 --- a/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf +++ b/Sources/epoch_server_settings/EpochEvents/PlantSpawner.sqf @@ -6,7 +6,7 @@ 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 */ - +private ["_displayName","_marker","_plants","_plant","_item","_plantPosition"]; _plantPosition = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 4000, 0] call BIS_fnc_findSafePos; if ((count _plantPosition) == 2) then{ diff --git a/Sources/epoch_server_settings/config.cpp b/Sources/epoch_server_settings/config.cpp index 05fd43c0a..cfd785679 100644 --- a/Sources/epoch_server_settings/config.cpp +++ b/Sources/epoch_server_settings/config.cpp @@ -1,5 +1,5 @@ /**************************************************************************** -Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.4.0) +Copyright (C) 2015 - ARMA 3 EPOCH MOD [EpochMod.com] (v0.3.5.0) *****************************************************************************/ #define _ARMA_ @@ -9,7 +9,7 @@ class CfgPatches { units[] = {}; weapons[] = {}; requiredVersion = 0.1; - epochVersion = "0.3.4.0"; + epochVersion = "0.3.5.0"; requiredAddons[] = {}; }; }; diff --git a/Sources/epoch_server_settings/configs/loots.h b/Sources/epoch_server_settings/configs/loots.h index 4885be28a..d839f45b6 100644 --- a/Sources/epoch_server_settings/configs/loots.h +++ b/Sources/epoch_server_settings/configs/loots.h @@ -509,7 +509,7 @@ class CfgMainTable { lootMin = 7; LootMax = 14; - tables[] = { + tables[] = { { "Equipment", 6 }, { "Pistols", 8 }, { "PistolAmmo", 10 }, @@ -662,7 +662,7 @@ class CfgLootTable { { "acc_pointer_IR", "item" }, 20 }, // Marksman DLC { { "Bipods", "CfgLootTable" }, 5 } - + }; }; @@ -670,7 +670,7 @@ class CfgLootTable { items[] = { { { "SniperRiflem107", "CfgLootTable" }, 8 }, - + // Marksman DLC { { "SniperRifleMarkDLC", "CfgLootTable" }, 10 }, @@ -727,7 +727,7 @@ class CfgLootTable { { "10Rnd_338_Mag", "magazine" }, 1 }, { { "10Rnd_93x64_DMR_05_Mag", "magazine" }, 1 }, { { "10Rnd_127x54_Mag", "magazine" }, 1 } - + }; }; @@ -792,8 +792,8 @@ class CfgLootTable { { "FoodSnooter", "magazine" }, 9 }, { { "TacticalBacon", "magazine" }, 5 }, { { "FoodMeeps", "magazine" }, 1 } - - + + }; }; @@ -842,7 +842,7 @@ class CfgLootTable { { "ItemBattery", "magazine" }, 5 }, { { "ItemCables", "magazine" }, 5 }, { { "ItemSafe", "magazine" }, 1 } - + }; }; @@ -1269,12 +1269,14 @@ class CfgLootTable { { "Muzzles_93mmgMarkDLC", "CfgLootTable" }, 1 } }; }; - + class Muzzles_338MarkDLC { items[] = { { { "muzzle_snds_338_black", "item" }, 1 }, - { { "muzzle_snds_338_green", "item" }, 1 } + { { "muzzle_snds_338_green", "item" }, 1 }, + { { "muzzle_snds_338_sand", "item" }, 1 } + }; }; class Muzzles_93mmgMarkDLC @@ -1358,10 +1360,12 @@ class CfgLootTable { { "KitStudWall", "magazine" }, 13 }, { { "KitShelf", "magazine" }, 9 }, { { "KitWorkbench", "magazine" }, 2 }, - { { "KitWoodFloor", "magazine" }, 12 }, - { { "KitWoodStairs", "magazine" }, 10 }, + { { "KitWoodFloor", "magazine" }, 10 }, + { { "KitWoodStairs", "magazine" }, 9 }, { { "KitWoodTower", "magazine" }, 5 }, { { "KitWoodRamp", "magazine" }, 5 }, + { { "KitTankTrap", "magazine" }, 2 }, + { { "KitHesco3", "magazine" }, 1 }, { { "KitWoodLadder", "magazine" }, 5 }, { { "KitFirePlace", "magazine" }, 8 }, { { "KitCinderWall", "magazine" }, 5 }, @@ -1370,7 +1374,7 @@ class CfgLootTable { { "ItemSafe", "magazine" }, 1 } }; }; - + class Mission_Payout1 { items[] = { @@ -1539,7 +1543,7 @@ class CfgLootTable { { "B_AssaultPack_rgr", "backpack" }, 5 }, { { "B_AssaultPack_sgg", "backpack" }, 5 }, { { "B_AssaultPack_blk", "backpack" }, 5 }, - + { { "B_Carryall_cbr", "backpack" }, 1 }, { { "B_Carryall_khk", "backpack" }, 1 }, @@ -1848,7 +1852,7 @@ class CfgLootTable { { "wolf_mask_epoch", "item" }, 1 }, { { "pkin_mask_epoch", "item" }, 1 }, { { "clown_mask_epoch", "item" }, 1 } - + }; }; }; diff --git a/Sources/epoch_server_settings/configs/security/security_checks.h b/Sources/epoch_server_settings/configs/security/security_checks.h index d1246f619..14fc11ba2 100644 --- a/Sources/epoch_server_settings/configs/security/security_checks.h +++ b/Sources/epoch_server_settings/configs/security/security_checks.h @@ -5,7 +5,7 @@ class CfgSecConf { debug = false; - + class limits { playerCrypto = 25000; }; @@ -54,17 +54,17 @@ class CfgSecConf }; mode = "Standard"; }; - + class displayAddEventHandler { keyDown = "_this call EPOCH_KeyDown;"; - keyUp = ""; + keyUp = "_this call EPOCH_KeyUp;"; }; - + class addEventHandler { checks[] = {"Fired","InventoryClosed","InventoryOpened","Killed","HandleDamage","HandleHeal","Dammaged","Hit","HitPart"}; 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; (locked (_this select 1) in [2, 3])"; + InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};"; + InventoryOpened = "_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable['EPOCH_Locked;, false])"; Killed = "_this call EPOCH_fnc_playerDeath;"; HandleDamage = ""; HandleHeal = ""; @@ -75,18 +75,18 @@ class CfgSecConf class variables { class whitelist { - #include "data\custom_vars.h" // whitelisted variables + #include "data\custom_vars.h" // whitelisted variables }; badVars[] = {"ESP_map","ESP_mainMap","ESP_adminMap","AntiAntiAntiAntiHax","fnc_usec_damageHandler","fnc_usec_unconscious","VAGINA_secret","yolo","VERSION","life_fnc_handleDamage","EPOCH_spawnVehicle_PVS","CLASS911_Menu","nuke_vars","JJMMEE_INIT_MENU","PLAYERON","PLAYERNEXT2","ALTISLIFEON","LY_Menu","PLAY","LY_SwaggerLikeUs","BIS_fnc_dbg_reminder_value","BIS_fnc_dbg_reminder"}; nilVars[] = {"EPOCH_antiWallCount","EPOCH_playerEnergy","EPOCH_playerHunger","EPOCH_playerStamina","EPOCH_playerCrypto","EPOCH_target","EPOCH_ESP_TARGETS","EPOCH_ESPMAP_TARGETS","EPOCH_taxRate","EPOCH_ESP_VEHICLEPLAYER","EPOCH_ESP_PLAYER","EPOCH_ESP_VEHICLES"}; }; - + class commandMenu { menus[] = {"","RscSelectTeam","RscTeam","RscMoveHigh","#GETIN","#RscStatus","#WATCH0","RscCombatMode","RscMenuReply","RscCallSupport","#CUSTOM_RADIO","#User:BIS_fnc_addCommMenuItem_menu","RscRadio","RscReply","#ACTION","RscMenuFormations","#WATCH","RscGroupRootMenu","RscMainMenu","RscMenuMove","RscWatchDir","RscWatchMoveDir","#User:BIS_Menu_GroupCommunication","RscMenuStatus","RscFormations"}; }; - - // RscDisplay (onload, unload) scanning is automatic and will ensure data matches the server. - // Using the extra whitelist arrays this check can be extended to allow modifications client side that do not exist server side. + + // RscDisplay (onload, unload) scanning is automatic and will ensure data matches the server. + // Using the extra whitelist arrays this check can be extended to allow modifications client side that do not exist server side. class displayOnload { // Format: {rscDisplayConfigname, extra whitelisted onload data (array of string), extra whitelisted unload data (array of string)} // The extra onload whitelist for RscDisplayConfigure is for CBA @@ -126,4 +126,4 @@ class CfgSecConf systemChat4 = "systemChat format['Debug-Vehicle: _veh: %1', _veh];"; systemChat5 = "systemChat format['Debug-Vehicle: _this: %1', _this];"; }; -}; \ No newline at end of file +}; diff --git a/Sources/mpmissions/epoch.VR/description.ext b/Sources/mpmissions/epoch.VR/description.ext index d8fd5c2ac..1ce50f3aa 100644 --- a/Sources/mpmissions/epoch.VR/description.ext +++ b/Sources/mpmissions/epoch.VR/description.ext @@ -72,7 +72,7 @@ class CfgRemoteExec class CfgEpochClient { - epochVersion = "0.3.4.0"; + epochVersion = "0.3.5.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 diff --git a/Tools/Install/InstallEpoch.cmd b/Tools/Install/InstallEpoch.cmd index d5c7ac5b6..458e8741b 100644 --- a/Tools/Install/InstallEpoch.cmd +++ b/Tools/Install/InstallEpoch.cmd @@ -3,13 +3,12 @@ SET STEAMUN=admin@youremail.net SET STEAMPW=chamgeme SET ARMASVRPATH=C:\Arma3Server SET ARMAAPPID=107410 -:: Workshop IDs: EpochExperimental = 455221958, Normal Epoch = 421839251 SET ARMAWORKSHOPID=421839251 + :: remove mod folder rd /s/q "%ARMASVRPATH%\@Epoch" -:: remove cache C:\Users\Administrator\Downloads\steamcmd\steamapps\workshop -del "steamapps\workshop\appworkshop_%ARMAAPPID%.acf" :: update workshop mod -START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% +quit +START "" /WAIT steamcmd.exe +login %STEAMUN% %STEAMPW% +workshop_download_item %ARMAAPPID% %ARMAWORKSHOPID% validate +quit :: copy files back to server xcopy /s/e/y/q/i "steamapps\workshop\content\%ARMAAPPID%\%ARMAWORKSHOPID%" "%ARMASVRPATH%\@Epoch" +:: steamcmd.exe +login %STEAMUN% %STEAMPW% +force_install_dir "%ARMASVRPATH%" "+app_update %ARMAAPPID%" validate +quit