diff --git a/CHANGE LOG 1.0.7.1.txt b/CHANGE LOG 1.0.7.1.txt
index 73862de63..dd805f9b7 100644
--- a/CHANGE LOG 1.0.7.1.txt
+++ b/CHANGE LOG 1.0.7.1.txt
@@ -2,7 +2,22 @@
[ADDED] AKS-74, AKS-74 Kobra, AKS-74 PSO1, AKS-74 NSPU and AKS-74 TWS with full attachment support. (db1ed4c0) @AirwavesMan
[ADDED] Red Ryder BB gun and magazine as Epoch version. (597e6086) @AirwavesMan
[ADDED] G36A and G36K as Epoch version. (e0a00512) @AirwavesMan
+[ADDED] More snappoints for the 4x metal floors. (f68e92d5) @worldwidesorrow
+[ADDED] Right click menu made by Mudzereli and updated by Salival. (c4919d65) @AirwavesMan
+[ADDED] Missing Combine Magazine option for the Desert Eagle and the 20Rnd Stanag magazine. (858f418a) @seelenapparat, @AirwavesMan
+[ADDED] Toggleable Remote Vehicle by Salival. (a9500b4e) @AirwavesMan
+[ADDED] Toggleable Locate Vehicle by Salival. (152ec42d) @AirwavesMan
+[ADDED] Toggleable Take Clothes by Salival. (1113b579) @AirwavesMan
+[ADDED] Toggleable Safe Zone Relocate by Salival. (cc005a97) @AirwavesMan
+[ADDED] Toggleable Vehicle Service Point by Salival. (343128bb) @AirwavesMan
+[ADDED] Toggleable Garage Door Opener by Salival. (b3871aa3) @AirwavesMan
+[ADDED] Toggleable Bury and Butcher Bodies by Salival. (be7898aa) @AirwavesMan
+[ADDED] Toggleable Vehicle Key Changer by Salival. (e6eb9419) @AirwavesMan
+[ADDED] Toggleable Virtual Garage by Salival. (30f15326) @AirwavesMan
+[ADDED] Fully functional Namalsk Bloodsuckers by SumrakDZN. Can be activated in the configVariables.sqf. (05118343) @worldwidesorrow
+[ADDED] G3A3 with attachment support. (a3a4cf90) @AirwavesMan
[UPDATED] Better message for filling fuel containers if the fuel tank has not enough fuel. (93bf494c) @AirwavesMan
+[UPDATED] Snappoints got improved. (f68e92d5) @worldwidesorrow
[FIXED] Side Chat was unintentionally disabled on Podagorsk Mission. (cf43c20d) @Voltan, @AirwavesMan
[FIXED] English string from the Broken APSI got overwritten by the german string. (43786eec) @seelenapparat, @AirwavesMan
[FIXED] Open or close a winter lockbox or an upgraded lockbox had the wrong sound. (ffccff6a, cdfc57fd) @AirwavesMan
@@ -10,7 +25,7 @@
[FIXED] DayZ Mod gates could not be removed. (2bbb126a) @Aschalder, @AirwavesMan
[FIXED] The AK74 taped magazine could not be used with the AN94. (31c4a0a7) @Schalldampfer, @AirwavesMan
[FIXED] Dupe with player_emptyContainer and dayz_actionInProgress bug. (44c94541) @F507DMT, @AirwavesMan
-[FIXED] Remove the iron sight view from the RK95 ACOG since it does not work. (ee259c4a) @IsGoose, @AirwavesMan
+[FIXED] Remove the iron sight view from the RK95 ACOG, SVD Gold and SVU since it does not work. (ee259c4a, ad3c38e4) @IsGoose, @AirwavesMan
[FIXED] Some building wrecks could not be removed. (b43279cd) @Seelenapparat, @AirwavesMan
[FIXED] Wrong name of the PIVOT snappoint of all wooden stairs. (f24a8193) @AirwavesMan
[FIXED] ArmoredSUV gunner glitch. (aeafb3b3) @TheFirstNoob, @AirwavesMan
@@ -23,4 +38,9 @@
[FIXED] Radio state variable got resetted after changing clothes. (6becd3d8) @AirwavesMan
[FIXED] Missing side and faction entry for many epoch vehicles (4ba6fa32) @iben, @AirwavesMan
[FIXED] Missing terrainCoef for the Mini Cooper. (53d92ba3) @DeVloek, @AirwavesMan
-[REMOVED] gsc_cloth_loner_head_DZ model and Skin_gsc_cloth_loner_head_DZ due to model issues. (b1e77a39) @Seelenapparat, @AirwavesMan
\ No newline at end of file
+[FIXED] Weapon dupe on gear syncing. (9852778b) @F507DMT, @AirwavesMan
+[FIXED] 200Rnd 40mm FV510 HE and Sabot magazines could not be used. (c10a436c) @Schalldampfer, @AirwavesMan
+[FIXED] Client RPT Spam 'Strange convex component288 in warehouse\models\warehouse.p3d:geometry' @helion4
+[REMOVED] gsc_cloth_loner_head_DZ model and Skin_gsc_cloth_loner_head_DZ due to model issues. (b1e77a39) @Seelenapparat, @AirwavesMan
+
+[INFO] Big thanks to the following authors which allowed us to use their content: SumrakDZN, SyNcRoNiCzZ
\ No newline at end of file
diff --git a/Documents/CHANGE LOG 1.0.7.txt b/Documents/CHANGE LOG 1.0.7.txt
new file mode 100644
index 000000000..dbd634b83
--- /dev/null
+++ b/Documents/CHANGE LOG 1.0.7.txt
@@ -0,0 +1,169 @@
+[NEW] Time between unlocking safes/lockboxes after a failed code will be exponentially higher, see configVariables.sqf\DZE_lockablesHarderPenalty (c3cbca1) @oiad
+[NEW] Added over 200 new zombie models with loot groups and strings for Server Admins to use. (2e15009) @AirwavesMan
+[NEW] Zombie can wear backpacks. (096fc13) @AirwavesMan
+[NEW] Hide Body can be edited and toggled. Enabled by default, configVariables.sqf/DZE_Hide_Body (c0e9fe6) @AirwavesMan
+[NEW] Added 6 AK-107 versions with attachment support. (82485ea) @AirwavesMan
+[NEW] Added new waterbottles from DayZ Mod. Icons made by @DeVloek. Fully functional with all actions. @AirwavesMan
+[NEW] All fuel containers can be emptied. (276615a8) @AirwavesMan
+[NEW] Different boxes of matches can be combined. (bc75ad8) @AirwavesMan
+[NEW] Added a basic support for PVE Servers. This disables the PVP damage on the server. Disabled by default, configVariables.sqf/DZE_PVE_Mode (e7dbc5dd) @AirwavesMan
+[NEW] Dedicated sounds for opening and closing vaults. (c001c38, 9c83ef2, 61258c9, 76721e3) @worldwidesorrow
+[NEW] Added the option for vectorUp on spawned objects in fnc_spawnObjects. (bf9dc49) @worldwidesorrow
+[NEW] Added 2 new cargo truck versions. A truck with more items slots and a truck with more weapons slots. (02c91007) @AirwavesMan
+[NEW] Added an option to give another player an antibacterial wipe. (8c074be) @worldwidesorrow
+[NEW] The maps Podagorsk and Chernarus Winter are now part of Epoch.
+[NEW] Added snow fall, snow storm, ground fog and cold breath to the game. This can be enabled in the configVariables.sqf/DZE_WeatherVariables and DZE_Weather @worldwidesorrow
+[NEW] Added warm clothes support. configVariables.sqf/DZE_WarmClothes (4058f596) @AirwavesMan
+[NEW] Added shivering - if the players body temperature is under a certain value the shivering starts. Can be defined and disabled with the last value in the DZE_WeatherVariables array. (4058f596) @AirwavesMan
+[NEW] Players can choose among 5 sets of status icons by pressing the F3 key or selecting in the game options menu. @worldwidesorrow
+[NEW] Added over 100 new weapons and magazines with attachment support, eg. HK417, Famas, Steyr Aug, G3, MP7 and many more. @AirwavesMan
+[NEW] Added M110_DZ with double zoom which was removed with the last Arma 2 1.64 patch. (9a531b3) @AirwavesMan
+[NEW] Almost all items have a world model now, eg. FN Fal mag, M203 Flare, AS50 mag. @Helion4, @AirwavesMan
+[NEW] Added over 130 new male and female skins. @AirwavesMan @Helion4
+[NEW] Added 11 new backpacks. (637358b, 88053499) @Seelenapparat, @DeVloek, @AirwavesMan, @Helion4
+[NEW] Added different backpack skins for the Coyote and the Czech Backpack. (637358b) @Seelenapparat, @DeVloek, @AirwavesMan
+[NEW] All backpacks got updated and have 2 versions, a regular and an upgraded version. (637358b) @Seelenapparat, @DeVloek, @AirwavesMan
+[NEW] Fireplaces can be crafted directly from a wooden log. (2b8997ec) @AirwavesMan
+[NEW] New sounds for M9, M1911, SVD, VSS Vintorez, PDW, PDW SD, Winchester 1866, Saiga 12k, Anzio. @AirwavesMan
+[NEW] All vehicles/buildings are grouped under special vehicle categories in the editor with the indicator: 'DayZ Epoch', @AirwavesMan
+[NEW] Painkiller packages can have 0 to 6 pills and can also be combined, similar to antibiotics. (b4b8860c) @AirwavesMan
+[NEW] New helicopter skins for CH-47, Mi-17, UH-1H. (43337b6a, c47821ee) @AirwavesMan
+[NEW] Added KA60 and AW159 Epoch versions with PKT and M240. (8de9858b) @AirwavesMan
+[NEW] Added Land_Ind_Oil_Pump_EP1_DZE, a version without the pumping sound. (8557f559) @seelenapparat
+[NEW] Added a proper display name for heli crashes. (ba31c67b) @seelenapparat
+[NEW] Players can craft a firebarrel kit from empty methylamin/oil barrels. (b4b93562) @AirwavesMan
+[NEW] Enabled DZE_defaultSkin by default. (9842279d) @AirwavesMan
+[NEW] Added 2 new AN2 versions with Twin Vickers and M134. (d98834aa) @AirwavesMan
+[NEW] Every vehicle ammunition can now be spawned in-game and was added to the loot tables and traders. (6e813dc1) @AirwavesMan
+[NEW] Reintroduced DayZ Mod stashes. Build the stash by right-clicking the canvas item. (8304efe9) @AirwavesMan
+[NEW] Storage buildings like gun racks, storage sheds, safes etc. can be upgraded to a version with more gear slots. (19889a9d) @AirwavesMan
+[NEW] Lumber can be crafted directly from wooden logs. (ae79f4ce) @AirwavesMan
+[NEW] Added DayZ Mod fences and gates with upgrade and snap support. (3724a1f3) @AirwavesMan
+[NEW] Added sounds for taking painkillers/antibiotics and attaching/detaching a weapon attachment. (a69948d5) @AirwavesMan
+[NEW] The community localization stringtable is now part of Epoch. (04a81c15) @AirwavesMan
+[NEW] Salival's Change Code script is now part of Epoch. (5e296fc0) @AirwavesMan
+[NEW] Added ZSC with global banking. Pull request # 2076. @oiad, @worldwidesorrow, @DevZupa
+[NEW] Added remote messaging with localization. Pull request # 2076. @oiad, @worldwidesorrow, @BigEgg17
+[NEW] Almost all epoch vehicles can now be upgraded. This includes trucks, helicopters and APCs. @AirwavesMan
+[NEW] Added vehicle upgrade manuals for trucks, helicopters and APCs. @AirwavesMan, @DeVloek, @Helion4
+[NEW] Added new variables DZE_Hero and DZE_Bandit. The variables define the Hero and Bandit humanity. Used for traders and in player_death. (431cbc88, 272a7406) @AirwavesMan
+[NEW] Heroes and Bandits will drop a dog tag on death which can be traded at the Hero or Bandit trader for humanity. Thx for the idea @Tecumseh. (431cbc88, 272a7406, 4f106220) @AirwavesMan
+[NEW] Special handling for floating loot in buildings over water. Use fixWaterPos = 1; in the building class that has this problem. (89bca2c9) @AirwavesMan
+[NEW] With activated weight system, traders will show the item's weight under item information. (e5af93b5) @AirwavesMan
+[NEW] Female players can now wear all ghillie suits. (758be289) @AirwavesMan, @Helion4
+[NEW] Added MTVR Bird helicopter. (8fa93188) @AirwavesMan, @Helion4
+[NEW] Added a winter version of the following objects: Lockbox, Camo Net, Tent, Dome Tent. (215932d7, 420ad269, 83012eb1) @AirwavesMan, @Helion4
+[NEW] Added a winter version of the following vehicles: BMP2, BRDM2, SUV, UAZ, Mi17, UH1H, T72, Ural, Kamaz, HMMWV. (34455948, cb1b34fc) @AirwavesMan
+[NEW] Added Mini Cooper, old Jeep, 11 Nissan 350z versions, VS3 Camper, MTVR Open, Scrap APC, armored Tractor and armored Bus. (a1e5fca7, db36bb48, 1ce3f92b, 0dc00d97, d0f647c0, 34c2c716, f8d8a686, 8feed62b) @AirwavesMan, @Helion4
+[NEW] Added interior to storage sheds and those on the map can now spawn loot. (ad8ca464, 35135c75) @AirwavesMan, @Helion4
+[NEW] Added a few new female skins. (758be289) @AirwavesMan, @Helion4
+[NEW] Added over 30 new base building items like a drawbridge, metal and wood gates, glass floors and many more. @AirwavesMan, @Helion4
+[NEW] Added many broken versions of already existing items and tools like Safe, Engine Parts, Wheel, Toolbox and many more. @AirwavesMan
+[NEW] Added lots of new items and tools like Handsaw, Hammer, Cement Bag, Carrot, Potato, Mobile Phone and more. @AirwavesMan, @Helion4
+[NEW] Added snapping support for Storage Sheds, Wood Shacks, Wooden Sheds, Gun Racks and Outhouses. (ca05896f) @AirwavesMan
+[NEW] Added Submarine (c316d20) @AirwavesMan, @Helion4
+
+[FIXED] Some more occurrences of zero_building interiors misaligned or at the wrong terrain height (eaaedf2, 048caa5) @ebayShopper
+[FIXED] Player could switch into gunner's seat of ArmoredSUV while the hatch was being closed (e89eebc) #2009 @TheFirstNoob
+[FIXED] POI fires were still spawning when POI was off and town generator was on (2855997) @ebayShopper
+[FIXED] Combo locks could be duplicated by two players removing them at the same time (564e3da) @shu, @oiad
+[FIXED] Bush b_corylus.p3d allowed chopping down for wood like a tree (42e519a) @ebayShopper
+[FIXED] Player could shoot during unconscious wake up animation (634a01a) @ebayShopper
+[FIXED] Rare publicVariable value restrictions for AuthKey due to RNG with basic Latin characters (d48c907) @oiad, @AirwavesMan
+[FIXED] Freeze when iterating through CfgWeapons in A2OA 1.64 due to conflict with ItemKeys in dayz_epoch_b.pbo #2010 @S-fly
+[FIXED] 45Rnd_545x39_RPK error after it was removed with the 2018-04-05 A2OA CorePatch (d249227) @ebayShopper
+[FIXED] Disabled Arma's automatic vehicle refuel, repair and rearm at WarfareBVehicleServicePoint buildings (2c4f06c) @dihan48
+[FIXED] DistanceFoot database stat was incorrect. (be777dd) @dihan48
+[FIXED] Vehicles jumping into the air after flipping. (096fc13) @AirwavesMan
+[FIXED] Crafting wooden arrows from wood piles and razors was not possible. (d4b46e4) @AirwavesMan
+[FIXED] Top snap point for half cinder wall was incorrect. (8f10a36) @ndavalos, @AirwavesMan
+[FIXED] The RPK-74 magazine could not be used with some AK-74 versions. (82485ea) @AirwavesMan
+[FIXED] Multiple vehicle upgrades were not possible. (ac884f2, a430f79, c24504a) @F507DMT
+[FIXED] Inventory dupe if on water. (a052ba7, baf92eb) @F507DMT
+[FIXED] The pickaxe and the broken pickaxe spawned in the ground on loot spawn. (a09bb81a) @AirwavesMan
+[FIXED] Floating loot from remove, pack and fn_dropItem. (1268f55) @AirwavesMan
+[FIXED] Giving water to dogs did not work with all waterbottles. (915cf72) @AirwavesMan
+[FIXED] Backpacks had no descriptions. (f1d5038) @AirwavesMan
+[FIXED] Potential dupe on lag with Advanced Trading. (0617a77, 5f44161) @oiad, @AirwavesMan, @loooooool(TEMA)
+[FIXED] Invisible backseat bug on LAV-HQ DZ and DZE version. (5c3f2162) @AirwavesMan
+[FIXED] The fuel capacity of the MH-6J Little Bird, Mi17 Civilian, UH60M was incorrect. (862cf39a, f0e08f22, fc9cb679) @AirwavesMan
+[FIXED] AIs could attack traders. (f0ac4afc) @AirwavesMan
+[FIXED] RHIB_DZ floating gunner position. (38a31290) @AirwavesMan
+[FIXED] The carry and drag functions have been fixed. (bcc5b63) @worldwidesorrow
+[FIXED] Bug on switching weapons. @worldwidesorrow
+[FIXED] Backpacks and keys were not counted within the weight system. (838e4a06, 49446122) @Damian6666 @AirwavesMan
+[FIXED] Biomeat had no infection chance. (b52325c9) @AirwavesMan
+[FIXED] Parachute speed bug by pressing certain keys. (2a41d122) @ch0c
+[FIXED] Loading screen progress bar did not work since the last Arma 2 1.64 patch. (21e5cfae) @IsGoose
+[FIXED] Players were unable to open a few tank versions with their key. (9cc8b5d8) @AirwavesMan
+[FIXED] The epoch versions of the RHIB boats were incorrect. (38a31290) @AirwavesMan
+[FIXED] Players are no longer able to exploit the player_wearClothes function to reset AI targeting. (5c29704) @morgoth0, @Arrakis, @worldwidesorrow.
+[FIXED] Vehicles should no longer explode after a server restart due to buildings loading in late. (99dc7cd7) @Seelenapparat
+[FIXED] CZ550 shadow bug (c22ae9e5) @AirwavesMan
+[FIXED] Floating loot in buildings over water. (89bca2c9) @AirwavesMan
+[FIXED] Potential kill count doubling after change clothes. (0b26ae12) @Seelenapparat
+[FIXED] Damaged vehicles will no longer repair after a vehicle upgrade. (95d528b8) @AirwavesMan
+[FIXED] Exorbitant damage from chainsaws and sledgehammers on buildings (118dbfa6) @AirwavesMan
+[FIXED] Players always looked north on spawn. (4aad93fe) @TH, @AirwavesMan
+[FIXED] Trees could be knocked down on the first hit by a hatchet or chainsaw. (8dc6ef8d) @AirwavesMan
+[FIXED] Female players had not the correct armor and camouflage set. (758be289) @AirwavesMan
+[FIXED] Sometimes players were not properly ejected from an exploded Cessna wreck. (0b6df456) @AirwavesMan
+[FIXED] Players were not in combat after shooting from certain helicopters or planes. (e6680aaa) @AirwavesMan
+[FIXED] Often the weapon on back was duped when the player was kicked or didn't log out properly. (1697af97) @AirwavesMan
+[FIXED] Filling mixed gas into a chainsaw now requires a chainsaw. (b0edf3cb) @AirwavesMan
+
+[UPDATED] All Epoch items and buildable models updated and optimized to affect less the performance. @Helion4
+[UPDATED] Spawning of Zombies and loot in Safe Zones can now be toggled, disabled by default, see configVariables.sqf/DZE_SafeZoneZombieLoot (6248add, 141b25e) @oiad, @_Lance_
+[UPDATED] Added notification when status icons are disabled. (e04f0fc) @ebayShopper
+[UPDATED] Added night vision mode back to DMR_DZ and M4SPR_DZE after it was removed with the 2018-04-05 A2OA CorePatch (d6cf707) @ebayShopper
+[UPDATED] All M32 grenades now use only one inventory slot. (cc85067) @AirwavesMan
+[UPDATED] The Czech Vest Pouch can now carry one weapon. This was changed to be more intuitive and to avoid disappearing weapons. (f7ea9cb) @AirwavesMan
+[UPDATED] Old/unused variables removed from variables.sqf. Entire file reorganized. (4accdee) @worldwidesorrow
+[UPDATED] Functions fnc_usec_damageHandler, dayz_inflame_showMenu, dayz_inflame_showMenu_other, DZ_KeyDown_EH, dayz_EjectPlayer compiled on client only - compiles.sqf. (7613e3a) @worldwidesorrow
+[UPDATED] Many unused trader cities were moved into a new folder called 'Archive'. Those files will no longer be updated. (6699d8d7) @AirwavesMan
+[UPDATED] All vehicle names updated and localizations added. (e36e3cc4) @AirwavesMan
+[UPDATED] The gunner optics angle of the BRDM-2 HQ was adjusted to have a better usage. (9ab576fa) @AirwavesMan
+[UPDATED] Moved FPS logging and server event spawner to the server scheduler (0a264b9) @worldwidesorrow
+[UPDATED] Vanilla events adjusted and moved to the server modules folder. The events are now spawned by the scheduler. (0a264b9) @worldwidesorrow
+[UPDATED] Rebuilt trader files and overhauled trader cities. (92700e8a) @AirwavesMan
+[UPDATED] Server side security added for higher risk PVDZ_send usage. (40dcf6f) @worldwidesorrow
+[UPDATED] New strings added to the string table for medical functions. (2a145bf) @worldwidesorrow
+[UPDATED] Medical functions revised. Old/unused medical functions moved to archive. @worldwidesorrow
+[UPDATED] Separate actions added for typed blood bags. Variable dayz_classicBloodBagSystem used to bypass unnecessary code. (a4c0638) @worldwidesorrow
+[UPDATED] All vehicles updated and many bugs fixed. Now there is a DZ and DZE class for every armed Epoch vehicle. @AirwavesMan
+[UPDATED] All silenced weapons can only be used with SD ammo, and all non-silenced weapons can only be used with regular (non-SD) ammo. (6f4b1706) @AirwavesMan
+[UPDATED] Increased bullet speed for the MK17 SD and Vintorez ammo. (1e69f357) @AirwavesMan
+[UPDATED] MK17 Sniper SD and Vintorez DZ and DZE versions have a higher zeroing. (3895cf9c) @AirwavesMan
+[UPDATED] AK74 and AKM start with the semi-automatic firemode instead of full-automatic. (9aeceebb, becfee04) @AirwavesMan
+[UPDATED] The FN Fal has a full-automatic mode again. (052becb) @AirwavesMan
+[UPDATED] Zombies will no longer get triggered by a chemlight at daytime. (93ba732e) @AirwavesMan
+[UPDATED] All magazines now have the combine option. @AirwavesMan
+[UPDATED] The Humanity system was updated for hotwiring vehicles and killing players. (f68bbda0, d5910357) @AirwavesMan, @oiad
+[UPDATED] The gear count of many vehicles (helicopters in particular) was updated and increased. (06b788a) @AirwavesMan
+[UPDATED] Sharpening a knife now has an animation. (b7892bfc) @AirwavesMan
+[UPDATED] Added full localization to snap and vector building. (fe1d7fb4) @AirwavesMan
+[UPDATED] Added the correct icon for the Terminal Backpack. (1a411660) @AirwavesMan, @DeVloek
+[UPDATED] Crafting a tent requires 2x equip_tent_poles instead of 2x ItemPole. (73289a69) @AirwavesMan
+[UPDATED] Crafting a firebarrel kit no longer requires matches. (b4b93562) @nadal28 @AirwavesMan
+[UPDATED] Crafting shows all required items now. (8315d899) @AirwavesMan
+[UPDATED] Relogging with a chainsaw in the backpack will delete the chainsaw gas instead of refilling it. (132e9506) @AirwavesMan
+[UPDATED] The group invite message now contains the name of the inviter. (396d0313) @ch0c, @AirwavesMan
+[UPDATED] Harvesting wood with a hatchet can now drop both wood piles and wooden logs. (ae79f4ce) @AirwavesMan
+[UPDATED] The maintain animation is interruptible now. (910ab43a) @AirwavesMan
+[UPDATED] Trading single items can be configured to change the player's humanity value. (4f106220) @AirwavesMan
+[UPDATED] The Journal main page was reworked and has some more information about the server settings now. (ef05eb4e) @AirwavesMan
+[UPDATED] Harvesting wood will yield at least 16 or more wood. This was added in order to decrease network traffic. (8dc6ef8d) @AirwavesMan
+[UPDATED] Increased cargo count of Refuel Trucks. (4667f20b) @AirwavesMan
+[UPDATED] Cinder buildings and metal floors have a new texture. @Helion4
+[UPDATED] Highly increased infection chance if the player eats uncooked meat or fish. (29b6a26) @AirwavesMan
+[UPDATED] Crafting wooden buildings now requires a handsaw and a hammer. (247f5dc6) @AirwavesMan
+[UPDATED] Full Russian Localization @RedLink-kam, @dreamforceinc
+
+[REMOVED] Epoch 1.0.7 does not support Database Traders any longer. All server admins with DB Traders have to switch to the config traders now. (49378f62) @AirwavesMan
+[REMOVED] NORRN_loadVcl, posForceUpdate, and medForceUpdate removed from setvariable.txt (47f07a8) @worldwidesorrow
+[REMOVED] PVDZ_drg_RaDrag, PVDZ_drg_RaLW, PVDZ_drg_RLact and PVDZ_Unconscious removed from publicvariable.txt. They have been replaced with PVDZ_send. (2d03fb9) @worldwidesorrow
+[REMOVED] DayZ Vanilla Crafting - all recipes were moved to Epoch Crafting. (8315d899) @AirwavesMan
+
+[INFO] Synced with DayZMod upstream up to commit fe063a8
+[INFO] Removed functions can be found under "dayz_code\old".
+[INFO] Big thanks to the following authors which allowed us to use their content: SumrakDZN, Icewindo, Brainbug, lennard91, stagler, SyNcRoNiCzZ, Sam563, Alwarren, Robert Hammer, Marseille77
\ No newline at end of file
diff --git a/README.md b/README.md
index 479c94a05..a44a0b184 100644
--- a/README.md
+++ b/README.md
@@ -14,62 +14,63 @@ http://dayzmod.com
--------------------------
Included Custom Addons
--------------------------
-* DayZero Enterable Buildings - https://zombies.nu/
-* AutoGyro - by CSJ http://www.armaholic.com/page.php?id=2359
-* Taxi by [GLT]Myke http://www.armaholic.com/page.php?id=12289
-* Blackhawk and Seahawk Wrecks by [GLT]Myke http://www.armaholic.com/page.php?id=10670
-* SUV Colors by Python.au http://www.armaholic.com/page.php?id=17176
-* R3F Realism by Team [R3F] - http://www.armaholic.com/page.php?id=12610
-* ASC EU Lights Mod http://www.armaholic.com/page.php?id=12076
-* MAP Editorupgrade (EU) http://www.armaholic.com/page.php?id=6194
-* ShackTac Movement by Rg - http://www.armaholic.com/page.php?id=12540
-* ShackTac Bunnyhop by Macolik - http://www.armaholic.com/page.php?id=17546
-* Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr and Sahbazz http://www.armaholic.com/page.php?id=13053
-* gdtmod_grass 1.00 by HeinBloed - http://www.armaholic.com/page.php?id=6628
-* Bell 47/H-13 Helicopter by hcpookie - http://www.armaholic.com/page.php?id=22143
-* USEC CH53 by Rocket - http://www.armaholic.com/page.php?id=13949
-* Anzio 20mm Rifle by WillRobinson - http://www.armaholic.com/page.php?id=30175
-* RedRyder BB Gun by WillRobinson - https://github.com/arma2WillRobinson/Red-Ryder
-* Namalsk Addons by SumrakDZN - https://github.com/SumrakDZN/DayZNamalsk
-* Stalker Units by Icewindo - http://www.armaholic.com/page.php?id=9795
-* Post Apocalypse Units by Icewindo - http://www.armaholic.com/page.php?id=11840
-* Ghillie Suits by Brainbug - http://www.armaholic.com/page.php?id=11424
-* Retextured German KSK Units by Brainbug - http://www.armaholic.com/page.php?id=11129
-* 19 Backpack Variants by lennard91 - http://www.armaholic.com/page.php?id=13793
-* Spetsnaz GRU by stagler - http://www.armaholic.com/page.php?id=15693
-* CH-47 Reskins by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=11202
-* RACS UH-1H Huey Reskins by lennard91 - http://www.armaholic.com/page.php?id=11697
-* UH1H Search and Rescue Skin by Sam563 - https://opendayz.net/threads/uh1h-search-and-rescue-skin.22516/
-* Contractor Mi-17 Pack by lennard91 - http://www.armaholic.com/page.php?id=18498
-* "Heckler & Koch" MP7 by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=8379
-* P99 Projekt by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=9985
-* FAMAS Pack by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=8867
-* FHQ Remington Weapon Pack by Alwarren - http://www.armaholic.com/page.php?id=17971
-* RH PDW pack by Robert Hammer - http://www.armaholic.com/page.php?id=12214
-* RH M14 pack by Robert Hammer - http://www.armaholic.com/page.php?id=11374
-* RH Pistol Pack Remake by Robert Hammer - http://www.armaholic.com/page.php?id=12800
-* RH SMG pack by Robert Hammer - http://www.armaholic.com/page.php?id=13788
-* RH HK416 Pack by Robert Hammer - http://www.armaholic.com/page.php?id=11789
-* RH Ak's Pack by Robert Hammer - http://www.armaholic.com/page.php?id=9029
-* RH MGS weapon pack by Robert Hammer - http://www.armaholic.com/page.php?id=13095
-* German Technical Relief Pack (THW Pack) by Marseille77 - http://www.armaholic.com/page.php?id=15466
-* German Firefighters Pack by Marseille77 - http://www.armaholic.com/page.php?id=20391
-* German Civil Pack by Marseille77 - http://www.armaholic.com/page.php?id=9793
-* Sahrani Rearmed: Sahrani Civilians by Marseille77 - http://www.armaholic.com/page.php?id=24325
-* Modern Irish Defence Forces - Steyr Aug A3 Pack by SyNcRoNiCzZ - http://www.armaholic.com/page.php?id=9505
-* Standard Vehicles Pack by Marseille77 - https://www.armaholic.com/page.php?id=10730
-* Nissan 350z by CRASHNZ - https://www.armaholic.com/page.php?id=8570
+* DayZero Enterable Buildings
+* AutoGyro - by CSJ
+* Taxi by [GLT]Myke
+* Blackhawk and Seahawk Wrecks by [GLT]Myke
+* SUV Colors by Python.au
+* R3F Realism by Team [R3F]
+* ASC EU Lights Mod
+* MAP Editorupgrade (EU)
+* ShackTac Movement by Rg
+* ShackTac Bunnyhop by Macolik
+* Jetski Yanahui by Kol9yN, Zakat, Gerasimow9, YuraPetrov, zGuba, A.Karagod, IceBreakr and Sahbazz
+* gdtmod_grass 1.00 by HeinBloed
+* Bell 47/H-13 Helicopter by hcpookie
+* USEC CH53 by Rocket
+* Anzio 20mm Rifle by WillRobinson
+* RedRyder BB Gun by WillRobinson
+* Namalsk Addons and Bloodsucker by SumrakDZN
+* Stalker Units by Icewindo
+* Post Apocalypse Units by Icewindo
+* Ghillie Suits by Brainbug
+* Retextured German KSK Units by Brainbug
+* 19 Backpack Variants by lennard91
+* Spetsnaz GRU by stagler
+* CH-47 Reskins by SyNcRoNiCzZ
+* RACS UH-1H Huey Reskins by lennard91
+* UH1H Search and Rescue Skin by Sam563
+* Contractor Mi-17 Pack by lennard91
+* "Heckler & Koch" MP7 by SyNcRoNiCzZ
+* P99 Projekt by SyNcRoNiCzZ
+* FAMAS Pack by SyNcRoNiCzZ
+* FHQ Remington Weapon Pack by Alwarren
+* RH PDW pack by Robert Hammer
+* RH M14 pack by Robert Hammer
+* RH Pistol Pack Remake by Robert Hammer
+* RH SMG pack by Robert Hammer
+* RH HK416 Pack by Robert Hammer
+* RH Ak's Pack by Robert Hammer
+* RH MGS weapon pack by Robert Hammer
+* German Technical Relief Pack (THW Pack) by Marseille77
+* German Firefighters Pack by Marseille77
+* German Civil Pack by Marseille77
+* Sahrani Rearmed: Sahrani Civilians by Marseille77
+* Modern Irish Defence Forces - Steyr Aug A3 Pack by SyNcRoNiCzZ
+* Standard Vehicles Pack by Marseille77
+* Nissan 350z by CRASHNZ
+* G3 Pack by Marseille77
--------------------------
Included Custom Islands
--------------------------
-* Sauerland by Falconsan - http://www.s6computer.de/
+* Sauerland by Falconsan
* Napf Island by #momo# - http://forums.bistudio.com/showthread.php?136469-Napf-Island-beta
-* | MBG Killhouses http://www.armaholic.com/page.php?id=15180
-* | MBG Buildings 3 - European Theatre http://www.armaholic.com/page.php?id=14828
-* | MBG Generic African Buildings http://www.armaholic.com/page.php?id=17817
-* | German Town - and waysigns http://www.armaholic.com/page.php?id=9658
-* FDF Podagorsk by Goth http://www.armaholic.com/page.php?id=8791
-* Chernarus Winter by ArmanIII http://www.armaholic.com/page.php?id=27807
+* | MBG Killhouses
+* | MBG Buildings 3 - European Theatre
+* | MBG Generic African Buildings
+* | German Town - and waysigns
+* FDF Podagorsk by Goth
+* Chernarus Winter by ArmanIII
--------------------------
Initial Developers
@@ -165,7 +166,7 @@ Special thanks
* Rajkosto - DayZ Hive DLL - https://github.com/rajkosto/hive
* DayZ Community Developers - https://github.com/DayZMod
* ziellos2k - Tag Friendly code. https://github.com/ziellos2k
-* Tansien and Zac - for providing and creating DayZero Enterable Buildings https://zombies.nu/
+* Tansien and Zac - for providing and creating DayZero Enterable Buildings
* Munchiefest - Beta Tester, Wiki Editor, Ideas - http://www.twitch.tv/munchiefest
* Chelsey - Beta Tester, New female textures.
* OrangeSherbet - Beta Tester - http://www.twitch.tv/orangesherbet
diff --git a/SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp b/SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp
new file mode 100644
index 000000000..3d63b6d30
--- /dev/null
+++ b/SQF/dayz_code/Configs/CfgMagazines/Buildings/StaticWeapons.hpp
@@ -0,0 +1,527 @@
+class M2_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_M2_MG;
+ descriptionShort = $STR_DN_M2_MG;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "M2_MG_Static_DZ";
+ };
+ };
+};
+
+class M2_TriPod_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_M2HD_MINITRIPOD;
+ descriptionShort = $STR_DN_M2HD_MINITRIPOD;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "M2_TriPod_MG_Static_DZ";
+ };
+ };
+};
+
+class DSHKM_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_DSHKM;
+ descriptionShort = $STR_DN_DSHKM;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "DSHKM_MG_Static_DZ";
+ };
+ };
+};
+
+class DSHKM_TriPod_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_DSHKM_MINITRIPOD;
+ descriptionShort = $STR_DN_DSHKM_MINITRIPOD;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "DSHKM_TriPod_MG_Static_DZ";
+ };
+ };
+};
+
+class KORD_TriPod_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_KORD_LOW;
+ descriptionShort = $STR_DN_KORD_LOW;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "KORD_Tripod_MG_Static_DZ";
+ };
+ };
+};
+
+class KORD_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_KORD;
+ descriptionShort = $STR_DN_KORD;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "KORD_MG_Static_DZ";
+ };
+ };
+};
+
+class L2A1_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_BAF_BAF_L2A1_TRIPOD_D0;
+ descriptionShort = $STR_BAF_BAF_L2A1_TRIPOD_D0;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "L2A1_MG_Static_DZ";
+ };
+ };
+};
+
+class L2A1_Tripod_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_BAF_BAF_L2A1_MINITRIPOD_D0;
+ descriptionShort = $STR_BAF_BAF_L2A1_MINITRIPOD_D0;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "L2A1_Tripod_MG_Static_DZ";
+ };
+ };
+};
+
+class GMG_Tripod_MG_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_BAF_BAF_GMG_TRIPOD_D0;
+ descriptionShort = $STR_BAF_BAF_GMG_TRIPOD_D0;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "GMG_Tripod_MG_Static_DZ";
+ };
+ };
+};
+
+class AGS30_GrenadeLauncher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_AGS30;
+ descriptionShort = $STR_DN_AGS30;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "AGS30_GrenadeLauncher_Static_DZ";
+ };
+ };
+};
+
+class MK19_TriPod_GrenadeLauncher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_MK19_TRIPOD;
+ descriptionShort = $STR_DN_MK19_TRIPOD;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "MK19_TriPod_GrenadeLauncher_Static_DZ";
+ };
+ };
+};
+
+class GPMG_TriPod_GrenadeLauncher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_BAF_BAF_GPMG_MINITRIPOD_D0;
+ descriptionShort = $STR_BAF_BAF_GPMG_MINITRIPOD_D0;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "GPMG_TriPod_GrenadeLauncher_Static_DZ";
+ };
+ };
+};
+
+class M119_Artillery_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_M119;
+ descriptionShort = $STR_DN_M119;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "M119_Artillery_Static_DZ";
+ };
+ };
+};
+
+class D30_Artillery_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_D30;
+ descriptionShort = $STR_DN_D30;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "D30_Artillery_Static_DZ";
+ };
+ };
+};
+
+class SearchLight_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_SEARCHLIGHT;
+ descriptionShort = $STR_DN_SEARCHLIGHT;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "SearchLight_Static_DZ";
+ };
+ };
+};
+
+class M252_Mortar_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_M252;
+ descriptionShort = $STR_DN_M252;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "M252_Mortar_Static_DZ";
+ };
+ };
+};
+
+class 2b14_82mm_Mortar_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_2B14;
+ descriptionShort = $STR_DN_2B14;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "2b14_82mm_Mortar_Static_DZ";
+ };
+ };
+};
+
+class Metis_Launcher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_AT13;
+ descriptionShort = $STR_DN_AT13;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "Metis_Launcher_Static_DZ";
+ };
+ };
+};
+
+class SPG9_Launcher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_SPG9;
+ descriptionShort = $STR_DN_SPG9;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "SPG9_Launcher_Static_DZ";
+ };
+ };
+};
+
+class Stinger_Tripod_Launcher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_STINGER_POD;
+ descriptionShort = $STR_DN_STINGER_POD;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "Stinger_Tripod_Launcher_Static_DZ";
+ };
+ };
+};
+
+class TOW_Tripod_Launcher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_TOW_TRIPOD;
+ descriptionShort = $STR_DN_TOW_TRIPOD;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "TOW_Tripod_Launcher_Static_DZ";
+ };
+ };
+};
+
+class Rbs70_Launcher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_ACR_DN_RBS70;
+ descriptionShort = $STR_ACR_DN_RBS70;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "Rbs70_Launcher_Static_DZ";
+ };
+ };
+};
+
+class Igla_AntiAir_Launcher_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_IGLA_AA_POD_EAST;
+ descriptionShort = $STR_DN_IGLA_AA_POD_EAST;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "Igla_AntiAir_Launcher_Static_DZ";
+ };
+ };
+};
+
+class ZU23_AntiAir_Static_kit: CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ type = 256;
+ displayName = $STR_DN_ZU23;
+ descriptionShort = $STR_DN_ZU23;
+ model = "\z\addons\dayz_epoch\models\supply_crate.p3d";
+ picture = "\z\addons\dayz_epoch\pictures\equip_wooden_crate_ca.paa";
+
+ class ItemActions
+ {
+ class Build
+ {
+ text = $STR_ACTIONS_BUILD;
+ script = "spawn player_build;";
+ require[] = {"ItemToolbox"};
+ create = "ZU23_AntiAir_Static_DZ";
+ };
+ };
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp b/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp
index f54704326..94c158dde 100644
--- a/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp
+++ b/SQF/dayz_code/Configs/CfgMagazines/CfgMagazines.hpp
@@ -65,5 +65,6 @@ class CfgMagazines
#include "Buildings\Fences.hpp"
#include "Buildings\Storage.hpp"
#include "Buildings\Tent.hpp"
- #include "Buildings\Misc.hpp"
+ #include "Buildings\Misc.hpp"
+ #include "Buildings\StaticWeapons.hpp"
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp b/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp
index e8ccdf74b..af0c90661 100644
--- a/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp
+++ b/SQF/dayz_code/Configs/CfgMagazines/Items/Misc.hpp
@@ -262,6 +262,160 @@ class ItemCeramicParts : CA_Magazine
type = 256;
};
+class ItemWeaponPartsPistol : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_PISTOL;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_PISTOL_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsSMG : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_SMG;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_SMG_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsShotgun : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_SHOTGUN;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_SHOTGUN_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsRifle : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_RIFLE;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_RIFLE_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsSniperRilfe : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_SNIPERRIFLE;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_SNIPERRIFLE_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsMG : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_MG;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_MG_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsUnknown : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_UNKNOWN_MG;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_UNKNOWN_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsBad : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_BAD;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_BAD_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsNormal : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_NORMAL;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_NORMAL_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsGood : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_GOOD;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_GOOD_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemWeaponPartsExecellent : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_WEAPON_PARTS_EXCELLENT;
+ descriptionShort = $STR_EPOCH_WEAPON_PARTS_EXCELLENT_DESC;
+ model = "\z\addons\dayz_communityassets\models\crate.p3d";
+ picture = "\z\addons\dayz_communityassets\CraftingPlaceholders\equip_part_somegeneric.paa";
+ type = 256;
+};
+
+class ItemGunPowderSmall : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_GUN_POWDER_SMALL;
+ descriptionShort = $STR_EPOCH_GUN_POWDER_SMALL_DESC;
+ model = "\z\addons\dayz_communityassets\models\tin_powder.p3d";
+ picture = "\z\addons\dayz_communityassets\pictures\equip_tin_powder_co.paa";
+ type = 256;
+};
+
+class ItemGunPowder : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_GUN_POWDER;
+ descriptionShort = $STR_EPOCH_GUN_POWDER_DESC;
+ model = "\z\addons\dayz_communityassets\models\tin_powder.p3d";
+ picture = "\z\addons\dayz_communityassets\pictures\equip_tin_powder_co.paa";
+ type = 256;
+};
+
+class ItemGunPowderBig : CA_Magazine
+{
+ scope = 2;
+ count = 1;
+ displayName = $STR_EPOCH_GUN_POWDER_BIG;
+ descriptionShort = $STR_EPOCH_GUN_POWDER_BIG_DESC;
+ model = "\z\addons\dayz_communityassets\models\tin_powder.p3d";
+ picture = "\z\addons\dayz_communityassets\pictures\equip_tin_powder_co.paa";
+ type = 256;
+};
+
//No models
class equip_cable_tie : CA_Magazine
{
diff --git a/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp b/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp
index 48427dd55..4a164e38b 100644
--- a/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp
+++ b/SQF/dayz_code/Configs/CfgMagazines/Magazines/50AE.hpp
@@ -9,4 +9,9 @@ class 7Rnd_50AE_Deagle: CA_Magazine
ammo = "B_357mag_Ball";
count = 7;
initSpeed = 400;
+
+ class ItemActions
+ {
+ COMBINE_MAG
+ };
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp b/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp
index 6f9af29d1..faf5b509b 100644
--- a/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp
+++ b/SQF/dayz_code/Configs/CfgMagazines/Magazines/556x45.hpp
@@ -50,7 +50,14 @@ class 100Rnd_556x45_BetaCMagSD: 100Rnd_556x45_BetaCMag {
};
/* STANAG <-> G36 */
-class 20Rnd_556x45_Stanag;
+class 20Rnd_556x45_Stanag : CA_Magazine
+{
+ class ItemActions
+ {
+ COMBINE_MAG
+ };
+};
+
class 30Rnd_556x45_Stanag : 20Rnd_556x45_Stanag
{
displayName = $STR_DZ_MAG_30RND_556x45_STANAG_NAME;
diff --git a/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp b/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp
index d908f9d96..31a7fd044 100644
--- a/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp
+++ b/SQF/dayz_code/Configs/CfgMagazines/Magazines/VehicleAmmo.hpp
@@ -1484,7 +1484,7 @@ class 8Rnd_82mmILLUM_2B14: 8Rnd_82mmHE_2B14
};
class 200Rnd_40mmHE_FV510: Vehicle_ammo_base
{
- scope = 1;
+ scope = 2;
displayName = $STR_DZ_MAG_200RND_FV510HE_NAME;
descriptionShort = $STR_DZ_MAG_200RND_FV510HE_DESC;
ammo = "Sh_40_HE";
diff --git a/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp b/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp
index 065651f50..7a490bb7b 100644
--- a/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp
+++ b/SQF/dayz_code/Configs/CfgServerTrader/Category/Weapons.hpp
@@ -459,10 +459,10 @@ class Category_16 {
class AK74_GL_PSO1_SD_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {1,"ItemGoldBar10oz"};};
class AK107_DZ {type = "trade_weapons";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
class AK107_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {3,"ItemGoldBar"};};
- class AK107_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {5,"ItemGoldBar"};};
+ class AK107_PSO_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {5,"ItemGoldBar"};};
class AK107_GL_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {3,"ItemGoldBar"};};
class AK107_GL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {5,"ItemGoldBar"};};
- class AK107_GL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {7,"ItemGoldBar"};};
+ class AK107_GL_PSO_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {7,"ItemGoldBar"};};
class AN94_DZ {type = "trade_weapons";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
class AN94_GL_DZ {type = "trade_weapons";buy[] = {-1,"ItemGoldBar"};sell[] = {3,"ItemGoldBar"};};
class SCAR_H_AK_DZ {type = "trade_weapons";buy[] = {8,"ItemGoldBar"};sell[] = {4,"ItemGoldBar"};};
diff --git a/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp b/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp
index 9984fdb66..959b022de 100644
--- a/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp
+++ b/SQF/dayz_code/Configs/CfgServerTrader/Category/Wholesale.hpp
@@ -16,4 +16,12 @@ class Category_50 {
class ItemRSJ {type = "trade_items";buy[] = {1,"ItemGoldBar10oz"};sell[] = {5,"ItemGoldBar"};};
class ItemFuelBarrelEmpty {type = "trade_items";buy[] = {1,"ItemGoldBar"};sell[] = {5,"ItemSilverBar10oz"};};
class ItemFuelBarrel {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
+};
+
+class Category_52 {
+ class helipad_civil_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
+ class helipad_rescue_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
+ class helipad_army_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
+ class helipad_cross_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
+ class helipad_parkborder_kit {type = "trade_items";buy[] = {2,"ItemGoldBar"};sell[] = {1,"ItemGoldBar"};};
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp
index f5bb4e067..23bebf4b0 100644
--- a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp
+++ b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Weapons.hpp
@@ -459,10 +459,10 @@ class Category_16 {
class AK74_GL_PSO1_SD_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {1000,"worth"};};
class AK107_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};};
class AK107_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};};
- class AK107_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};};
+ class AK107_PSO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};};
class AK107_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};};
class AK107_GL_Kobra_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {500,"worth"};};
- class AK107_GL_PSO1_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};};
+ class AK107_GL_PSO_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {700,"worth"};};
class AN94_DZ {type = "trade_weapons";buy[] = {200,"worth"};sell[] = {100,"worth"};};
class AN94_GL_DZ {type = "trade_weapons";buy[] = {-1,"worth"};sell[] = {300,"worth"};};
class SCAR_H_AK_DZ {type = "trade_weapons";buy[] = {800,"worth"};sell[] = {400,"worth"};};
diff --git a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp
index 9c44c8e47..130f6f0a9 100644
--- a/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp
+++ b/SQF/dayz_code/Configs/CfgServerTraderZSC/Category/Wholesale.hpp
@@ -16,4 +16,12 @@ class Category_50 {
class ItemRSJ {type = "trade_items";buy[] = {1000,"worth"};sell[] = {500,"worth"};};
class ItemFuelBarrelEmpty {type = "trade_items";buy[] = {100,"worth"};sell[] = {50,"worth"};};
class ItemFuelBarrel {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};};
+};
+
+class Category_52 {
+ class helipad_civil_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};};
+ class helipad_rescue_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};};
+ class helipad_army_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};};
+ class helipad_cross_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};};
+ class helipad_parkborder_kit {type = "trade_items";buy[] = {200,"worth"};sell[] = {100,"worth"};};
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp b/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp
index 25c546953..0a834b794 100644
--- a/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp
+++ b/SQF/dayz_code/Configs/CfgVehicles/Buildables/Misc.hpp
@@ -241,22 +241,6 @@ class Fort_RazorWire : BuiltItems {
nounderground = 0;
};
-class USMC_WarfareBMGNest_M240;
-class M240Nest_DZ: USMC_WarfareBMGNest_M240
-{
- destrType = "DestructBuilding";
- armor = 450;
- scope = 2;
- offset[] = {0,3.5,0};
- displayName = $STR_EPOCH_M240NEST;
- vehicleClass = "DayZ Epoch Buildables";
- transportMaxMagazines = 25;
- transportMaxWeapons = 4;
- transportMaxBackpacks = 1;
- constructioncount = 10;
- removeoutput[] = {{"m240_nest_kit",1}};
-};
-
class WoodGate_DZ: BuiltItems
{
scope = 2;
@@ -333,7 +317,7 @@ class Greenhouse_DZ: MAP_Misc_Greenhouse
mapSize = 2;
displayName = $STR_EPOCH_GREENHOUSE;
constructioncount = 1;
- offset[] = {0,3,2};
+ offset[] = {0,5,1.4};
removeoutput[] = {{"greenhouse_kit",1}};
vehicleClass = "DayZ Epoch Buildables";
};
diff --git a/SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp b/SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp
new file mode 100644
index 000000000..80a3bbb52
--- /dev/null
+++ b/SQF/dayz_code/Configs/CfgVehicles/Buildables/StaticWeapons.hpp
@@ -0,0 +1,288 @@
+class USMC_WarfareBMGNest_M240;
+class M240Nest_DZ: USMC_WarfareBMGNest_M240
+{
+ destrType = "DestructBuilding";
+ armor = 450;
+ scope = 2;
+ offset[] = {0,3.5,0};
+ displayName = $STR_EPOCH_M240NEST;
+ transportMaxMagazines = 25;
+ transportMaxWeapons = 4;
+ transportMaxBackpacks = 1;
+ constructioncount = 10;
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"m240_nest_kit",1}};
+};
+
+class M2StaticMG;
+class M2_MG_Static_DZ: M2StaticMG {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "M2_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"M2_MG_Static_kit",1}};
+};
+
+class M2HD_mini_TriPod;
+class M2_TriPod_MG_Static_DZ: M2HD_mini_TriPod {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "M2_TriPod_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"M2_TriPod_MG_Static_kit",1}};
+};
+
+class DSHKM_Ins;
+class DSHKM_MG_Static_DZ: DSHKM_Ins {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,2};
+ GhostPreview = "DSHKM_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"DSHKM_MG_Static_kit",1}};
+};
+
+class DSHkM_Mini_TriPod;
+class DSHKM_TriPod_MG_Static_DZ: DSHkM_Mini_TriPod {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "DSHKM_TriPod_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"DSHKM_TriPod_MG_Static_kit",1}};
+};
+
+class KORD;
+class KORD_Tripod_MG_Static_DZ: KORD {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "KORD_Tripod_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"KORD_TriPod_MG_Static_kit",1}};
+};
+
+class KORD_high;
+class KORD_MG_Static_DZ: KORD_high {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,2};
+ GhostPreview = "KORD_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"KORD_MG_Static_kit",1}};
+};
+
+class BAF_L2A1_ACOG_base;
+class BAF_L2A1_Tripod_D: BAF_L2A1_ACOG_base {
+ class assembleInfo;
+};
+
+class L2A1_MG_Static_DZ: BAF_L2A1_Tripod_D {
+ side = 1;
+ faction = "USMC";
+ class assembleInfo: assembleInfo {
+ dissasembleTo[] = {};
+ };
+ offset[] = {0,3,1};
+ GhostPreview = "L2A1_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"L2A1_MG_Static_kit",1}};
+};
+
+class BAF_L2A1_Minitripod_D: BAF_L2A1_ACOG_base {
+ class assembleInfo;
+};
+
+class L2A1_Tripod_MG_Static_DZ: BAF_L2A1_Minitripod_D {
+ side = 1;
+ faction = "USMC";
+ class assembleInfo: assembleInfo {
+ dissasembleTo[] = {};
+ };
+ offset[] = {0,3,1};
+ GhostPreview = "L2A1_Tripod_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"L2A1_Tripod_MG_Static_kit",1}};
+};
+
+class GMG_TriPod;
+class BAF_GMG_Tripod_D: GMG_TriPod {
+ class assembleInfo;
+};
+
+class GMG_Tripod_MG_Static_DZ: BAF_GMG_Tripod_D {
+ side = 1;
+ faction = "USMC";
+ class assembleInfo: assembleInfo {
+ dissasembleTo[] = {};
+ };
+ offset[] = {0,3,0};
+ GhostPreview = "GMG_Tripod_MG_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"GMG_Tripod_MG_Static_kit",1}};
+};
+
+class AGS_Ins;
+class AGS30_GrenadeLauncher_Static_DZ: AGS_Ins {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "AGS30_GrenadeLauncher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"AGS30_GrenadeLauncher_Static_kit",1}};
+};
+
+class MK19_TriPod;
+class MK19_TriPod_GrenadeLauncher_Static_DZ: MK19_TriPod {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "MK19_TriPod_GrenadeLauncher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"MK19_TriPod_GrenadeLauncher_Static_kit",1}};
+};
+
+class BAF_GPMG_Minitripod_D: BAF_L2A1_ACOG_base {
+ class assembleInfo;
+};
+
+class GPMG_TriPod_GrenadeLauncher_Static_DZ: BAF_GPMG_Minitripod_D {
+ side = 1;
+ faction = "USMC";
+ class assembleInfo: assembleInfo {
+ dissasembleTo[] = {};
+ };
+ offset[] = {0,3,1};
+ GhostPreview = "GPMG_TriPod_GrenadeLauncher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"GPMG_TriPod_GrenadeLauncher_Static_kit",1}};
+};
+
+class M119;
+class M119_Artillery_Static_DZ: M119 {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,5,0.5};
+ GhostPreview = "M119_Artillery_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"M119_Artillery_Static_kit",1}};
+};
+
+class D30_Ins;
+class D30_Artillery_Static_DZ: D30_Ins {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,5,1};
+ GhostPreview = "D30_Artillery_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"D30_Artillery_Static_kit",1}};
+};
+
+class SearchLight_INS;
+class SearchLight_Static_DZ: SearchLight_INS {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,0};
+ GhostPreview = "SearchLight_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"SearchLight_Static_kit",1}};
+};
+
+class M252;
+class M252_Mortar_Static_DZ: M252 {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "M252_Mortar_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"M252_Mortar_Static_kit",1}};
+};
+
+class 2b14_82mm;
+class 2b14_82mm_Mortar_Static_DZ: 2b14_82mm {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "2b14_82mm_Mortar_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"2b14_82mm_Mortar_Static_kit",1}};
+};
+
+class Metis;
+class Metis_Launcher_Static_DZ: Metis {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,1};
+ GhostPreview = "Metis_Launcher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"Metis_Launcher_Static_kit",1}};
+};
+
+class SPG9_Gue;
+class SPG9_Launcher_Static_DZ: SPG9_Gue {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,0};
+ GhostPreview = "SPG9_Launcher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"SPG9_Launcher_Static_kit",1}};
+};
+
+class Stinger_Pod;
+class Stinger_Tripod_Launcher_Static_DZ: Stinger_Pod {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,0};
+ GhostPreview = "Stinger_Tripod_Launcher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"Stinger_Tripod_Launcher_Static_kit",1}};
+};
+
+class TOW_TriPod;
+class TOW_Tripod_Launcher_Static_DZ: TOW_TriPod {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,2};
+ GhostPreview = "TOW_Tripod_Launcher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"TOW_Tripod_Launcher_Static_kit",1}};
+};
+
+class Stinger_Pod_base;
+class Rbs70_ACR: Stinger_Pod_base {
+ class AssembleInfo;
+};
+
+class Rbs70_Launcher_Static_DZ: Rbs70_ACR {
+ side = 1;
+ faction = "USMC";
+ class AssembleInfo : AssembleInfo {
+ dissasembleTo[] = {};
+ };
+ offset[] = {0,3,4};
+ GhostPreview = "Rbs70_Launcher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"Rbs70_Launcher_Static_kit",1}};
+};
+
+class Igla_AA_pod_East;
+class Igla_AntiAir_Launcher_Static_DZ: Igla_AA_pod_East {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,2};
+ GhostPreview = "Igla_AntiAir_Launcher_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"Igla_AntiAir_Launcher_Static_kit",1}};
+};
+
+class ZU23_Ins;
+class ZU23_AntiAir_Static_DZ: ZU23_Ins {
+ side = 1;
+ faction = "USMC";
+ offset[] = {0,3,2};
+ GhostPreview = "ZU23_AntiAir_Static_DZ";
+ vehicleClass = "DayZ Epoch Static Weapons";
+ removeoutput[] = {{"ZU23_AntiAir_Static_kit",1}};
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp
index e827177c0..9348c66a0 100644
--- a/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp
+++ b/SQF/dayz_code/Configs/CfgVehicles/CfgVehicles.hpp
@@ -622,6 +622,7 @@ class CfgVehicles
#include "Zeds\WildZeds.hpp" //Wild type zeds
#include "Zeds\SwarmZeds.hpp" //Swarm type zeds
#include "Zeds\PlayerZeds.hpp" //Player type zeds
+ #include "Zeds\Bloodsuckers.hpp" //NS Bloodsuckers
//Skins
#include "Skins\Male.hpp"
#include "Skins\Female.hpp"
@@ -780,6 +781,7 @@ class CfgVehicles
#include "Buildables\Sandbags.hpp"
#include "Buildables\Billboards.hpp"
#include "Buildables\Misc.hpp"
+ #include "Buildables\StaticWeapons.hpp"
//Loot Container
#include "LootContainer\AmmoCrates.hpp"
diff --git a/SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp b/SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp
new file mode 100644
index 000000000..686337797
--- /dev/null
+++ b/SQF/dayz_code/Configs/CfgVehicles/Zeds/Bloodsuckers.hpp
@@ -0,0 +1,134 @@
+class z_bloodsucker : Zed_Base {
+ scope = 2;
+ glassesEnabled = 0;
+ vehicleClass = "Zombie";
+ displayName = $STR_ZNAME_BLOODSUCKER;
+ model = "\nst\NS_mutants\blood\bloodsucker.p3d";
+ hiddenSelections[] = {"invisible"};
+ //hiddenSelectionsTextures[] = {};
+ fsmDanger = "";
+ fsmFormation = "";
+ //zombieLoot = "bloodsucker";
+ moves = "CfgMovesBloodsucker";
+ isMan = false;
+ weapons[] = {};
+ magazines[] = {};
+ sensitivity = 1; // sensor sensitivity
+ sensitivityEar = 1;
+ identityTypes[] = {};
+ class TalkTopics {};
+ languages[] = {};
+ armor = 46;
+ damageScale = 250;
+ sepsisChance = 0;
+ BleedChance = 10; // Maybe this should be higher
+ forcedSpeed = 6; // Left here to prevent errors in player_zombieCheck
+
+ class Eventhandlers {
+ init = "[(_this select 0)] execFSM ""\z\AddOns\dayz_code\system\mutant_agent.fsm""";
+ local = "_z = _this select 0; if (!(_this select 1)) exitWith {}; if (isServer) exitWith { _z call sched_co_deleteVehicle; }; [_z,true] execFSM '\z\AddOns\dayz_code\system\mutant_agent.fsm';";
+ //HandleDamage = "_this call local_zombieDamage;";
+ //Killed = "[_this,'zombieKills'] call local_eventKill;";
+ };
+
+ class UserActions
+ {
+ class Butcher
+ {
+ displayName = $STR_EPOCH_ACTIONS_GUTBLOOD;
+ displayNameDefault = $STR_EPOCH_ACTIONS_GUTBLOOD;
+ priority = 0;
+ radius = 3;
+ position = "";
+ showWindow = 1;
+ onlyForPlayer = 1;
+ shortcut = "";
+ condition = "(['Butcher',this] call userActionConditions)";
+ statement = "this spawn player_butcher;";
+ };
+ };
+
+ class HitPoints {
+ class HitHead {
+ armor = 10;
+ material = -1;
+ name = "head_hit";
+ passThrough = true;
+ memoryPoint = "pilot";
+ };
+
+ class HitBody : HitHead {
+ armor = 20;
+ name = "body";
+ memoryPoint = "aimPoint";
+ };
+
+ class HitSpine : HitHead {
+ armor = 10;
+ name = "Spine2";
+ memoryPoint = "aimPoint";
+ };
+
+ class HitHands : HitHead {
+ armor = 10;
+ material = -1;
+ name = "hands";
+ passThrough = true;
+ };
+
+ class HitLArm : HitHands {
+ name = "LeftArm";
+ memoryPoint = "lelbow";
+ };
+
+ class HitRArm : HitHands {
+ name = "RightArm";
+ memoryPoint = "relbow";
+ };
+
+ class HitLForeArm : HitHands {
+ name = "LeftForeArm";
+ memoryPoint = "lwrist";
+ };
+
+ class HitRForeArm : HitHands {
+ name = "RightForeArm";
+ memoryPoint = "rwrist";
+ };
+
+ class HitLHand : HitHands {
+ name = "LeftHand";
+ memoryPoint = "LeftHandMiddle1";
+ };
+
+ class HitRHand : HitHands {
+ name = "RightHand";
+ memoryPoint = "RightHandMiddle1";
+ };
+
+ class HitLegs : HitHands {
+ name = "legs";
+ memoryPoint = "pelvis";
+ };
+
+ class HitLLeg : HitHands {
+ name = "LeftLeg";
+ memoryPoint = "lknee";
+ };
+
+ class HitLLegUp : HitHands {
+ name = "LeftUpLeg";
+ memoryPoint = "lfemur";
+ };
+
+ class HitRLeg : HitHands {
+ name = "RightLeg";
+ memoryPoint = "rknee";
+ };
+
+ class HitRLegUp : HitHands {
+ name = "RightUpLeg";
+ memoryPoint = "rfemur";
+ };
+ };
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp b/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp
index 260344ccd..6c69823c1 100644
--- a/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp
+++ b/SQF/dayz_code/Configs/CfgWeapons/CfgWeapons.hpp
@@ -346,9 +346,10 @@ class CfgWeapons
#include "Tools\Scissors.hpp"
#include "Tools\ScrewExtractor.hpp"
#include "Tools\Wrench.hpp"
+ #include "Tools\MutantHeart.hpp"
#include "Item\ItemKeys.hpp"
#include "Item\Documents.hpp"
- #include "VehicleWeapons.hpp"
+ #include "VehicleWeapons.hpp"
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp b/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp
index 60fb27f1d..afec1910a 100644
--- a/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp
+++ b/SQF/dayz_code/Configs/CfgWeapons/Rifles/G3.hpp
@@ -1,3 +1,24 @@
+#define G3_ACOG modelOptics = "\Ca\weapons_E\SCAR\ACOG_TA31_optic_4x.p3d";\
+class OpticsModes\
+{\
+ class ACOG\
+ {\
+ opticsID = 1;\
+ useModelOptics = true;\
+ opticsFlare = true;\
+ opticsDisablePeripherialVision = true;\
+ opticsZoomMin = 0.0623;\
+ opticsZoomMax = 0.0623;\
+ opticsZoomInit = 0.0623;\
+ distanceZoomMin = 300;\
+ distanceZoomMax = 300;\
+ memoryPointCamera = "opticView";\
+ visionMode[] = {"Normal"};\
+ opticsPPEffects[] = {"OpticsCHAbera3","OpticsBlur3"};\
+ cameraDir = "";\
+ };\
+}
+
class G3_DZ: FNFAL_DZ
{
scope = 2;
@@ -10,30 +31,30 @@ class G3_DZ: FNFAL_DZ
fireLightDuration = 0.000;
fireLightIntensity = 0.000;
drySound[] = {"Ca\sounds\Weapons\rifles\dry",db-50,1,10};
- reloadMagazineSound[] = {"ca\sounds\weapons\rifles\reload-m16-3",db-25,1,25};
+ reloadMagazineSound[] = {"\C1987_G3\sound\G3_Reload.wss",0.056234,1,20};
distanceZoomMin = 50;
distanceZoomMax = 50;
handAnim[] = {"OFP2_ManSkeleton"};
modes[] = {Single, FullAuto};
class Single : Mode_SemiAuto
{
- begin1[] = {"rh_mgswp\sound\scarAk", db5, 1,1000};
- soundBegin[] = {begin1,1};
+ begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000};
+ soundBegin[] = {"begin1",1};
reloadTime = 0.07;
recoil = "recoil_single_primary_3outof10";
recoilProne = "recoil_single_primary_prone_3outof10";
dispersion = 0.003;
minRange = 2;
minRangeProbab = 0.25;
- midRange = 20;
+ midRange = 200;
midRangeProbab = 0.7;
- maxRange = 50;
+ maxRange = 500;
maxRangeProbab = 0.05;
};
class FullAuto : Mode_FullAuto
{
- begin1[] = {"rh_mgswp\sound\scarAk", db5, 1,1000};
- soundBegin[] = {begin1,1};
+ begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000};
+ soundBegin[] = {"begin1",1};
soundContinuous = 0;
reloadTime = 0.1;
ffCount = 1;
@@ -43,10 +64,142 @@ class G3_DZ: FNFAL_DZ
dispersion = 0.003; //0.007;
minRange = 0;
minRangeProbab = 0.20;
- midRange = 7;
+ midRange = 150;
midRangeProbab = 0.7;
- maxRange = 15;
+ maxRange = 400;
maxRangeProbab = 0.05;
};
class Attachments {};
-};
\ No newline at end of file
+};
+
+class G3A3_DZ: G3_DZ
+{
+ displayName = $STR_DZ_WPN_G3A3_NAME;
+ model = "\C1987_G3\g3.p3d";
+ picture = "\C1987_G3\equip\g3.paa";
+
+ class Attachments
+ {
+ Attachment_CCO = "G3A3_CCO_DZ";
+ Attachment_Holo = "G3A3_HOLO_DZ";
+ Attachment_ACOG = "G3A3_ACOG_DZ";
+ };
+};
+
+class G3A3_CCO_DZ: G3A3_DZ
+{
+ displayName = $STR_DZ_WPN_G3A3_CCO_NAME;
+ model = "\C1987_G3\g3_aimshot.p3d";
+ picture = "\C1987_G3\equip\g3_aim.paa";
+ class Attachments {};
+
+ class ItemActions
+ {
+ class RemoveCCO
+ {
+ text = $STR_DZ_ATT_CCO_RMVE;
+ script = "; ['Attachment_CCO',_id,'G3A3_DZ'] call player_removeAttachment";
+ };
+ };
+};
+
+class G3A3_Holo_DZ: G3A3_DZ
+{
+ displayName = $STR_DZ_WPN_G3A3_HOLO_NAME;
+ model = "\C1987_G3\g3_eotech.p3d";
+ picture = "\C1987_G3\equip\g3_eotech.paa";
+ class Attachments {};
+
+ class ItemActions
+ {
+ class RemoveHolo
+ {
+ text = $STR_DZ_ATT_HOLO_RMVE;
+ script = "; ['Attachment_Holo',_id,'G3A3_DZ'] call player_removeAttachment";
+ };
+ };
+};
+
+class G3A3_ACOG_DZ: G3A3_DZ
+{
+ displayName = $STR_DZ_WPN_G3A3_ACOG_NAME;
+ model = "\C1987_G3\g3_acog.p3d";
+ picture = "\C1987_G3\equip\g3_acog.paa";
+ class Attachments {};
+ G3_ACOG;
+
+ class ItemActions
+ {
+ class RemoveACOG
+ {
+ text = $STR_DZ_ATT_ACOG_RMVE;
+ script = "; ['Attachment_ACOG',_id,'G3A3_DZ'] call player_removeAttachment";
+ };
+ };
+};
+
+class G3_SG1_DZ: G3A3_DZ
+{
+ displayName = $STR_DZ_WPN_G3_SG1_NAME;
+ model = "\C1987_G3\g3sg1.p3d";
+ picture = "\C1987_G3\equip\g3sg1.paa";
+ modelOptics = "\ca\weapons\2Dscope_MilDot_10";
+ opticsPPEffects[] = {"OpticsCHAbera1","OpticsBlur1"};
+ opticsZoomMin = 0.029624;
+ opticsZoomMax = 0.09222;
+ opticsZoomInit = 0.09222;
+ distanceZoomMin = 329;
+ distanceZoomMax = 329;
+ optics = 1;
+ class Single : Mode_SemiAuto
+ {
+ begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000};
+ soundBegin[] = {"begin1",1};
+ reloadTime = 0.07;
+ recoil = "recoil_single_primary_3outof10";
+ recoilProne = "recoil_single_primary_prone_3outof10";
+ dispersion = 0.003;
+ minRange = 2;
+ minRangeProbab = 0.25;
+ midRange = 400;
+ midRangeProbab = 0.7;
+ maxRange = 800;
+ maxRangeProbab = 0.05;
+ };
+ class FullAuto : Mode_FullAuto
+ {
+ begin1[] = {"\C1987_G3\sound\G3.wss",1.778279,1,1000};
+ soundBegin[] = {"begin1",1};
+ soundContinuous = 0;
+ reloadTime = 0.1;
+ ffCount = 1;
+ recoil = "recoil_auto_primary_3outof10";
+ recoilProne = "recoil_auto_primary_prone_3outof10";
+ aiRateOfFire = 0.001;
+ dispersion = 0.003; //0.007;
+ minRange = 0;
+ minRangeProbab = 0.20;
+ midRange = 350;
+ midRangeProbab = 0.7;
+ maxRange = 700;
+ maxRangeProbab = 0.05;
+ };
+ class Attachments {};
+};
+
+class G3_SG1_Bipod_DZ: G3_SG1_DZ
+{
+ displayName = $STR_DZ_WPN_G3_SG1_BIPOD_NAME;
+ model = "\C1987_G3\g3sg1_bipod.p3d";
+ picture = "\C1987_G3\equip\g3sg1_bipod.paa";
+ class Single : Single
+ {
+ recoilProne = "recoil_single_primary_prone_1outof10";
+ };
+ class FullAuto : FullAuto
+ {
+ recoilProne = "recoil_auto_primary_prone_2outof10";
+ };
+};
+
+#undef G3_ACOG
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp
index 46a9fc579..ebdb10ab0 100644
--- a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp
+++ b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVD.hpp
@@ -172,6 +172,26 @@ class SVD_Gold_DZ : SVD_PSO1_DZ {
model = "\RH_aks\RH_svdg.p3d";
picture = "\RH_aks\inv\svdg.paa";
+ class OpticsModes {
+ class Scope {
+ discreteDistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
+ discreteDistanceInitIndex = 2;
+ cameraDir = "";
+ distanceZoomMax = 300;
+ distanceZoomMin = 300;
+ memoryPointCamera = "opticView";
+ opticsDisablePeripherialVision = 1;
+ opticsFlare = 1;
+ opticsID = 1;
+ opticsPPEffects[] = {"OpticsCHAbera3", "OpticsBlur3"};
+ opticsZoomInit = 0.0623;
+ opticsZoomMax = 0.0623;
+ opticsZoomMin = 0.0623;
+ useModelOptics = 1;
+ visionMode[] = {"Normal"};
+ };
+ };
+
class ItemActions {};
class Attachments {};
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp
index 955c28107..6c7fa13d0 100644
--- a/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp
+++ b/SQF/dayz_code/Configs/CfgWeapons/Rifles/SVU.hpp
@@ -8,4 +8,24 @@ class SVU_PSO1_DZ: SVD_PSO1_DZ {
magazines[] = {"10Rnd_762x54_SVD"};
class ItemActions {};
class Attachments {};
+
+ class OpticsModes {
+ class Scope {
+ discreteDistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
+ discreteDistanceInitIndex = 2;
+ cameraDir = "";
+ distanceZoomMax = 300;
+ distanceZoomMin = 300;
+ memoryPointCamera = "opticView";
+ opticsDisablePeripherialVision = 1;
+ opticsFlare = 1;
+ opticsID = 1;
+ opticsPPEffects[] = {"OpticsCHAbera3", "OpticsBlur3"};
+ opticsZoomInit = 0.0623;
+ opticsZoomMax = 0.0623;
+ opticsZoomMin = 0.0623;
+ useModelOptics = 1;
+ visionMode[] = {"Normal"};
+ };
+ };
};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp b/SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp
new file mode 100644
index 000000000..a44f9453f
--- /dev/null
+++ b/SQF/dayz_code/Configs/CfgWeapons/Tools/MutantHeart.hpp
@@ -0,0 +1,7 @@
+class ItemMutantHeart: ItemCore
+{
+ scope = 2;
+ displayName = $STR_MUTANT_HEART;
+ picture = "\nst\ns_mutants\blood\heart_icon_ca.paa";
+ descriptionShort = $STR_MUTANT_HEART_DESC;
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp b/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp
index 6bc4b4bdb..3892cb186 100644
--- a/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp
+++ b/SQF/dayz_code/Configs/RscDisplay/RscPlayerUI.hpp
@@ -931,4 +931,24 @@ class RscTitles
};
};
};
+ class mutant_attack
+ {
+ idd=-1;
+ movingEnable=0;
+ duration=1;
+ fadein=0;
+ name="Skrabanec";
+ controls[]=
+ {
+ "skrabanec"
+ };
+ class skrabanec: RscPicture
+ {
+ x=0;
+ y=0;
+ w=1;
+ h=1;
+ text="\nst\textures\skrabanec.paa";
+ };
+ };
};
diff --git a/SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp b/SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp
new file mode 100644
index 000000000..4a73600fe
--- /dev/null
+++ b/SQF/dayz_code/Configs/RscDisplay/remoteVehicle.hpp
@@ -0,0 +1,304 @@
+class rv_RscText {
+ idc = -1;
+ x = 0;
+ y = 0;
+ h = 0.037;
+ w = 0.3;
+ type = 0;
+ style = 0;
+ shadow = 2;
+ colorShadow[] = {0, 0, 0, 0.5};
+ font = "Zeppelin32";
+ SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ colorText[] = {1, 1, 1, 1.0};
+ colorBackground[] = {0, 0, 0, 0};
+ linespacing = 1;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+};
+
+class rv_RscTitle : rv_RscText {
+ idc = -1;
+ style = 0;
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {0.95, 0.95, 0.95, 1};
+};
+
+class rv_RscShortcutButton {
+ idc = -1;
+ style = 0;
+ default = 0;
+ shadow = 2;
+ w = 0.183825;
+ h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ color[] = {1,1,1,1.0};
+ colorFocused[] = {1,1,1,1.0};
+ color2[] = {0.95,0.95,0.95,1};
+ colorDisabled[] = {1,1,1,0.25};
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackground2[] = {1,1,1,1};
+ animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureOver = "gza\scripts\gold\gui\over_ca.paa";
+ animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa";
+ animTexturePressed = "gza\scripts\gold\gui\down_ca.paa";
+ periodFocus = 1.2;
+ periodOver = 0.8;
+ class HitZone {
+ left = 0.0;
+ top = 0.0;
+ right = 0.0;
+ bottom = 0.0;
+ };
+ class ShortcutPos {
+ left = 0;
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ };
+ class TextPos {
+ left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ period = 0.4;
+ font = "Zeppelin32";
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ action = "";
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "left";
+ shadow = 1;
+ };
+ class AttributesImage {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "left";
+ };
+ soundPush[] = { "", 0, 1 };
+ soundEnter[] ={ "", 0, 1 };
+ soundClick[] ={ "", 0, 1 };
+ soundEscape[] ={ "", 0, 1 };
+ sound[] ={ "", 0, 1 };
+};
+
+class rv_RscButtonMenu : rv_RscShortcutButton {
+ idc = -1;
+ type = 16;
+ style = "0x02 + 0xC0";
+ default = 0;
+ shadow = 0;
+ x = 0;
+ y = 0;
+ w = 0.095589;
+ h = 0.039216;
+ animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
+ animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
+ colorBackground[] = {0,0,0,0.8};
+ colorBackgroundFocused[] = {1,1,1,1};
+ colorBackground2[] = {0.75,0.75,0.75,1};
+ color[] = {1,1,1,1};
+ colorFocused[] = {0,0,0,1};
+ color2[] = {0,0,0,1};
+ colorText[] = {1,1,1,1};
+ colorDisabled[] = {1,1,1,0.25};
+ period = 1.2;
+ periodFocus = 1.2;
+ periodOver = 1.2;
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class TextPos {
+ left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)";
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "center";
+ shadow = 0;
+ };
+ class ShortcutPos {
+ left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005";
+ top = 0.005;
+ w = 0.0225;
+ h = 0.03;
+ };
+ textureNoShortcut = "";
+};
+
+class rv_RscListBox {
+ style = 16;
+ idc = -1;
+ type = 5;
+ w = 0.275;
+ h = 0.04;
+ font = "Zeppelin32";
+ colorSelect[] = {0.11,0.686,0.831,1};
+ colorText[] = {1, 1, 1, 1};
+ colorBackground[] = {0.28,0.28,0.28,0.28};
+ colorSelect2[] = {1, 1, 1, 1};
+ colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5};
+ colorSelectBackground2[] = {1, 1, 1, 0.5};
+ colorScrollbar[] = {0.2, 0.2, 0.2, 1};
+ arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa";
+ arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa";
+ wholeHeight = 0.45;
+ rowHeight = 0.04;
+ color[] = {0.7, 0.7, 0.7, 1};
+ colorActive[] = {0,0,0,1};
+ colorDisabled[] = {0,0,0,0.3};
+ sizeEx = 0.023;
+ maxHistoryDelay = 1;
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class ScrollBar {
+ color[] = {1, 1, 1, 0.6};
+ colorActive[] = {1, 1, 1, 1};
+ colorDisabled[] = {1, 1, 1, 0.3};
+ thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa";
+ arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa";
+ arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa";
+ border = "\ca\ui\data\igui_border_scroll_ca.paa";
+ };
+ soundPush[] = { "", 0, 1 };
+ soundEnter[] ={ "", 0, 1 };
+ soundClick[] ={ "", 0, 1 };
+ soundEscape[] ={ "", 0, 1 };
+ sound[] ={ "", 0, 1 };
+ soundSelect[] = { "", 0, 1 };
+};
+
+class rv_RscStructuredText {
+ type = 13;
+ style = 0;
+ x = 0;
+ y = 0;
+ h = 0.035;
+ w = 0.1;
+ text = "";
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {1, 1, 1, 1.0};
+ shadow = 1;
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#ffffff";
+ align = "left";
+ shadow = 1;
+ };
+};
+
+class remoteVehicle {
+ idd = 8800;
+ name="remoteVehicle";
+ onLoad = "uiNamespace setVariable ['rv_dialog', _this select 0]";
+ movingEnabled = 0;
+ enableSimulation = 1;
+
+ class controlsBackground {
+ class rv_RscTitleBackground : rv_RscText {
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ idc = -1;
+ x = 0.1;
+ y = 0.2;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class MainBackground : rv_RscText {
+ colorBackground[] = {0,0,0,0.7};
+ idc = -1;
+ x = 0.1;
+ y = 0.2 + (11 / 250);
+ w = 0.8;
+ h = 0.7 - (22 / 250);
+ };
+
+ class VehicleInfoHeader : rv_RscText {
+ idc = 8830;
+ text = $STR_CL_RV_VEHICLE_INFO;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ x = 0.47; y = 0.26;
+ w = 0.42;
+ h = (1 / 25);
+ };
+
+ class CloseBtn : rv_RscButtonMenu {
+ idc = -1;
+ text = $STR_UI_CLOSE;
+ onButtonClick = "closeDialog 2;";
+ x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 40);
+ h = (1 / 25);
+ };
+ };
+
+ class controls {
+ class Title : rv_RscTitle {
+ idc = 8801;
+ text = "";
+ x = 0.1;
+ y = 0.2;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class VehicleList : rv_RscListBox {
+ idc = 8802;
+ text = "";
+ sizeEx = 0.04;
+ colorBackground[] = {0.1,0.1,0.1,0.9};
+ onLBSelChanged = "[_this] call rv_vehicleInfo;";
+ x = 0.11; y = 0.302;
+ w = 0.35; h = 0.49;
+ };
+
+ class VehicleTitleBox : rv_RscText {
+ idc = 8804;
+ text = $STR_CL_RV_VEHICLE_LIST;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ x = 0.11; y = 0.26;
+ w = 0.35;
+ h = (1 / 25);
+ };
+
+ class selectVehicle : rv_RscButtonMenu {
+ idc = 8850;
+ text = $STR_CL_RV_SELECT_VEHICLE;
+ onButtonClick = "rv_isOk = true;closeDialog 0;";
+ x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 20);
+ h = (1 / 25);
+ };
+
+ class vehicleInfomationList : rv_RscStructuredText {
+ idc = 8803;
+ text = "";
+ sizeEx = 0.035;
+ x = 0.47; y = 0.3;
+ w = 0.41; h = 0.5;
+ };
+ };
+};
diff --git a/SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp b/SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp
new file mode 100644
index 000000000..96e4868d5
--- /dev/null
+++ b/SQF/dayz_code/Configs/RscDisplay/vehicleKeyChanger.hpp
@@ -0,0 +1,315 @@
+class vkc_RscText {
+ idc = -1;
+ x = 0;
+ y = 0;
+ h = 0.037;
+ w = 0.3;
+ type = 0;
+ style = 0;
+ shadow = 2;
+ colorShadow[] = {0, 0, 0, 0.5};
+ font = "Zeppelin32";
+ SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ colorText[] = {1, 1, 1, 1.0};
+ colorBackground[] = {0, 0, 0, 0};
+ linespacing = 1;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+};
+
+class vkc_RscTitle : vkc_RscText {
+ idc = -1;
+ style = 0;
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {0.95, 0.95, 0.95, 1};
+};
+
+class vkc_RscShortcutButton {
+ idc = -1;
+ style = 0;
+ default = 0;
+ shadow = 2;
+ w = 0.183825;
+ h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ color[] = {1,1,1,1.0};
+ colorFocused[] = {1,1,1,1.0};
+ color2[] = {0.95,0.95,0.95,1};
+ colorDisabled[] = {1,1,1,0.25};
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackground2[] = {1,1,1,1};
+ animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureOver = "gza\scripts\gold\gui\over_ca.paa";
+ animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa";
+ animTexturePressed = "gza\scripts\gold\gui\down_ca.paa";
+ periodFocus = 1.2;
+ periodOver = 0.8;
+ class HitZone {
+ left = 0.0;
+ top = 0.0;
+ right = 0.0;
+ bottom = 0.0;
+ };
+ class ShortcutPos {
+ left = 0;
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ };
+ class TextPos {
+ left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ period = 0.4;
+ font = "Zeppelin32";
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ action = "";
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "left";
+ shadow = 1;
+ };
+ class AttributesImage {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "left";
+ };
+ soundPush[] = { "", 0, 1 };
+ soundEnter[] ={ "", 0, 1 };
+ soundClick[] ={ "", 0, 1 };
+ soundEscape[] ={ "", 0, 1 };
+ sound[] ={ "", 0, 1 };
+};
+
+class vkc_RscButtonMenu : vkc_RscShortcutButton {
+ idc = -1;
+ type = 16;
+ style = "0x02 + 0xC0";
+ default = 0;
+ shadow = 0;
+ x = 0;
+ y = 0;
+ w = 0.095589;
+ h = 0.039216;
+ animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
+ animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
+ colorBackground[] = {0,0,0,0.8};
+ colorBackgroundFocused[] = {1,1,1,1};
+ colorBackground2[] = {0.75,0.75,0.75,1};
+ color[] = {1,1,1,1};
+ colorFocused[] = {0,0,0,1};
+ color2[] = {0,0,0,1};
+ colorText[] = {1,1,1,1};
+ colorDisabled[] = {1,1,1,0.25};
+ period = 1.2;
+ periodFocus = 1.2;
+ periodOver = 1.2;
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class TextPos {
+ left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)";
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "center";
+ shadow = 0;
+ };
+ class ShortcutPos {
+ left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005";
+ top = 0.005;
+ w = 0.0225;
+ h = 0.03;
+ };
+ textureNoShortcut = "";
+};
+
+class vkc_RscListBox {
+ style = 16;
+ idc = -1;
+ type = 5;
+ w = 0.275;
+ h = 0.04;
+ font = "Zeppelin32";
+ colorSelect[] = {0.11,0.686,0.831,1};
+ colorText[] = {1, 1, 1, 1};
+ colorBackground[] = {0.28,0.28,0.28,0.28};
+ colorSelect2[] = {1, 1, 1, 1};
+ colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5};
+ colorSelectBackground2[] = {1, 1, 1, 0.5};
+ colorScrollbar[] = {0.2, 0.2, 0.2, 1};
+ arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa";
+ arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa";
+ wholeHeight = 0.45;
+ rowHeight = 0.04;
+ color[] = {0.7, 0.7, 0.7, 1};
+ colorActive[] = {0,0,0,1};
+ colorDisabled[] = {0,0,0,0.3};
+ sizeEx = 0.023;
+ maxHistoryDelay = 1;
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class ScrollBar {
+ color[] = {1, 1, 1, 0.6};
+ colorActive[] = {1, 1, 1, 1};
+ colorDisabled[] = {1, 1, 1, 0.3};
+ thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa";
+ arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa";
+ arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa";
+ border = "\ca\ui\data\igui_border_scroll_ca.paa";
+ };
+ soundPush[] = { "", 0, 1 };
+ soundEnter[] ={ "", 0, 1 };
+ soundClick[] ={ "", 0, 1 };
+ soundEscape[] ={ "", 0, 1 };
+ sound[] ={ "", 0, 1 };
+ soundSelect[] = { "", 0, 1 };
+};
+
+class vkc_RscStructuredText {
+ type = 13;
+ style = 0;
+ x = 0;
+ y = 0;
+ h = 0.035;
+ w = 0.1;
+ text = "";
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {1, 1, 1, 1.0};
+ shadow = 1;
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#ffffff";
+ align = "left";
+ shadow = 1;
+ };
+};
+
+class vkc {
+ idd = 4800;
+ name="vkc";
+ onload = "player setVariable['isBusy',true,true];";
+ onUnload = "player setVariable['isBusy',false,true];";
+ movingEnabled = 0;
+ enableSimulation = 1;
+
+ class controlsBackground {
+ class vkc_RscTitleBackground : vkc_RscText {
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ idc = -1;
+ x = 0.1;
+ y = 0.2;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class MainBackground : vkc_RscText {
+ colorBackground[] = {0,0,0,0.7};
+ idc = -1;
+ x = 0.1;
+ y = 0.2 + (11 / 250);
+ w = 0.8;
+ h = 0.7 - (22 / 250);
+ };
+
+ class Title : vkc_RscTitle {
+ idc = 4801;
+ text = $STR_CL_VKC_TITLE;
+ x = 0.1;
+ y = 0.2;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class VehicleInfoHeader : vkc_RscText {
+ idc = 4830;
+ text = $STR_CL_VKC_INFO;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ x = 0.47; y = 0.26;
+ w = 0.42;
+ h = (1 / 25);
+ };
+
+ class CloseBtn : vkc_RscButtonMenu {
+ idc = -1;
+ text = $STR_UI_CLOSE;
+ onButtonClick = "closeDialog 2;";
+ x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 40);
+ h = (1 / 25);
+ };
+ };
+
+ class controls {
+ class VehicleList : vkc_RscListBox {
+ idc = 4802;
+ text = "";
+ sizeEx = 0.04;
+ colorBackground[] = {0.1,0.1,0.1,0.9};
+ onLBSelChanged = "vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);";
+ x = 0.11; y = 0.302;
+ w = 0.35; h = 0.49;
+ };
+
+ class VehicleTitleBox : vkc_RscText {
+ idc = 4804;
+ text = $STR_CL_VKC_KEYS;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ x = 0.11; y = 0.26;
+ w = 0.35;
+ h = (1 / 25);
+ };
+
+ class claimVehicle : vkc_RscButtonMenu {
+ idc = 4850;
+ text = $STR_CL_VKC_CLAIM;
+ onButtonClick = "vkc_isOk = true;closeDialog 0;";
+ x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 20);
+ h = (1 / 25);
+ };
+
+ class changeKey : vkc_RscButtonMenu {
+ idc = 4851;
+ text = $STR_CL_VKC_CHANGE;
+ onButtonClick = "vkc_isOk = true;closeDialog 0;";
+ x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 20);
+ h = (1 / 25);
+ };
+
+ class vehicleInfomationList : vkc_RscStructuredText {
+ idc = 4803;
+ text = "";
+ sizeEx = 0.035;
+ x = 0.47; y = 0.3;
+ w = 0.41; h = 0.5;
+ };
+ };
+};
diff --git a/SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp b/SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp
new file mode 100644
index 000000000..975259ed8
--- /dev/null
+++ b/SQF/dayz_code/Configs/RscDisplay/virtualGarage.hpp
@@ -0,0 +1,367 @@
+// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/)
+// Rewritten by salival (https://github.com/oiad)
+
+class vg_RscText {
+ idc = -1;
+ x = 0;
+ y = 0;
+ h = 0.037;
+ w = 0.3;
+ type = 0;
+ style = 0;
+ shadow = 2;
+ colorShadow[] = {0, 0, 0, 0.5};
+ font = "Zeppelin32";
+ SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ colorText[] = {1, 1, 1, 1.0};
+ colorBackground[] = {0, 0, 0, 0};
+ linespacing = 1;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+};
+
+class vg_RscTitle : vg_RscText {
+ idc = -1;
+ style = 0;
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {0.95, 0.95, 0.95, 1};
+};
+
+class vg_RscShortcutButton {
+ idc = -1;
+ style = 0;
+ default = 0;
+ shadow = 2;
+ w = 0.183825;
+ h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)";
+ color[] = {1,1,1,1.0};
+ colorFocused[] = {1,1,1,1.0};
+ color2[] = {0.95,0.95,0.95,1};
+ colorDisabled[] = {1,1,1,0.25};
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackgroundFocused[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])",1};
+ colorBackground2[] = {1,1,1,1};
+ animTextureDefault = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureNormal = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureDisabled = "gza\scripts\gold\gui\normal_ca.paa";
+ animTextureOver = "gza\scripts\gold\gui\over_ca.paa";
+ animTextureFocused = "gza\scripts\gold\gui\focus_ca.paa";
+ animTexturePressed = "gza\scripts\gold\gui\down_ca.paa";
+ periodFocus = 1.2;
+ periodOver = 0.8;
+ class HitZone {
+ left = 0.0;
+ top = 0.0;
+ right = 0.0;
+ bottom = 0.0;
+ };
+ class ShortcutPos {
+ left = 0;
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ };
+ class TextPos {
+ left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)";
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ period = 0.4;
+ font = "Zeppelin32";
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ text = "";
+ action = "";
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "left";
+ shadow = 1;
+ };
+ class AttributesImage {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "left";
+ };
+ soundPush[] = { "", 0, 1 };
+ soundEnter[] ={ "", 0, 1 };
+ soundClick[] ={ "", 0, 1 };
+ soundEscape[] ={ "", 0, 1 };
+ sound[] ={ "", 0, 1 };
+};
+
+class vg_RscButtonMenu : vg_RscShortcutButton {
+ idc = -1;
+ type = 16;
+ style = "0x02 + 0xC0";
+ default = 0;
+ shadow = 0;
+ x = 0;
+ y = 0;
+ w = 0.095589;
+ h = 0.039216;
+ animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
+ animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
+ animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
+ colorBackground[] = {0,0,0,0.8};
+ colorBackgroundFocused[] = {1,1,1,1};
+ colorBackground2[] = {0.75,0.75,0.75,1};
+ color[] = {1,1,1,1};
+ colorFocused[] = {0,0,0,1};
+ color2[] = {0,0,0,1};
+ colorText[] = {1,1,1,1};
+ colorDisabled[] = {1,1,1,0.25};
+ period = 1.2;
+ periodFocus = 1.2;
+ periodOver = 1.2;
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class TextPos {
+ left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)";
+ top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2";
+ right = 0.005;
+ bottom = 0.0;
+ };
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#E5E5E5";
+ align = "center";
+ shadow = 0;
+ };
+ class ShortcutPos {
+ left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005";
+ top = 0.005;
+ w = 0.0225;
+ h = 0.03;
+ };
+ textureNoShortcut = "";
+};
+
+class vg_RscListBox {
+ style = 16;
+ idc = -1;
+ type = 5;
+ w = 0.275;
+ h = 0.04;
+ font = "Zeppelin32";
+ colorSelect[] = {0.11,0.686,0.831,1};
+ colorText[] = {1, 1, 1, 1};
+ colorBackground[] = {0.28,0.28,0.28,0.28};
+ colorSelect2[] = {1, 1, 1, 1};
+ colorSelectBackground[] = {0.95, 0.95, 0.95, 0.5};
+ colorSelectBackground2[] = {1, 1, 1, 0.5};
+ colorScrollbar[] = {0.2, 0.2, 0.2, 1};
+ arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa";
+ arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa";
+ wholeHeight = 0.45;
+ rowHeight = 0.04;
+ color[] = {0.7, 0.7, 0.7, 1};
+ colorActive[] = {0,0,0,1};
+ colorDisabled[] = {0,0,0,0.3};
+ sizeEx = 0.023;
+ maxHistoryDelay = 1;
+ autoScrollSpeed = -1;
+ autoScrollDelay = 5;
+ autoScrollRewind = 0;
+ tooltipColorText[] = {1,1,1,1};
+ tooltipColorBox[] = {1,1,1,1};
+ tooltipColorShade[] = {0,0,0,0.65};
+ class ScrollBar {
+ color[] = {1, 1, 1, 0.6};
+ colorActive[] = {1, 1, 1, 1};
+ colorDisabled[] = {1, 1, 1, 0.3};
+ thumb = "\ca\ui\data\igui_scrollbar_thumb_ca.paa";
+ arrowFull = "\ca\ui\data\igui_arrow_top_active_ca.paa";
+ arrowEmpty = "\ca\ui\data\igui_arrow_top_ca.paa";
+ border = "\ca\ui\data\igui_border_scroll_ca.paa";
+ };
+ soundPush[] = { "", 0, 1 };
+ soundEnter[] ={ "", 0, 1 };
+ soundClick[] ={ "", 0, 1 };
+ soundEscape[] ={ "", 0, 1 };
+ sound[] ={ "", 0, 1 };
+ soundSelect[] = { "", 0, 1 };
+};
+
+class vg_RscStructuredText {
+ type = 13;
+ style = 0;
+ x = 0;
+ y = 0;
+ h = 0.035;
+ w = 0.1;
+ text = "";
+ size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
+ colorText[] = {1, 1, 1, 1.0};
+ shadow = 1;
+ class Attributes {
+ font = "Zeppelin32";
+ color = "#ffffff";
+ align = "left";
+ shadow = 1;
+ };
+};
+
+class virtualGarage {
+ idd = 2800;
+ name="virtualGarage";
+ onload = "player setVariable['isBusy',true,true]; [] spawn vg_maintainSetText;";
+ onUnload = "player setVariable['isBusy',false,true];dayz_actionInProgress = false;";
+ movingEnabled = 0;
+ enableSimulation = 1;
+
+ class controlsBackground {
+ class vg_RscTitleBackground : vg_RscText {
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ idc = -1;
+ x = 0.1;
+ y = 0.2;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class MainBackground : vg_RscText {
+ colorBackground[] = {0,0,0,0.7};
+ idc = -1;
+ x = 0.1;
+ y = 0.2 + (11 / 250);
+ w = 0.8;
+ h = 0.7 - (22 / 250);
+ };
+
+ class Title : vg_RscTitle {
+ idc = 2801;
+ text = $STR_CL_VG_VIRTUAL_GARAGE;
+ x = 0.1;
+ y = 0.2;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class VehicleInfoHeader : vg_RscText {
+ idc = 2830;
+ text = $STR_CL_VG_VEHICLE_INFO;
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ x = 0.47; y = 0.26;
+ w = 0.42;
+ h = (1 / 25);
+ };
+
+ class CloseBtn : vg_RscButtonMenu {
+ idc = -1;
+ text = $STR_UI_CLOSE;
+ onButtonClick = "closeDialog 2;";
+ x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 40);
+ h = (1 / 25);
+ };
+ };
+
+ class controls {
+ class VehicleList : vg_RscListBox {
+ idc = 2802;
+ text = "";
+ sizeEx = 0.04;
+ colorBackground[] = {0.1,0.1,0.1,0.9};
+ onLBSelChanged = "[_this] call vehicleInfo;";
+ x = 0.11; y = 0.302;
+ w = 0.35; h = 0.49;
+ };
+
+ class VehicleTitleBox : vg_RscText {
+ idc = 2804;
+ text = "";
+ colorBackground[] = {"(profilenamespace getvariable ['GUI_BCG_RGB_R',0.3843])", "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.7019])", "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.8862])", "(profilenamespace getvariable ['GUI_BCG_RGB_A',0.7])"};
+ x = 0.11; y = 0.26;
+ w = 0.35;
+ h = (1 / 25);
+ };
+
+ class storeVehicle : vg_RscButtonMenu {
+ idc = 2850;
+ text = $STR_CL_VG_STORE_VEHICLE;
+ onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[true] spawn player_storeVehicle;};";
+ x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 36);
+ h = (1 / 25);
+ };
+
+ class storeVehicleGear : vg_RscButtonMenu {
+ idc = 2851;
+ text = $STR_CL_VG_STORE_VEHICLE_GEAR;
+ onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[false] spawn player_storeVehicle;};";
+ x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 15.85);
+ h = (1 / 25);
+ };
+
+ class getVehicle : vg_RscButtonMenu {
+ idc = 2852;
+ text = $STR_CL_VG_GET_VEHICLE;
+ onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[] spawn player_getVehicle;};";
+ x = 0.1 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = (6.25 / 20);
+ h = (1 / 25);
+ };
+
+ class removePad : vg_RscButtonMenu {
+ idc = 2853;
+ text = $STR_CL_VG_REMOVE_PAD;
+ onButtonClick = "call player_removePad;";
+ x = 0.5 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.9 - (1 / 25);
+ w = 0.241;
+ h = (1 / 25);
+ };
+
+ class MaintainGarage : vg_RscButtonMenu {
+ idc = 2854;
+ text = $STR_CL_VG_MAINTAIN_GARAGE;
+ onButtonClick = "if (!vg_hasRun) then {vg_hasRun = true;[] spawn Player_MaintainVG;};";
+ x = -0.06 + (6.25 / 40) + (1 / 250 / (safezoneW / safezoneH));
+ y = 0.903;
+ w = 0.8;
+ h = (1 / 25);
+ };
+
+ class vehicleInfomationList : vg_RscStructuredText {
+ idc = 2803;
+ text = "";
+ sizeEx = 0.035;
+ x = 0.47; y = 0.3;
+ w = 0.41; h = 0.5;
+ };
+
+ class MainBackgroundHider : vg_RscText {
+ colorBackground[] = {0,0,0,1};
+ idc = 2810;
+ x = 0.1;
+ y = 0.2 + (11 / 250);
+ w = 0.8;
+ h = 0.7 - (22 / 250);
+ };
+
+ class MainHideText : vg_RscText {
+ idc = 2811;
+ text = $STR_CL_VG_SEARCH_VEHICLES;
+ sizeEx = 0.06;
+ x = 0.10;
+ y = 0.5;
+ w = 0.8;
+ h = (1 / 15);
+ };
+ };
+};
diff --git a/SQF/dayz_code/Configs/cfgMoves.hpp b/SQF/dayz_code/Configs/cfgMoves.hpp
index 0050a9752..84cd12e66 100644
--- a/SQF/dayz_code/Configs/cfgMoves.hpp
+++ b/SQF/dayz_code/Configs/cfgMoves.hpp
@@ -661,4 +661,2058 @@ class CfgGesturesDogDZ
transitionsInterpolated[] = {};
transitionsSimple[] = {};
transitionsDisabled[] = {};
+};
+
+class CfgMovesBloodsucker: CfgMovesMaleSdr
+{
+ skeletonName="OFP2_ManSkeleton";
+ gestures="CfgGesturesMale";
+ class StandBase;
+ class StatesExt
+ {
+ class AmovPercMstpSnonWnonDnon: StandBase
+ {
+ actions="CivilStandActions";
+ duty=-1;
+ equivalentTo="";
+ preload=0;
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ showWeaponAim=0;
+ disableWeapons=1;
+ canPullTrigger=0;
+ speed=1e+010;
+ relSpeedMin=0.69999999;
+ relSpeedMax=1.1;
+ leaningFactorBeg=0;
+ leaningFactorEnd=0;
+ looped=1;
+ soundEnabled=0;
+ soundOverride="";
+ soundEdge[]={0.5,1};
+ enableBinocular=1;
+ leftHandIKBeg=0;
+ leftHandIKCurve[]={};
+ leftHandIKEnd=0;
+ rightHandIKBeg=0;
+ rightHandIKCurve[]={};
+ rightHandIKEnd=0;
+ hasCollShapeSafe=0;
+ collisionShapeSafe="";
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl.p3d";
+ headBobStrength=0.21393;
+ limitGunMovement=0.1;
+ enableOptics=-1;
+ ConnectTo[]=
+ {
+ "ActsPercMstpSnonWpstDnon_suicide1A",
+ 0.02,
+ "ActsPercMstpSnonWpstDnon_suicide2A",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_sekaniIn",
+ 0.02,
+ "AidlPercMstpSnonWnonDnon",
+ 0.0099999998,
+ "AidlPercMstpSnonWnonDnon_player",
+ 0.0099999998,
+ "AovrPercMstpSnonWnonDf",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_turnL",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_turnR",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AmovPknlMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AmovPercMstpSrasWrflDnon",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AmovPercMstpSrasWpstDnon",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AmovPknlMstpSrasWlnrDnon",
+ 0.029999999,
+ "AmovPercMstpSnonWnonDnon_AwopPercMstpSoptWbinDnon",
+ 0.02,
+ "ActsPercMstpSnonWnonDnon_varStayLeant",
+ 2,
+ "ActsPercMstpSnonWrflDnon_Interrogate01",
+ 2,
+ "ActsPercMstpSnonWrflDnon_Interrogate02",
+ 2,
+ "ActsPsitMstpSnonWnonDnon_InterrogateLeaves",
+ 2,
+ "AmovPercMstpSnonWnonDnon_Scared",
+ 2,
+ "AmovPercMstpSnonWnonDnon_Scared2",
+ 2,
+ "AmovPercMstpSnonWnonDnon_carCheckPush",
+ 2,
+ "AmovPercMstpSnonWnonDnon_carCheckWash",
+ 2,
+ "AmovPercMstpSnonWnonDnon_carCheckWheel",
+ 2,
+ "AmovPercMstpSnonWnonDnon_exerciseKata",
+ 2,
+ "ActsPercMstpSnonWnonDnon_DancingDuoIvan",
+ 2,
+ "ActsPercMstpSnonWnonDnon_DancingDuoStefan",
+ 2,
+ "ActsPercMstpSnonWnonDnon_DancingStefan",
+ 2,
+ "AmovPercMstpSnonWnonDnon_exercisekneeBendA",
+ 2,
+ "AmovPercMstpSnonWnonDnon_exercisekneeBendB",
+ 2,
+ "AmovPercMstpSnonWnonDnon_exercisePushup",
+ 2,
+ "AmovPercMstpSnonWnonDnon_seeWatch",
+ 2,
+ "AmovPercMstpSnonWnonDnon_talking",
+ 2,
+ "ActsPercMstpSnonWpstDnon_sceneBardak01",
+ 0.1,
+ "AmovPercMstpSnonWnonDnon_normalizationTest",
+ 0.1,
+ "AmovPercMstpSnonWnonDnon_SaluteIn",
+ 0.1,
+ "AmovPercMstpSnonWnonDnon_EaseIn",
+ 0.1,
+ "AmovPercMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground",
+ 0.1,
+ "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon",
+ 0.1,
+ "AwopPercMstpSgthWnonDnon_start",
+ 0.1,
+ "LadderCivilOn",
+ 1,
+ "AswmPercMstpSnonWnonDnon",
+ 0.30000001,
+ "ActsPknlMstpWunaSnonDnon_sceneCrashSite_Villager",
+ 0.1,
+ "AmovPercMstpSnonWnonDnon_AinvPknlMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInLow",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInMedium",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AcrgPknlMstpSnonWnonDnon_getInHigh",
+ 0.02,
+ "amovpercmstpsnonwnondnon_amovpercmstpsraswlnrdnon",
+ 0.02,
+ "ActsPercSnonWnonDnon_assembling",
+ 0.0099999998,
+ "ActsPercSnonWnonDnon_carFixing",
+ 0.0099999998,
+ "ActsPercSnonWnonDnon_carFixing2",
+ 0.0099999998,
+ "ActsPercSnonWnonDnon_tableSupport_TalkIn",
+ 0.0099999998,
+ "ActsPercMstpSrasWunaDnon_sceneLopotevBandCaptured_Kostey",
+ 0.0099999998,
+ "AidlPpneMstpSnonWnonDnon_SleepA_layDown",
+ 0.0099999998,
+ "AidlPpneMstpSnonWnonDnon_SleepB_layDown",
+ 0.0099999998,
+ "AidlPpneMstpSnonWnonDnon_SleepC_layDown",
+ 0.0099999998,
+ "ActsPercMstpSnonWunaDnon_sceneNikitinDisloyalty_Nikitin",
+ 0.0099999998,
+ "ActsPercMstpSnonWunaDnon_sceneNikitinDisloyalty_Bardak",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Homeless",
+ 0.0099999998,
+ "ActsPercMstpSnonWunaDnon_sceneNikitinDisloyalty_Lopotev1",
+ 0.0099999998,
+ "ErcUnarm_sitUnarm_L",
+ 0.0099999998,
+ "ErcUnarm_sitUnarm_R",
+ 0.0099999998,
+ "sitTableRfl_listening_onTTractor",
+ 0.0099999998,
+ "sitUnarm_L_idleLoop_onFoiledPallets",
+ 0.0099999998,
+ "sitUnarm_L_idleLoop_onFoiledPallets2",
+ 0.0099999998,
+ "ErcUnarm_sitTable",
+ 0.0099999998,
+ "sitTableUnarm_talkingListening_TowingTractor",
+ 0.0099999998,
+ "UnaErc_UnaErcPoslechVelitele",
+ 0.0099999998,
+ "Csdr_LHD_oprenOzabradli118cm_A",
+ 0.0099999998,
+ "UnaErcVelitelProslov1",
+ 0.0099999998,
+ "FPS_shift",
+ 0.0099999998,
+ "ctsLopoHover_cdf2",
+ 0.0099999998,
+ "ctsLopoHover_lopotev",
+ 0.0099999998,
+ "sitUnarm_L_idleLoop_inUH1Y",
+ 0.0099999998,
+ "AmelPercMstpSnonWnonDnon_amaterUder1",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_amaterUder2",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_amaterUder3",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah1",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah2",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah3hard",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah4",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah5hard",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah6hlava",
+ 0.02,
+ "AmelPercMstpSnonWnonDnon_zasah7bricho",
+ 0.02,
+ "NavigationDriverReverse",
+ 0.0099999998,
+ "RepairingKneel",
+ 0.0099999998,
+ "RepairingErc",
+ 0.0099999998,
+ "NavigationHeli",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_initLoop",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_idle70chozeniPoRukou",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_idle68boxing",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_zevl",
+ 0.0099999998
+ };
+ InterpolateTo[]=
+ {
+ "AinvPknlMstpSnonWnonDnon_AinvPknlMstpSnonWnonDnon_medic",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_turnL",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_turnR",
+ 0.02,
+ "AmovPercMwlkSnonWnonDf",
+ 0.02,
+ "AmovPercMwlkSnonWnonDfl",
+ 0.02,
+ "AmovPercMwlkSnonWnonDl",
+ 0.02,
+ "AmovPercMwlkSnonWnonDbl",
+ 0.02,
+ "AmovPercMwlkSnonWnonDb",
+ 0.02,
+ "AmovPercMwlkSnonWnonDbr",
+ 0.02,
+ "AmovPercMwlkSnonWnonDr",
+ 0.02,
+ "AmovPercMwlkSnonWnonDfr",
+ 0.02,
+ "AmovPercMrunSnonWnonDf",
+ 0.02,
+ "AmovPercMrunSnonWnonDfl",
+ 0.02,
+ "AmovPercMrunSnonWnonDl",
+ 0.02,
+ "AmovPercMrunSnonWnonDbl",
+ 0.02,
+ "AmovPercMrunSnonWnonDb",
+ 0.02,
+ "AmovPercMrunSnonWnonDbr",
+ 0.02,
+ "AmovPercMrunSnonWnonDr",
+ 0.02,
+ "AmovPercMrunSnonWnonDfr",
+ 0.02,
+ "AmovPercMevaSnonWnonDf",
+ 0.02,
+ "AmovPercMevaSnonWnonDfl",
+ 0.02,
+ "AmovPercMevaSnonWnonDfr",
+ 0.02,
+ "AdthPercMstpSnonWnonDnon_1",
+ 0.0099999998,
+ "AdthPercMstpSnonWnonDnon_2",
+ 0.0099999998,
+ "AdthPercMstpSnonWnonDnon_3",
+ 0.0099999998,
+ "ActsPsitMstpSnonWnonDnon_varSittingDrinking",
+ 0.02,
+ "AmovPercMstpSnonWnonDnon_AcinPknlMwlkSnonWnonDb_1",
+ 0.1,
+ "ActsPercMstpSnonWnonDnon_talking01",
+ 0.1,
+ "ActsPercMstpSnonWnonDnon_talking02",
+ 0.1,
+ "ActsPercMstpSnonWnonDnon_talking03",
+ 0.1,
+ "ActsPercMstpSnonWnonDnon_talking04",
+ 0.1,
+ "AidlPercSnonWnonDnon_talkBS",
+ 0.0099999998,
+ "sitTableRfl_listening_onTTractor",
+ 0.0099999998,
+ "sitUnarm_L_idleLoop_onFoiledPallets",
+ 0.0099999998,
+ "sitUnarm_L_idleLoop_onFoiledPallets2",
+ 0.0099999998,
+ "sitUnarm_L_idleLoop_inUH1Y",
+ 0.0099999998
+ };
+ };
+ class AmovPercMrunSnonWnonDf: AmovPercMstpSnonWnonDnon
+ {
+ actions="CivilRunActionsF";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ soundEdge[]={0.25,0.5,0.75,1};
+ duty=0.40000001;
+ soundOverride="run";
+ soundEnabled=1;
+ limitGunMovement=0.1;
+ walkcycles=2;
+ disableWeapons=1;
+ ConnectTo[]=
+ {
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMwlkSnonWnonDf",
+ 0.025,
+ "AmovPercMrunSnonWnonDfl",
+ 0.025,
+ "AmovPercMrunSnonWnonDfr",
+ 0.025,
+ "AmovPknlMrunSnonWnonDf",
+ 0.029999999,
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMevaSnonWnonDf",
+ 0.02
+ };
+ };
+ class AmovPercMwlkSnonWnonDf: AmovPercMstpSnonWnonDnon
+ {
+ actions="CivilWlkActionsF";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ soundEdge[]={0.25,0.5,0.75,1};
+ speed=3.21;
+ duty=-0.1;
+ soundOverride="walk";
+ soundEnabled=1;
+ walkcycles=2;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDfl",
+ 0.025,
+ "AmovPercMwlkSnonWnonDfr",
+ 0.025,
+ "AmovPercMrunSnonWnonDf",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDf",
+ 0.029999999,
+ "AmovPercMevaSnonWnonDf",
+ 0.025,
+ "AmovPercMrunSnonWnonDf_AmovPercMstpSnonWnonDnon_gthStart",
+ 0.1
+ };
+ };
+ class AmovPercMwlkSnonWnonDfl: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsFL";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDf",
+ 0.025,
+ "AmovPercMwlkSnonWnonDl",
+ 0.025,
+ "AmovPercMrunSnonWnonDfl",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDfl",
+ 0.029999999,
+ "AmovPercMevaSnonWnonDfl",
+ 0.025,
+ "AmovPercMrunSnonWnonDf_AmovPercMstpSnonWnonDnon_gthStart",
+ 0.1
+ };
+ };
+ class AmovPercMwlkSnonWnonDl: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsL";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDfl",
+ 0.025,
+ "AmovPercMwlkSnonWnonDbl",
+ 0.025,
+ "AmovPercMrunSnonWnonDl",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDl",
+ 0.029999999
+ };
+ };
+ class AmovPercMwlkSnonWnonDbl: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsBL";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDl",
+ 0.025,
+ "AmovPercMwlkSnonWnonDb",
+ 0.025,
+ "AmovPercMrunSnonWnonDbl",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDbl",
+ 0.029999999
+ };
+ };
+ class AmovPercMwlkSnonWnonDb: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsB";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDbl",
+ 0.025,
+ "AmovPercMwlkSnonWnonDbr",
+ 0.025,
+ "AmovPercMrunSnonWnonDb",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDb",
+ 0.029999999
+ };
+ };
+ class AmovPercMwlkSnonWnonDbr: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsBR";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDb",
+ 0.025,
+ "AmovPercMwlkSnonWnonDr",
+ 0.025,
+ "AmovPercMrunSnonWnonDbr",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDbr",
+ 0.029999999
+ };
+ };
+ class AmovPercMwlkSnonWnonDr: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsR";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDbr",
+ 0.025,
+ "AmovPercMwlkSnonWnonDfr",
+ 0.15000001,
+ "AmovPercMrunSnonWnonDr",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDr",
+ 0.029999999
+ };
+ };
+ class AmovPercMwlkSnonWnonDfr: AmovPercMwlkSnonWnonDf
+ {
+ actions="CivilWlkActionsFR";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMwlkSnonWnonDnon_transition",
+ 0.015,
+ "AmovPercMwlkSnonWnonDf",
+ 0.025,
+ "AmovPercMwlkSnonWnonDr",
+ 0.15000001,
+ "AmovPercMrunSnonWnonDfr",
+ 0.025,
+ "AmovPknlMwlkSnonWnonDfr",
+ 0.029999999,
+ "AmovPercMevaSnonWnonDfr",
+ 0.025,
+ "AmovPercMrunSnonWnonDf_AmovPercMstpSnonWnonDnon_gthStart",
+ 0.1
+ };
+ };
+ class SprintBaseDf: StandBase
+ {
+ actions="RifleStandEvasiveActions";
+ preload=0;
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ soundOverride="sprint";
+ duty=0.60000002;
+ showWeaponAim=0;
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl.p3d";
+ leaningFactorBeg=0;
+ leaningFactorEnd=0;
+ limitGunMovement=0;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.1;
+ enableAutoActions=0;
+ visibleSize=1.000121;
+ soundEnabled=1;
+ aiming="aimingCivil";
+ aimingBody="aimingUpCivil";
+ headBobStrength=0.154229;
+ headBobMode=2;
+ ConnectTo[]=
+ {
+ "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon",
+ 0.02
+ };
+ };
+ class SprintBaseDfl: SprintBaseDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl_Dl.p3d";
+ ConnectTo[]={};
+ InterpolateTo[]={};
+ };
+ class SprintBaseDfr: SprintBaseDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl_Dr.p3d";
+ ConnectTo[]={};
+ InterpolateTo[]={};
+ };
+ class SprintCivilBaseDf: SprintBaseDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Wnon.p3d";
+ visibleSize=1.000121;
+ ConnectTo[]={};
+ InterpolateTo[]={};
+ };
+ class SprintCivilBaseDfl: SprintCivilBaseDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]={};
+ };
+ class SprintCivilBaseDfr: SprintCivilBaseDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ ConnectTo[]={};
+ InterpolateTo[]={};
+ };
+ class AmovPercMevaSnonWnonDf: SprintCivilBaseDf
+ {
+ actions="CivilEvasiveActions";
+ soundOverride="sprint";
+ soundEnabled=1;
+ speed=3.21;
+ canPullTrigger=0;
+ duty=0.60000002;
+ walkcycles=1;
+ ConnectTo[]=
+ {
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMwlkSnonWnonDf",
+ 0.025,
+ "AmovPercMrunSnonWnonDf",
+ 0.02,
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMevaSnonWnonDfl",
+ 0.02,
+ "AmovPercMevaSnonWnonDfr",
+ 0.02
+ };
+ };
+ class AmovPercMevaSnonWnonDfl: SprintCivilBaseDfl
+ {
+ actions="CivilEvasiveActions";
+ soundOverride="sprint";
+ soundEnabled=1;
+ canPullTrigger=0;
+ duty=0.60000002;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.1064889;
+ walkcycles=2;
+ ConnectTo[]=
+ {
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMwlkSnonWnonDfl",
+ 0.025,
+ "AmovPercMrunSnonWnonDfl",
+ 0.02,
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMevaSnonWnonDf",
+ 0.02,
+ "AmovPercMevaSnonWnonDfr",
+ 0.02
+ };
+ };
+ class AmovPercMevaSnonWnonDfr: SprintCivilBaseDfr
+ {
+ actions="CivilEvasiveActions";
+ soundOverride="sprint";
+ soundEnabled=1;
+ canPullTrigger=0;
+ duty=0.60000002;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.1064889;
+ walkcycles=2;
+ ConnectTo[]=
+ {
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMwlkSnonWnonDfr",
+ 0.025,
+ "AmovPercMrunSnonWnonDfr",
+ 0.02,
+ "AmovPercMsprSnonWnonDf_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPercMevaSnonWnonDf",
+ 0.02,
+ "AmovPercMevaSnonWnonDfl",
+ 0.02
+ };
+ };
+ class AmovPercMevaSrasWrflDf: SprintBaseDf
+ {
+ actions="RifleStandEvasiveActions";
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Mrun_Slow_Wrfl.p3d";
+ relSpeedMin=0.797005;
+ soundOverride="sprint";
+ soundEnabled=1;
+ limitGunMovement=0.1;
+ weaponIK=1;
+ headBobStrength=0.25373101;
+ duty=0.60000002;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSrasWrflDnon",
+ 0.02,
+ "AmovPercMrunSlowWrflDf",
+ 0.025,
+ "AmovPercMwlkSrasWrflDf",
+ 0.025,
+ "AmovPercMrunSrasWrflDf",
+ 0.025,
+ "AmovPercMsprSlowWrflDf_AmovPpneMstpSrasWrflDnon",
+ 0.02,
+ "AmovPknlMevaSrasWrflDf",
+ 0.025,
+ "AmovPercMevaSlowWrflDf",
+ 0.025,
+ "AmovPercMevaSrasWrflDfl",
+ 0.025,
+ "AmovPercMevaSrasWrflDfr",
+ 0.025,
+ "AdthPercMrunSlowWrflDf_6",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A1short",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A2short",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A3short",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A4short",
+ 0.0099999998
+ };
+ };
+ class AmovPknlMevaSrasWrflDf: AmovPercMevaSrasWrflDf
+ {
+ actions="RifleKneelEvasiveActions";
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPknlMrunSlowWrflDf",
+ 0.025,
+ "AmovPknlMrunSrasWrflDf",
+ 0.025,
+ "AmovPercMevaSrasWrflDf",
+ 0.025,
+ "AmovPercMevaSlowWrflDf",
+ 0.025
+ };
+ };
+ class AmovPercMevaSlowWrflDf: AmovPercMevaSrasWrflDf
+ {
+ actions="RifleStandLowEvasiveActions";
+ limitGunMovement=0.1;
+ weaponIK=1;
+ headBobStrength=0.25373101;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSlowWrflDnon",
+ 0.025,
+ "AmovPercMwlkSlowWrflDf",
+ 0.025,
+ "AmovPercMrunSlowWrflDf",
+ 0.025,
+ "AmovPercMevaSrasWrflDf",
+ 0.025,
+ "AidlPercMevaSrasWrflDf",
+ 0.0099999998,
+ "AmovPercMevaSlowWrflDfl",
+ 0.025,
+ "AmovPercMevaSlowWrflDfr",
+ 0.025,
+ "AdthPercMrunSlowWrflDf_A1short",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A2short",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A3short",
+ 0.0099999998,
+ "AdthPercMrunSlowWrflDf_A4short",
+ 0.0099999998
+ };
+ };
+ class AmovPercMstpSrasWpstDnon: StandBase
+ {
+ actions="PistolStandActions";
+ duty=-1;
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ showWeaponAim=1;
+ disableWeapons=0;
+ disableWeaponsLong=0;
+ showHandGun=1;
+ speed=1e+010;
+ relSpeedMin=0.700001;
+ relSpeedMax=1.1;
+ aiming="aimingPistol";
+ aimingBody="aimingUpPistol";
+ looped=1;
+ soundEnabled=0;
+ enableBinocular=1;
+ leftHandIKBeg=1;
+ leftHandIKCurve[]={1};
+ leftHandIKEnd=1;
+ rightHandIKBeg=1;
+ rightHandIKCurve[]={1};
+ rightHandIKEnd=1;
+ collisionShape="ca\Anims\Characters\Data\Geom\Sdr\Perc_Wpst.p3d";
+ weaponIK=2;
+ enableOptics=2;
+ headBobStrength=0.22388101;
+ headBobMode=2;
+ ConnectTo[]=
+ {
+ "AidlPercMstpSrasWpstDnon_player_0S",
+ 0.02,
+ "AovrPercMstpSrasWpstDf",
+ 0.0099999998,
+ "AmovPercMstpSrasWpstDnon_AidlPercMstpSlowWpstDnon",
+ 0.0099999998,
+ "AmovPercMstpSrasWpstDnon_turnL",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_turnR",
+ 0.02,
+ "PistolMagazineReloadStand",
+ 0.1,
+ "AmovPercMstpSrasWpstDnon_AmovPercMstpSlowWpstDnon",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_AmovPknlMstpSrasWpstDnon",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWrflDnon",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_AwopPercMstpSoptWbinDnon",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "ActsPercMstpSnonWpstDnon_sceneBardakPistol01",
+ 0.1,
+ "AmovPercMstpSrasWpstDnon_SaluteIn",
+ 0.02,
+ "AwopPercMstpSgthWpstDnon_Part1",
+ 0.1,
+ "AswmPercMstpSnonWnonDnon",
+ 0.30000001,
+ "AmovPercMstpSrasWpstDnon_AinvPknlMstpSnonWnonDnon",
+ 0.02,
+ "amovpercmstpsraswpstdnon_amovpercmstpsraswlnrdnon",
+ 0.02,
+ "ctsLopoHover_shagarov",
+ 0.0099999998
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSrasWpstDnon_turnL",
+ 0.02,
+ "AmovPercMstpSrasWpstDnon_turnR",
+ 0.02,
+ "AmovPercMwlkSrasWpstDf",
+ 0.02,
+ "AmovPercMwlkSrasWpstDfl",
+ 0.02,
+ "AmovPercMwlkSrasWpstDl",
+ 0.02,
+ "AmovPercMwlkSrasWpstDbl",
+ 0.02,
+ "AmovPercMwlkSrasWpstDb",
+ 0.02,
+ "AmovPercMwlkSrasWpstDbr",
+ 0.02,
+ "AmovPercMwlkSrasWpstDr",
+ 0.02,
+ "AmovPercMwlkSrasWpstDfr",
+ 0.02,
+ "AmovPercMrunSrasWpstDf",
+ 0.02,
+ "AmovPercMrunSrasWpstDfl",
+ 0.02,
+ "AmovPercMrunSrasWpstDl",
+ 0.02,
+ "AmovPercMrunSrasWpstDbl",
+ 0.02,
+ "AmovPercMrunSrasWpstDb",
+ 0.02,
+ "AmovPercMrunSrasWpstDbr",
+ 0.02,
+ "AmovPercMrunSrasWpstDr",
+ 0.02,
+ "AmovPercMrunSrasWpstDfr",
+ 0.02,
+ "AmovPercMevaSrasWpstDf",
+ 0.02,
+ "AmovPercMevaSrasWpstDfl",
+ 0.02,
+ "AmovPercMevaSrasWpstDfr",
+ 0.02,
+ "AdthPercMstpSrasWpstDnon_1",
+ 0.0099999998,
+ "AdthPercMstpSrasWpstDnon_3",
+ 0.0099999998,
+ "AdthPercMstpSrasWpstDnon_5",
+ 0.0099999998
+ };
+ };
+ class AmovPpneMstpSrasWpstDnon: AmovPercMstpSrasWpstDnon
+ {
+ actions="PistolProneActions";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ showWeaponAim=1;
+ visibleSize=0.100123;
+ onLandBeg=1;
+ onLandEnd=1;
+ aiming="aimingPistol";
+ aimingBody="aimingUpPistol";
+ legs="legsDefault";
+ collisionShape="ca\Anims\Characters\Data\Geom\Sdr\Ppne.p3d";
+ leaningFactorBeg=0;
+ leaningFactorEnd=0;
+ leaning="leaningDefault";
+ soundOverride="crawl";
+ weaponIK=2;
+ limitGunMovement=1;
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon_turnL",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_turnR",
+ 0.02,
+ "PistolMagazineReloadProne",
+ 0.1,
+ "AmovPpneMstpSrasWpstDnon_AmovPercMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AmovPknlMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AmovPpneMstpSrasWrflDnon",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AwopPpneMstpSoptWbinDnon",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AmovPpneMevaSlowWpstDl",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AmovPpneMevaSlowWpstDr",
+ 0.02,
+ "AwopPpneMstpSgthWpstDnon_Part1",
+ 0.1,
+ "AidlPpneMstpSrasWpstDnon0S",
+ 0.1,
+ "AidlPpneMstpSrasWpstDnon01",
+ 0.1,
+ "AidlPpneMstpSrasWpstDnon02",
+ 0.1,
+ "AidlPpneMstpSrasWpstDnon03",
+ 0.1,
+ "AmovPpneMstpSrasWpstDnon_healed",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon_turnL",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_turnR",
+ 0.02,
+ "AmovPpneMrunSlowWpstDf",
+ 0.02,
+ "AmovPpneMrunSlowWpstDfl",
+ 0.02,
+ "AmovPpneMrunSlowWpstDl",
+ 0.02,
+ "AmovPpneMrunSlowWpstDbl",
+ 0.02,
+ "AmovPpneMrunSlowWpstDb",
+ 0.02,
+ "AmovPpneMrunSlowWpstDbr",
+ 0.02,
+ "AmovPpneMrunSlowWpstDr",
+ 0.02,
+ "AmovPpneMrunSlowWpstDfr",
+ 0.02,
+ "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf",
+ 0.0099999998,
+ "AdthPpneMstpSrasWpstDnon_1",
+ 0.0099999998,
+ "AdthPpneMstpSrasWpstDnon_2",
+ 0.0099999998,
+ "AidlPpneMstpSrasWpstDnon0S",
+ 0.02,
+ "AidlPpneMstpSrasWpstDnon01",
+ 0.02,
+ "AidlPpneMstpSrasWpstDnon02",
+ 0.02,
+ "AidlPpneMstpSrasWpstDnon03",
+ 0.02
+ };
+ };
+ class AmovPpneMrunSlowWpstDf: AmovPpneMstpSrasWpstDnon
+ {
+ visibleSize=0.150123;
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ soundOverride="crawl";
+ duty=0.40000001;
+ showWeaponAim=0;
+ disableWeapons=1;
+ limitGunMovement=0;
+ soundEnabled=1;
+ legs="wholeBody";
+ leaning="empty";
+ aimingBody="empty";
+ aiming="empty";
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDl",
+ 0.025,
+ "AmovPpneMrunSlowWpstDfr",
+ 0.025,
+ "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf",
+ 0.0099999998
+ };
+ };
+ class AmovPpneMrunSlowWpstDfl: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDl",
+ 0.025,
+ "AmovPpneMrunSlowWpstDb",
+ 0.025,
+ "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf",
+ 0.0099999998
+ };
+ };
+ class AmovPpneMrunSlowWpstDl: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDf",
+ 0.025,
+ "AmovPpneMrunSlowWpstDfl",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSlowWpstDbl: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDb",
+ 0.025,
+ "AmovPpneMrunSlowWpstDbr",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSlowWpstDb: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDfl",
+ 0.025,
+ "AmovPpneMrunSlowWpstDbl",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSlowWpstDbr: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDbl",
+ 0.025,
+ "AmovPpneMrunSlowWpstDr",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSlowWpstDr: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDbr",
+ 0.025,
+ "AmovPpneMrunSlowWpstDfr",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSlowWpstDfr: AmovPpneMrunSlowWpstDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=3.21;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMrunSlowWpstDf",
+ 0.025,
+ "AmovPpneMrunSlowWpstDr",
+ 0.025,
+ "AmovPpneMstpSrasWpstDnon_AmovPercMsprSlowWpstDf",
+ 0.0099999998
+ };
+ };
+ class AmovPercMstpSlowWrflDnon: StandBase
+ {
+ actions="RifleLowStandActions";
+ duty=-1;
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Idle.p3d";
+ showWeaponAim=0;
+ disableWeapons=0;
+ disableWeaponsLong=1;
+ speed=1e+010;
+ relSpeedMin=0.69999999;
+ relSpeedMax=1.1;
+ looped=1;
+ soundEnabled=0;
+ enableBinocular=1;
+ aiming="aimingDefault";
+ aimingBody="aimingUpDefault";
+ leftHandIKBeg=1;
+ leftHandIKCurve[]={1};
+ leftHandIKEnd=1;
+ rightHandIKBeg=1;
+ rightHandIKCurve[]={1};
+ rightHandIKEnd=1;
+ aimPrecision=1;
+ weaponIK=1;
+ headBobMode=2;
+ canPullTrigger=0;
+ ConnectTo[]=
+ {
+ "AidlPercMstpSlowWrflDnon_player_0S",
+ 0.0099999998,
+ "AovrPercMstpSlowWrflDf",
+ 0.0099999998,
+ "AmovPercMstpSlowWrflDnon_turnL",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_turnR",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AmovPknlMstpSlowWrflDnon",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AmovPpneMstpSrasWrflDnon",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AmovPercMstpSrasWrflDnon",
+ 0.0099999998,
+ "ActsPsitMstpSnonWrflDnon_varSittingDrinking",
+ 10,
+ "AmovPercMstpSlowWrflDnon_ScaredTalking",
+ 2,
+ "AmovPercMstpSlowWrflDnon_talking",
+ 2,
+ "AmovPercMstpSlowWrflDnon_seeWatch",
+ 2,
+ "AmovPercMstpSlowWrflDnon_SaluteIn",
+ 0.1,
+ "AmovPercMstpSrasWrflDnon_SaluteIn",
+ 0.15000001,
+ "AmovPercMstpSlowWrflDnon_AmovPsitMstpSlowWrflDnon",
+ 0.1,
+ "AmovPercMstpSlowWrflDnon_AmovPsitMstpSrasWrflDnon",
+ 0.1,
+ "LadderRifleOn",
+ 1,
+ "AswmPercMstpSnonWnonDnon",
+ 0.30000001,
+ "AidlPercMstpSrasWrflDnon0S",
+ 0.0099999998,
+ "ActsPpneMstpWunaSnonDnon_sceneCrashSite_Cooper",
+ 0.1,
+ "AidlPercMstpSlowWrflDnon0S",
+ 0.0099999998,
+ "ActsPpneMstpWrflSlowDnon_sceneCrashSite_Ohara",
+ 0.1,
+ "ActsPpneMstpWrflSlowDnon_sceneCrashSite_Sykes",
+ 0.1,
+ "ActsPpneMstpWrflSlowDnon_sceneCrashSite_Rodriguez",
+ 0.1,
+ "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_AcinPknlMwlkSnonWnonDb_1",
+ 0.1,
+ "ActsPercMstpSnonWnonDnon_talking01a",
+ 0.1,
+ "AidlPercSlowWrflDnon_talkCalm",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Rodriguez1",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Ohara1",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_sceneLopotevBandCaptured_Cooper",
+ 0.1,
+ "AidlPercSlowWrflDnon_talkHeated",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Steve",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Simms",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Kostey",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_sceneNikitinDisloyalty_Adamson",
+ 0.0099999998,
+ "ActsPercMstpSgthWmagDnon_sceneNikitinDisloyalty_USflashbang1",
+ 10,
+ "ActsPercMstpSlowWpstDnon_sceneLopotevBandCaptured_Sykes",
+ 0.0099999998,
+ "ErcRflLow_sitRfl_L",
+ 0.0099999998,
+ "ErcRflLow_sitRfl_L2",
+ 0.0099999998,
+ "ErcRflLow_sitRfl_R",
+ 0.0099999998,
+ "ErcRflLow_sitTable",
+ 0.0099999998,
+ "ErcRflLow_sitRfl_L_CARGO",
+ 0.0099999998,
+ "CtsDoktor_Doktor_uder4",
+ 0.0099999998,
+ "CtsDoktor_Doktor_uder5",
+ 0.0099999998,
+ "CtsDoktor_Vojak_vyslechStand2unaerc_reverse",
+ 0.0099999998,
+ "otockaErcRflLow_180leva",
+ 0.0099999998,
+ "ctsLopoHover_cooper",
+ 0.0099999998,
+ "ctsLopoHover_ohara",
+ 0.0099999998,
+ "ctsLopoHover_rodriguez",
+ 0.0099999998,
+ "ctsLopoHover_sykes",
+ 0.0099999998,
+ "sitRfl_R_BidleLoopTest",
+ 0.0099999998,
+ "AmelPercMstpSlowWrflDnon_StrokeGun",
+ 0.02,
+ "ActsPercMstpSlowWrflDnon_listeningOrdersUnderFireShort",
+ 0.0099999998,
+ "AmovPercMstpSlowWrflDnon_ActsPercMstpSlowWrflDr_HideFromFire",
+ 0.0099999998,
+ "AsigPercMstpSlowWrflDnon_GoGo",
+ 0.0099999998,
+ "AsigPercMstpSlowWrflDnon_AmovPercMrunSlowWrflDnon_GoGo",
+ 0.0099999998,
+ "AsigPercMstpSlowWrflDnon_SendMenInAction",
+ 0.0099999998,
+ "AmovPercMstpSnonWnonDnon_zevl",
+ 0.0099999998,
+ "c4coming2cdf_genericstani",
+ 0.0099999998
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSlowWrflDnon_turnL",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_turnR",
+ 0.02,
+ "AmovPercMwlkSlowWrflDf",
+ 0.02,
+ "AmovPercMwlkSlowWrflDfl",
+ 0.02,
+ "AmovPercMwlkSlowWrflDl",
+ 0.02,
+ "AmovPercMwlkSlowWrflDbl",
+ 0.02,
+ "AmovPercMwlkSlowWrflDb",
+ 0.02,
+ "AmovPercMwlkSlowWrflDbr",
+ 0.02,
+ "AmovPercMwlkSlowWrflDr",
+ 0.02,
+ "AmovPercMwlkSlowWrflDfr",
+ 0.02,
+ "AmovPercMrunSlowWrflDf",
+ 0.02,
+ "AmovPercMrunSlowWrflDfl",
+ 0.02,
+ "AmovPercMrunSlowWrflDl",
+ 0.02,
+ "AmovPercMrunSlowWrflDbl",
+ 0.02,
+ "AmovPercMrunSlowWrflDb",
+ 0.02,
+ "AmovPercMrunSlowWrflDbr",
+ 0.02,
+ "AmovPercMrunSlowWrflDr",
+ 0.02,
+ "AmovPercMrunSlowWrflDfr",
+ 0.02,
+ "AmovPercMevaSlowWrflDf",
+ 0.025,
+ "AmovPercMevaSlowWrflDfl",
+ 0.025,
+ "AmovPercMevaSlowWrflDfr",
+ 0.025,
+ "AmovPercMstpSlowWrflDnon_AmovPercMevaSrasWrflDl",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AmovPercMevaSrasWrflDr",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AmovPercMevaSrasWrflDb",
+ 0.02,
+ "AdthPercMstpSlowWrflDnon_1",
+ 0.0099999998,
+ "AdthPercMstpSlowWrflDnon_2",
+ 0.0099999998,
+ "AdthPercMstpSlowWrflDnon_4",
+ 0.0099999998,
+ "AdthPercMstpSlowWrflDnon_8",
+ 0.0099999998,
+ "AdthPercMstpSlowWrflDnon_rS0",
+ 0.0099999998,
+ "AwopPercMstpSgthWrflDnon_Start1",
+ 0.1,
+ "AwopPercMstpSgthWrflDnon_Throw1",
+ 0.1,
+ "AwopPercMstpSgthWrflDnon_End1",
+ 0.1,
+ "AwopPercMstpSgthWrflDnon_Throw2",
+ 0.1,
+ "AwopPercMstpSgthWrflDnon_End2",
+ 0.1,
+ "AidlPercMstpSlowWrflDnon01",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon02",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon03",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon04",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i01",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i02",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i03",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i04",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i05",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i06",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i07",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i08",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i09",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i10",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i11",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i12",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon_i13",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon05",
+ 0.02,
+ "AidlPercMstpSlowWrflDnon06",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1",
+ 0.0099999998,
+ "AdthPercMstpSlowWrflDnon_16",
+ 0.0099999998,
+ "AdthPercMstpSlowWrflDnon_32",
+ 0.0099999998,
+ "ActsPercMstpSlowWrflDnon_talking_C3BeginBriefing",
+ 0.1,
+ "AidlPercSlowWrflDnon_talkListeningS",
+ 0.0099999998,
+ "AidlPercSnonWnonDnon_talkAS",
+ 0.0099999998
+ };
+ };
+ class AmovPercMstpSrasWrflDnon: AmovPercMstpSlowWrflDnon
+ {
+ visibleSize=0.70012099;
+ actions="RifleStandActions";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Perc_Wrfl.p3d";
+ showWeaponAim=1;
+ disableWeapons=0;
+ disableWeaponsLong=0;
+ aiming="aimingDefault";
+ aimingBody="aimingUpDefault";
+ relSpeedMax=1.1;
+ relSpeedMin=0.700001;
+ aimPrecision=1;
+ weaponIK=1;
+ canPullTrigger=1;
+ ConnectTo[]=
+ {
+ "AidlPercMstpSrasWrflDnon_aiming0S",
+ 0.02,
+ "AovrPercMstpSrasWrflDf",
+ 0.0099999998,
+ "AmovPercMwlkSrasWrflDnon_transition",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_turnL",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_turnR",
+ 0.02,
+ "WeaponMagazineReloadStand",
+ 0.1,
+ "amovpercmstpsraswrfldnon_amovpercmstpsraswlnrdnon",
+ 0.0099999998,
+ "AmovPercMstpSrasWrflDnon_AmovPknlMstpSrasWrflDnon",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPpneMstpSrasWrflDnon",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPercMstpSlowWrflDnon",
+ 0.0099999998,
+ "AmovPercMstpSrasWrflDnon_AmovPercMstpSrasWpstDnon",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AwopPercMstpSoptWbinDnon",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "AwopPercMstpSgthWrflDnon_Start2",
+ 0.1,
+ "AswmPercMstpSnonWnonDnon",
+ 0.30000001,
+ "AmovPercMstpSrasWrflDnon_AinvPknlMstpSlayWrflDnon",
+ 0.02,
+ "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1",
+ 0.0099999998,
+ "ActsPercMstpSnonWpstDnon_sceneBardakRifle01",
+ 0.1,
+ "adthpercmstpsraswrfldnon_NikitinDead",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_zevl1",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_zevl2",
+ 0.0099999998,
+ "ActsPercMstpSrasWunaDnon_sceneLopotevBandCaptured_Bardak",
+ 10,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Lopotev",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Miles",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Nameless",
+ 0.0099999998,
+ "ActsPercMstpSrasWrflDnon_sceneLopotevBandCaptured_Nikitin",
+ 0.0099999998
+ };
+ InterpolateTo[]=
+ {
+ "AmovPercMstpSrasWrflDnon_turnL",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_turnR",
+ 0.02,
+ "AmovPercMwlkSrasWrflDf",
+ 0.02,
+ "AmovPercMwlkSrasWrflDfl",
+ 0.02,
+ "AmovPercMwlkSrasWrflDl",
+ 0.02,
+ "AmovPercMwlkSrasWrflDbl",
+ 0.02,
+ "AmovPercMwlkSrasWrflDb",
+ 0.02,
+ "AmovPercMwlkSrasWrflDbr",
+ 0.02,
+ "AmovPercMwlkSrasWrflDr",
+ 0.02,
+ "AmovPercMwlkSrasWrflDfr",
+ 0.02,
+ "AmovPercMrunSrasWrflDf",
+ 0.02,
+ "AmovPercMrunSrasWrflDfl",
+ 0.02,
+ "AmovPercMrunSrasWrflDl",
+ 0.02,
+ "AmovPercMrunSrasWrflDbl",
+ 0.02,
+ "AmovPercMrunSrasWrflDb",
+ 0.02,
+ "AmovPercMrunSrasWrflDbr",
+ 0.02,
+ "AmovPercMrunSrasWrflDr",
+ 0.02,
+ "AmovPercMrunSrasWrflDfr",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPknlMstpSlowWrflDnon",
+ 0.02,
+ "AmovPercMevaSrasWrflDf",
+ 0.02,
+ "AmovPercMevaSrasWrflDfl",
+ 0.02,
+ "AmovPercMevaSrasWrflDfr",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDl",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDr",
+ 0.02,
+ "AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDb",
+ 0.02,
+ "AdthPercMstpSrasWrflDnon_1",
+ 0.0099999998,
+ "AdthPercMstpSrasWrflDnon_2",
+ 0.0099999998,
+ "AdthPercMstpSrasWrflDnon_4",
+ 0.0099999998,
+ "AdthPercMstpSrasWrflDnon_8",
+ 0.0099999998,
+ "AdthPercMstpSrasWrflDnon_rS0",
+ 0.0099999998,
+ "AidlPercMstpSrasWrflDnon0S",
+ 0.02,
+ "AidlPercMstpSrasWrflDnon",
+ 0.0099999998,
+ "AmovPercMstpSlowWrflDnon_AcinPknlMwlkSlowWrflDb_1",
+ 0.0099999998,
+ "AdthPercMstpSrasWrflDnon_16",
+ 0.0099999998,
+ "AdthPercMstpSrasWrflDnon_32",
+ 0.0099999998,
+ "adthpercmstpsraswrfldnon_NikitinDead",
+ 0.0099999998
+ };
+ };
+ class AmovPpneMstpSrasWrflDnon: AmovPercMstpSrasWrflDnon
+ {
+ variantsAI[]={};
+ actions="RifleProneActions";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Ppne.p3d";
+ onLandBeg=1;
+ onLandEnd=1;
+ showWeaponAim=1;
+ disableWeapons=0;
+ visibleSize=0.100123;
+ aimPrecision=0.30000001;
+ aiming="aimingDefault";
+ aimingBody="aimingUpDefault";
+ leaning="leaningDefault";
+ legs="legsDefault";
+ leaningFactorBeg=0;
+ leaningFactorEnd=0;
+ limitGunMovement=1;
+ soundOverride="crawl";
+ weaponIK=1;
+ headBobStrength=0.20398;
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon_injured",
+ 0.1,
+ "AmovPpneMstpSrasWrflDnon_turnL",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_turnR",
+ 0.02,
+ "WeaponMagazineReloadProne",
+ 0.1,
+ "AmovPpneMstpSrasWrflDnon_AmovPercMstpSrasWrflDnon",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AmovPknlMstpSrasWrflDnon",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AwopPpneMstpSoptWbinDnon",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDl",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AmovPpneMevaSlowWrflDr",
+ 0.02,
+ "AwopPpneMstpSgthWrflDnon_Start",
+ 0.1,
+ "AwopPpneMstpSgthWrflDnon_End",
+ 0.1,
+ "AidlPpneMstpSrasWrflDnon0S",
+ 0.1,
+ "AidlPpneMstpSrasWrflDnon01",
+ 0.1,
+ "AidlPpneMstpSrasWrflDnon02",
+ 0.1,
+ "AidlPpneMstpSrasWrflDnon03",
+ 0.1,
+ "AmovPpneMstpSrasWrflDnon_healed",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon_turnL",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_turnR",
+ 0.02,
+ "AmovPpneMrunSlowWrflDf",
+ 0.02,
+ "AmovPpneMrunSlowWrflDfl",
+ 0.02,
+ "AmovPpneMrunSlowWrflDl",
+ 0.02,
+ "AmovPpneMrunSlowWrflDbl",
+ 0.02,
+ "AmovPpneMrunSlowWrflDb",
+ 0.02,
+ "AmovPpneMrunSlowWrflDbr",
+ 0.02,
+ "AmovPpneMrunSlowWrflDr",
+ 0.02,
+ "AmovPpneMrunSlowWrflDfr",
+ 0.02,
+ "AmovPpneMsprSlowWrflDf",
+ 0.02,
+ "AmovPpneMsprSlowWrflDbl",
+ 0.02,
+ "AmovPpneMsprSlowWrflDl",
+ 0.02,
+ "AmovPpneMsprSlowWrflDr",
+ 0.02,
+ "AmovPpneMsprSlowWrflDbr",
+ 0.02,
+ "AmovPpneMsprSlowWrflDb",
+ 0.02,
+ "AmovPpneMsprSlowWrflDfl",
+ 0.02,
+ "AmovPpneMsprSlowWrflDfr",
+ 0.02,
+ "AmovPpneMstpSrasWrflDnon_AmovPercMsprSlowWrflDf",
+ 0.050000001,
+ "AdthPpneMstpSrasWrflDnon_1",
+ 0.0099999998,
+ "AdthPpneMstpSrasWrflDnon_2",
+ 0.0099999998,
+ "AidlPpneMstpSrasWrflDnon0S",
+ 0.02,
+ "AidlPpneMstpSrasWrflDnon01",
+ 0.02,
+ "AidlPpneMstpSrasWrflDnon02",
+ 0.02,
+ "AidlPpneMstpSrasWrflDnon03",
+ 0.02
+ };
+ };
+ class AmovPpneMrunSlowWrflDf: AmovPpneMstpSrasWrflDnon
+ {
+ visibleSize=0.150123;
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ soundOverride="crawl";
+ duty=0.40000001;
+ showWeaponAim=0;
+ disableWeapons=1;
+ soundEnabled=1;
+ limitGunMovement=0;
+ legs="wholeBody";
+ aiming="empty";
+ aimingBody="empty";
+ leaning="empty";
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ leftHandIKBeg=0;
+ leftHandIKCurve[]={};
+ leftHandIKEnd=0;
+ actions="RifleProneActionsRunF";
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon",
+ 0.02,
+ "AmovPpneMrunSlowWrflDfl",
+ 0.025,
+ "AmovPpneMrunSlowWrflDfr",
+ 0.025,
+ "AmovPpneMsprSlowWrflDf",
+ 0.025,
+ "AmovPpneMstpSrasWrflDnon_AmovPercMsprSlowWrflDf",
+ 0.050000001,
+ "AdthPpneMstpSlowWrflDf_1",
+ 0.0099999998,
+ "AdthPpneMstpSlowWrflDf_2",
+ 0.0099999998
+ };
+ };
+ class AmovPpneMstpSrasWrflDnon_turnL: AmovPpneMstpSrasWrflDnon
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ soundOverride="crawl";
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon",
+ 0.02
+ };
+ };
+ class AmovPpneMstpSrasWrflDnon_turnR: AmovPpneMstpSrasWrflDnon
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ soundOverride="crawl";
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSrasWrflDnon",
+ 0.02
+ };
+ };
+ class AmovPpneMstpSnonWnonDnon: AmovPercMstpSnonWnonDnon
+ {
+ actions="CivilProneActions";
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ legs="Wholebody";
+ onLandBeg=1;
+ onLandEnd=1;
+ collisionShape="ca\Anims\Characters\data\Geom\Sdr\Ppne.p3d";
+ aimingBody="empty";
+ disableWeapons=0;
+ soundOverride="crawl";
+ canPullTrigger=0;
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon_turnL",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_turnR",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPercMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPknlMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf",
+ 0.050000001,
+ "AmovPpneMstpSnonWnonDnon_AmovPpneMstpSrasWrflDnon",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPpneMstpSrasWpstDnon",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPknlMstpSrasWlnrDnon",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AwopPpneMstpSoptWbinDnon",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDl",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPpneMevaSnonWnonDr",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_AmovPsitMstpSnonWnonDnon_ground",
+ 0.1,
+ "AwopPpneMstpSgthWnonDnon_start",
+ 0.1,
+ "AidlPpneMstpSnonWnonDnon0S",
+ 0.1,
+ "AidlPpneMstpSnonWnonDnon01",
+ 0.1,
+ "AidlPpneMstpSnonWnonDnon02",
+ 0.1,
+ "AidlPpneMstpSnonWnonDnon03",
+ 0.1,
+ "AmovPpneMstpSnonWnonDnon_healed",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_injured",
+ 0.1
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon_turnL",
+ 0.02,
+ "AmovPpneMstpSnonWnonDnon_turnR",
+ 0.02,
+ "AmovPpneMrunSnonWnonDf",
+ 0.02,
+ "AmovPpneMrunSnonWnonDfl",
+ 0.02,
+ "AmovPpneMrunSnonWnonDl",
+ 0.02,
+ "AmovPpneMrunSnonWnonDbl",
+ 0.02,
+ "AmovPpneMrunSnonWnonDb",
+ 0.02,
+ "AmovPpneMrunSnonWnonDbr",
+ 0.02,
+ "AmovPpneMrunSnonWnonDr",
+ 0.02,
+ "AmovPpneMrunSnonWnonDfr",
+ 0.02,
+ "AdthPpneMstpSnonWnonDnon",
+ 0.0099999998
+ };
+ };
+ class AmovPpneMrunSnonWnonDf: AmovPpneMstpSnonWnonDnon
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ soundOverride="crawl";
+ leaningFactorBeg=0;
+ leaningFactorEnd=0;
+ soundEnabled=1;
+ legs="wholeBody";
+ aimingBody="empty";
+ leaning="empty";
+ aiming="empty";
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDfl",
+ 0.025,
+ "AmovPpneMrunSnonWnonDfr",
+ 0.025,
+ "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf",
+ 0.050000001
+ };
+ };
+ class AmovPpneMstpSnonWnonDnon_turnL: AmovPpneMstpSnonWnonDnon
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ soundOverride="crawl";
+ canPullTrigger=0;
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ };
+ class AmovPpneMstpSnonWnonDnon_turnR: AmovPpneMstpSnonWnonDnon
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ soundOverride="crawl";
+ canPullTrigger=0;
+ ConnectTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02
+ };
+ };
+ class AmovPpneMrunSnonWnonDfl: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDf",
+ 0.025,
+ "AmovPpneMrunSnonWnonDl",
+ 0.025,
+ "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf",
+ 0.050000001
+ };
+ };
+ class AmovPpneMrunSnonWnonDl: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDfl",
+ 0.025,
+ "AmovPpneMrunSnonWnonDbl",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSnonWnonDbl: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDl",
+ 0.025,
+ "AmovPpneMrunSnonWnonDb",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSnonWnonDb: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDbl",
+ 0.025,
+ "AmovPpneMrunSnonWnonDbr",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSnonWnonDbr: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDb",
+ 0.025,
+ "AmovPpneMrunSnonWnonDr",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSnonWnonDr: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=0.5;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDbr",
+ 0.025,
+ "AmovPpneMrunSnonWnonDfr",
+ 0.025
+ };
+ };
+ class AmovPpneMrunSnonWnonDfr: AmovPpneMrunSnonWnonDf
+ {
+ file="\nst\ns_anims\bloodsucker\forward.rtm";
+ speed=1.05;
+ duty=0.40000001;
+ relSpeedMin=0.69717097;
+ relSpeedMax=1.096506;
+ soundOverride="crawl";
+ soundEnabled=1;
+ canPullTrigger=0;
+ ConnectTo[]={};
+ InterpolateTo[]=
+ {
+ "AmovPpneMstpSnonWnonDnon",
+ 0.02,
+ "AmovPpneMrunSnonWnonDf",
+ 0.025,
+ "AmovPpneMrunSnonWnonDr",
+ 0.025,
+ "AmovPpneMstpSnonWnonDnon_AmovPercMsprSnonWnonDf",
+ 0.050000001
+ };
+ };
+ };
};
\ No newline at end of file
diff --git a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf
index e7886717f..12ccb1af7 100644
--- a/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf
+++ b/SQF/dayz_code/actions/AdvancedTrading/functions/z_at_sellItems.sqf
@@ -135,6 +135,7 @@ if (Z_SellingFrom == 2) then {
if (_type == "trade_weapons") then {_name = configFile >> "CfgWeapons" >> _name;};
if (_x select 0 == dayz_onBack) then {
dayz_onBack = ""; // Remove from back
+ player setVariable ["dayz_onBack",dayz_onBack,true];
_localResult = 1;
} else {
_localResult = [player,_name,1] call BIS_fnc_invRemove; // Use config for BIS_fnc_invRemove
diff --git a/SQF/dayz_code/actions/buryActions.sqf b/SQF/dayz_code/actions/buryActions.sqf
new file mode 100644
index 000000000..26c465216
--- /dev/null
+++ b/SQF/dayz_code/actions/buryActions.sqf
@@ -0,0 +1,85 @@
+/*
+ Bury/Butcher body script by salival (https://github.com/oiad)
+*/
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+private ["_action","_backPackMag","_backPackWpn","_crate","_corpse","_cross","_gain","_isBury","_grave","_name","_playerNear","_backPack","_position","_sound","_notOnRoad"];
+
+_corpse = (_this select 3) select 0;
+if (isNull _corpse) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";};
+
+_playerNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1;
+if (_playerNear) exitWith {dayz_actionInProgress = false; localize "str_pickup_limit_5" call dayz_rollingMessages;};
+
+_action = (_this select 3) select 1;
+_notOnRoad = false; // Restrict burying/butchering on roads?
+
+player removeAction s_player_bury_human;
+s_player_bury_human = -1;
+player removeAction s_player_butcher_human;
+s_player_butcher_human = -1;
+
+_position = getPosATL _corpse;
+_isBury = _action == "bury";
+
+if (_notOnRoad && {isOnRoad _position}) exitWith {dayz_actionInProgress = false; format[localize "STR_CL_BA_ROAD",if (_isBury) then {localize "STR_CL_BA_BURY1"} else {"STR_CL_BA_BUTCHER1"}] call dayz_rollingMessages;};
+
+_finished = ["Medic",1] call fn_loopAction;
+if (!_finished) exitWith {dayz_actionInProgress = false;localize "str_epoch_player_26" call dayz_rollingMessages;};
+
+_corpse setVariable["isBuried",true,true];
+
+_backPack = typeOf (unitBackPack _corpse);
+
+_crate = createVehicle ["DZ_AmmoBoxSmallUS",_position,[],0,"CAN_COLLIDE"];
+_crate setPosATL [(_position select 0)+1,(_position select 1)+1.5,_position select 2];
+_crate setVariable ["permaLoot",true,true];
+_crate setVariable ["bury",true,true];
+
+_grave = createVehicle ["Grave",_position,[],0,"CAN_COLLIDE"];
+_grave setPosATL [(_position select 0)+1,_position select 1,_position select 2];
+_grave setVariable ["bury",true,true];
+
+if (_isBury) then {
+ _name = _corpse getVariable["bodyName","unknown"];
+ _cross = createVehicle ["GraveCross1",_position,[],0,"CAN_COLLIDE"];
+ _cross setPosATL [(_position select 0)+1,(_position select 1)-1.2,_position select 2];
+ _cross setVariable ["bury",true,true];
+};
+
+{_crate addWeaponCargoGlobal [_x,1]} forEach weapons _corpse;
+{_crate addMagazineCargoGlobal [_x,1]} forEach magazines _corpse;
+
+if (_backPack != "") then {
+ _backPackWpn = getWeaponCargo unitBackpack _corpse;
+ _backPackMag = getMagazineCargo unitBackpack _corpse;
+
+ if (count _backPackWpn > 0) then {{_crate addWeaponCargoGlobal [_x,(_backPackWpn select 1) select _forEachIndex]} forEach (_backPackWpn select 0);};
+ if (count _backPackMag > 0) then {{_crate addMagazineCargoGlobal [_x,(_backPackMag select 1) select _forEachIndex]} forEach (_backPackMag select 0);};
+
+ _crate addBackpackCargoGlobal [_backPack,1];
+};
+
+_sound = _corpse getVariable ["sched_co_fliesSource",nil];
+if (!isNil "_sound") then {
+ detach _sound;
+ deleteVehicle _sound;
+};
+
+deleteVehicle _corpse;
+
+if (_isBury) then {
+ if (_name != "unknown") then {
+ format[localize "STR_CL_BA_RIP",_name] call dayz_rollingMessages;
+ } else {
+ localize "STR_CL_BA_RIP_UNKNOWN" call dayz_rollingMessages;
+ };
+} else {
+ ["knives",0.2] call fn_dynamicTool;
+};
+
+_gain = if (_isBury) then {DZE_Bury_Body_Value} else {DZE_Butcher_Body_Value};
+_gain call player_humanityChange;
+
+dayz_actionInProgress = false;
diff --git a/SQF/dayz_code/actions/garageDoorOpener.sqf b/SQF/dayz_code/actions/garageDoorOpener.sqf
new file mode 100644
index 000000000..7eef6173e
--- /dev/null
+++ b/SQF/dayz_code/actions/garageDoorOpener.sqf
@@ -0,0 +1,70 @@
+/*
+ Garage door opener script by salival (https://github.com/oiad)
+*/
+
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+private ["_door","_typeof","_state"];
+
+_door = _this select 3;
+_typeof = typeof _door;
+_state = 5;
+
+if (isNull _door) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";};
+
+{DZE_myVehicle removeAction _x} count s_player_gdoor_opener;s_player_gdoor_opener = [];
+s_player_gdoor_opener_ctrl = 1;
+
+call {
+ if (_typeof in ["WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ"]) exitwith {
+ if (_door animationPhase "DoorR" == 0) then {
+ systemChat localize "STR_CL_GDO_DOOR_OPEN";
+ _door animate ["DoorR",1];
+ _door animate ["DoorL",1];
+ } else {
+ systemChat localize "STR_CL_GDO_DOOR_CLOSE";
+ _door animate ["DoorR",0];
+ _door animate ["DoorL",0];
+ _state = 4;
+ };
+ };
+ if (_typeof in ["CinderGarageOpenTopLocked_DZ","Land_DZE_WoodOpenTopGarageLocked"]) exitwith {
+ if (_door animationPhase "doorl" == 0) then {
+ systemChat localize "STR_CL_GDO_DOOR_OPEN";
+ _door animate ["doorR",1];
+ _door animate ["doorl",1];
+ } else {
+ systemChat localize "STR_CL_GDO_DOOR_CLOSE";
+ _door animate ["doorR",0];
+ _door animate ["doorl",0];
+ _state = 4;
+ };
+ };
+ if (_typeof in ["CinderGateLocked_DZ","Land_DZE_WoodGateLocked"]) exitwith {
+ if (_door animationPhase "Open_door" == 0) then {
+ systemChat localize "STR_CL_GDO_DOOR_OPEN";
+ _door animate ["Open_door",1];
+ _door animate ["Open_doorR",1];
+ } else {
+ systemChat localize "STR_CL_GDO_DOOR_CLOSE";
+ _door animate ["Open_door",0];
+ _door animate ["Open_doorR",0];
+ _state = 4;
+ };
+ };
+ if (_door animationPhase "Open_door" == 0) then {
+ systemChat localize "STR_CL_GDO_DOOR_OPEN";
+ _door animate ["Open_door",1];
+ } else {
+ systemChat localize "STR_CL_GDO_DOOR_CLOSE";
+ _door animate ["Open_door",0];
+ _state = 4;
+ };
+};
+
+PVDZE_handleSafeGear = [player,_door,_state,"DoorOpener"];
+publicVariableServer "PVDZE_handleSafeGear";
+
+s_player_gdoor_opener_ctrl = -1;
+dayz_actionInProgress = false;
\ No newline at end of file
diff --git a/SQF/dayz_code/actions/gather_meat.sqf b/SQF/dayz_code/actions/gather_meat.sqf
index 1826fb5af..c77bf8ee7 100644
--- a/SQF/dayz_code/actions/gather_meat.sqf
+++ b/SQF/dayz_code/actions/gather_meat.sqf
@@ -1,27 +1,27 @@
-private ["_item","_type","_hasHarvested","_knifeArray","_PlayerNear","_isListed","_activeKnife","_text","_qty","_string","_isZombie","_humanity","_finished"];
-
if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
dayz_actionInProgress = true;
-_item = _this;
-_type = typeOf _item;
-_isZombie = _type isKindOf "zZombie_base";
-_hasHarvested = _item getVariable["meatHarvested",false];
+local _body = _this;
+if (isNull _body) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";};
+if (_body getVariable["meatHarvested",false]) exitWith {dayz_actionInProgress = false;}; // Exit the script if the meat has already been harvested.
+if ({isPlayer _x} count ((getPosATL _body) nearEntities ["CAManBase", 12]) > 1) exitWith {dayz_actionInProgress = false;localize "str_pickup_limit_5" call dayz_rollingMessages;}; // Exit the script if another player is near to prevent duping.
-_knifeArray = [];
+local _type = typeOf _body;
+local _isZombie = _type isKindOf "zZombie_base";
+local _isMutant = _type == "z_bloodsucker";
+local _knives = [];
+local _string = "";
-_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities ["CAManBase", 12]) > 1;
-if (_PlayerNear) exitWith {localize "str_pickup_limit_5" call dayz_rollingMessages; dayz_actionInProgress = false;};
-
-//Count how many active tools the player has
+// Count how many knives the player has
{
- if (_x IN items player) then {
- _knifeArray set [count _knifeArray, _x];
+ if (_x in items player) then {
+ _knives set [count _knives, _x];
};
} count Dayz_Gutting;
-if ((count _knifeArray) < 1) exitWith {
- if (_isZombie) then {
+// Exit the script if the player doesn't have a knife
+if ((count _knives) < 1) exitWith {
+ if (_isZombie || _isMutant) then {
format[localize "str_missing_to_do_this",localize "STR_EQUIP_NAME_4"] call dayz_rollingMessages;
} else {
localize "str_cannotgut" call dayz_rollingMessages;
@@ -29,48 +29,48 @@ if ((count _knifeArray) < 1) exitWith {
dayz_actionInProgress = false;
};
-if ((count _knifeArray > 0) and !_hasHarvested) then {
- //Use sharpest knife player has
- _activeKnife = _knifeArray select 0;
+[player,(getPosATL player),10,"gut"] spawn fnc_alertZombies;
- //Get Animal Type
- _isListed = isClass (configFile >> "CfgSurvival" >> "Meat" >> _type);
- _text = getText (configFile >> "CfgVehicles" >> _type >> "displayName");
+local _finished = ["Medic",1] call fn_loopAction;
+if (!_finished) exitWith {dayz_actionInProgress = false;};
- [player,(getPosATL player),10,"gut"] spawn fnc_alertZombies;
+// Added Nutrition-Factor for work
+["Working",0,[20,40,15,0]] call dayz_NutritionSystem;
- _finished = ["Medic",1] call fn_loopAction;
- if (!_finished) exitWith {};
+//Get Animal Type
+local _isListed = isClass (configFile >> "CfgSurvival" >> "Meat" >> _type);
+local _text = getText (configFile >> "CfgVehicles" >> _type >> "displayName");
- // Added Nutrition-Factor for work
- ["Working",0,[20,40,15,0]] call dayz_NutritionSystem;
+_body setVariable ["meatHarvested",true,true];
+local _qty = if (_isListed) then {getNumber (configFile >> "CfgSurvival" >> "Meat" >> _type >> "yield")} else {2};
+if ((_knives select 0) == "ItemKnifeBlunt") then {_qty = round(_qty / 2);};
- _item setVariable ["meatHarvested",true,true];
-
- _qty = if (_isListed) then {getNumber (configFile >> "CfgSurvival" >> "Meat" >> _type >> "yield")} else {2};
- if (_activeKnife == "ItemKnifeBlunt") then { _qty = round(_qty / 2); };
-
- if (local _item) then {
- [_item,_qty] spawn local_gutObject; //leave as spawn (sleeping in loops will work but can freeze the script)
- } else {
- PVCDZ_obj_GutBody =[_item,_qty];
- publicVariable "PVCDZ_obj_GutBody";
- };
-
- ["knives",0.2] call fn_dynamicTool;
-
- if (_isZombie) then {
- // Reduce humanity for gutting zeds
- _humanity = player getVariable ["humanity",0];
- _humanity = _humanity - 10;
- player setVariable ["humanity",_humanity,true];
- _string = format[localize "str_success_gutted_zombie",_text]; //%1 has been gutted, zombie parts are now on the carcass
- } else {
- _string = format[localize "str_success_gutted_animal",_text,_qty];
- };
- closeDialog 0;
- uiSleep 0.02;
- _string call dayz_rollingMessages;
+if (local _body) then {
+ [_body,_qty] spawn local_gutObject; //leave as spawn (sleeping in loops will work but can freeze the script)
+} else {
+ PVCDZ_obj_GutBody =[_body,_qty];
+ publicVariable "PVCDZ_obj_GutBody";
};
-dayz_actionInProgress = false;
+["knives",0.2] call fn_dynamicTool;
+
+call {
+ if (_isZombie) exitWith {
+ // Reduce humanity for gutting zeds
+ local _humanity = player getVariable ["humanity",0];
+ player setVariable ["humanity",(_humanity - 10),true];
+ _string = format[localize "str_success_gutted_zombie",_text]; //%1 has been gutted, zombie parts are now on the carcass
+ };
+
+ if (_isMutant) exitWith {
+ _string = format[localize "str_success_gutted_mutant",_text];
+ };
+
+ _string = format[localize "str_success_gutted_animal",_text,_qty]; // default is gut animal
+};
+
+closeDialog 0;
+uiSleep 0.02;
+_string call dayz_rollingMessages;
+
+dayz_actionInProgress = false;
\ No newline at end of file
diff --git a/SQF/dayz_code/actions/locateVehicle.sqf b/SQF/dayz_code/actions/locateVehicle.sqf
new file mode 100644
index 000000000..c689aa43d
--- /dev/null
+++ b/SQF/dayz_code/actions/locateVehicle.sqf
@@ -0,0 +1,57 @@
+/*
+ locateVehicle by salival (https://github.com/oiad)
+*/
+
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+private ["_characterID","_found","_i","_keyID","_keyIDS","_keyList","_keyName","_keyNames","_locateMarkerDelete","_locateMarkerTime","_marker","_name","_position","_vehicle"];
+
+_keyList = call epoch_tempKeys;
+_keyIDS = _keyList select 0;
+_keyNames = _keyList select 1;
+
+_locateMarkerDelete = true; // Delete markers after a certain amount of time to avoid cluttering the map?
+_locateMarkerTime = 60; // Time in seconds before markers are deleted if enabled above.
+
+_i = 0;
+for "_i" from 0 to 60 do {deleteMarkerLocal ("vehicleMarker"+ (str _i));};
+
+if (count _keyIDS < 1) exitWith {dayz_actionInProgress = false; systemChat localize "STR_CL_LV_NO_KEYS";};
+
+_i = 0;
+{
+ _keyID = parseNumber (_keyIDS select _forEachIndex);
+ _keyName = _keyNames select _forEachIndex;
+ _found = 0;
+ {
+ _vehicle = typeOf _x;
+ _characterID = parseNumber (_x getVariable ["CharacterID","0"]);
+ if ((_characterID == _keyID) && {_vehicle isKindOf "Air" || {_vehicle isKindOf "LandVehicle"} || {_vehicle isKindOf "Ship"}}) then {
+ _found = _found +1;
+ _i = _i +1;
+ _position = getPos _x;
+ _name = getText (configFile >> "CfgVehicles" >> _vehicle >> "displayName");
+ _marker = createMarkerLocal ["vehicleMarker" + (str _i),[_position select 0,_position select 1]];
+ _marker setMarkerShapeLocal "ICON";
+ _marker setMarkerTypeLocal "DOT";
+ _marker setMarkerColorLocal "ColorOrange";
+ _marker setMarkerSizeLocal [1.0, 1.0];
+ _marker setMarkerTextLocal format ["%1",_name];
+ systemChat format[localize "STR_CL_LV_BELONGS",_keyName,_name,if (!alive _x) then {toLower (format [" (%1)",localize "str_artdlg_destroyed"])} else {""}];
+ };
+ } forEach vehicles;
+ if (_found == 0) then {systemChat format[localize "STR_CL_LV_NO_VEHICLES",_keyName]};
+} forEach _keyIDS;
+
+if (_i > 0) then {
+ systemChat format[localize "STR_CL_LV_FOUND",_i];
+ if (_locateMarkerDelete) then {
+ _locateMarkerTime spawn {
+ uiSleep _this;
+ for "_i" from 0 to 60 do {deleteMarkerLocal ("vehicleMarker"+ (str _i));};
+ };
+ };
+};
+
+dayz_actionInProgress = false;
diff --git a/SQF/dayz_code/actions/player_addToolbelt.sqf b/SQF/dayz_code/actions/player_addToolbelt.sqf
index f2c494997..56f8bde78 100644
--- a/SQF/dayz_code/actions/player_addToolbelt.sqf
+++ b/SQF/dayz_code/actions/player_addToolbelt.sqf
@@ -38,6 +38,7 @@ call gear_ui_init;
if (_item == dayz_onBack && carryClick) then {
dayz_onBack = "";
+ player setVariable ["dayz_onBack",dayz_onBack,true];
carryClick = false;
((findDisplay 106) displayCtrl 1209) ctrlSetText "";
_removed = true;
diff --git a/SQF/dayz_code/actions/player_addtoBack.sqf b/SQF/dayz_code/actions/player_addtoBack.sqf
index 066288672..fd63584f6 100644
--- a/SQF/dayz_code/actions/player_addtoBack.sqf
+++ b/SQF/dayz_code/actions/player_addtoBack.sqf
@@ -17,13 +17,12 @@ call gear_ui_init;
if (_item in ["ItemHatchet","ItemCrowbar","ItemMachete","ItemFishingPole","ItemSledge"]) then {
//free primary slot for new melee (remember item to add after)
call {
- if (_item == "ItemHatchet") exitwith {player removeWeapon "ItemHatchet"; dayz_onBack = "MeleeHatchet";};
- if (_item == "ItemCrowbar") exitwith {player removeWeapon "ItemCrowbar"; dayz_onBack = "MeleeCrowbar";};
- if (_item == "ItemMachete") exitwith {player removeWeapon "ItemMachete"; dayz_onBack = "MeleeMachete";};
- if (_item == "ItemFishingPole") exitwith {player removeWeapon "ItemFishingPole"; dayz_onBack = "MeleeFishingPole";};
- if (_item == "ItemSledge") exitwith {player removeWeapon "ItemSledge"; dayz_onBack = "MeleeSledge";};
+ if (_item == "ItemHatchet") exitwith {player removeWeapon "ItemHatchet"; dayz_onBack = "MeleeHatchet";player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (_item == "ItemCrowbar") exitwith {player removeWeapon "ItemCrowbar"; dayz_onBack = "MeleeCrowbar";player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (_item == "ItemMachete") exitwith {player removeWeapon "ItemMachete"; dayz_onBack = "MeleeMachete";player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (_item == "ItemFishingPole") exitwith {player removeWeapon "ItemFishingPole"; dayz_onBack = "MeleeFishingPole";player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (_item == "ItemSledge") exitwith {player removeWeapon "ItemSledge"; dayz_onBack = "MeleeSledge";player setVariable ["dayz_onBack",dayz_onBack,true];};
};
disableSerialization;
[[(findDisplay 106)],"onLBSelChanged"] spawn fn_handleGear; //update back
-
};
diff --git a/SQF/dayz_code/actions/player_dropWeapon.sqf b/SQF/dayz_code/actions/player_dropWeapon.sqf
index 61f7256ef..cf06b28e8 100644
--- a/SQF/dayz_code/actions/player_dropWeapon.sqf
+++ b/SQF/dayz_code/actions/player_dropWeapon.sqf
@@ -1,3 +1,6 @@
+if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; };
+dayz_actionInProgress = true;
+
private ["_item","_config","_onLadder","_consume","_bag","_droppedType"];
disableSerialization;
@@ -8,23 +11,22 @@ _droppedType = getText (_config >> "droppeditem");
//Make sure the player still has the tool this script was spawned with
if ((dayz_onBack != _item && carryClick) or (!(player hasWeapon _item) && !carryClick)) exitWith {
format[localize "str_player_30",getText (_config >> "displayName")] call dayz_rollingMessages;
+ dayz_actionInProgress = false;
};
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
-if (_onLadder) exitWith { localize "str_player_21" call dayz_rollingMessages; };
-if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; };
-dayz_actionInProgress = true;
+if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages; };
call gear_ui_init;
_consume = ([] + getArray (_config >> "magazines")) select 0;
if (_item == dayz_onBack && carryClick) then {
- switch DayZ_onBack do {
- case "MeleeHatchet": {_item = "ItemHatchet"; dayz_onBack = "";};
- case "MeleeCrowbar": {_item = "ItemCrowbar"; dayz_onBack = "";};
- case "MeleeMachete": {_item = "ItemMachete"; dayz_onBack = "";};
- case "MeleeSledge": {_item = "ItemSledge"; dayz_onBack = "";};
+ call {
+ if (dayZ_onBack == "MeleeHatchet") exitWith {_item = "ItemHatchet"; dayz_onBack = ""; player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (dayZ_onBack == "MeleeCrowbar") exitWith {_item = "ItemCrowbar"; dayz_onBack = "";player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (dayZ_onBack == "MeleeMachete") exitWith {_item = "ItemMachete"; dayz_onBack = "";player setVariable ["dayz_onBack",dayz_onBack,true];};
+ if (dayZ_onBack == "MeleeSledge") exitWith {_item = "ItemSledge"; dayz_onBack = "";player setVariable ["dayz_onBack",dayz_onBack,true];};
};
carryClick = false;
((findDisplay 106) displayCtrl 1209) ctrlSetText "";
diff --git a/SQF/dayz_code/actions/player_goFishing.sqf b/SQF/dayz_code/actions/player_goFishing.sqf
index b22ed64d4..1eb20ba55 100644
--- a/SQF/dayz_code/actions/player_goFishing.sqf
+++ b/SQF/dayz_code/actions/player_goFishing.sqf
@@ -110,7 +110,7 @@ while {_isOk} do {
} else {
call gear_ui_init;
//Remove melee magazines (BIS_fnc_invAdd fix)
- {player removeMagazines _x} forEach MeleeMagazines;
+ false call dz_fn_meleeMagazines;
_result = [player,_itemOut] call BIS_fnc_invAdd;
if (_result) then {
//Let the player know what he caught
diff --git a/SQF/dayz_code/actions/player_mineStone.sqf b/SQF/dayz_code/actions/player_mineStone.sqf
index 8d842bf7b..99037d17a 100644
--- a/SQF/dayz_code/actions/player_mineStone.sqf
+++ b/SQF/dayz_code/actions/player_mineStone.sqf
@@ -1,12 +1,12 @@
+if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; };
+dayz_actionInProgress = true;
+
private ["_mineChance","_breaking","_counter","_rocks","_findNearestRock","_objName","_countOut","_isOk","_proceed","_finished","_itemOut","_weapons"];
_item = _this;
call gear_ui_init;
closeDialog 1;
-if (dayz_actionInProgress) exitWith { localize "str_player_actionslimit" call dayz_rollingMessages; };
-dayz_actionInProgress = true;
-
// allowed rocks list move this later
_rocks = ["r2_boulder1.p3d","r2_boulder2.p3d","r2_rock1.p3d","r2_rock2.p3d","r2_rocktower.p3d","r2_rockwall.p3d","r2_stone.p3d"];
_findNearestRock = objNull;
@@ -37,7 +37,7 @@ if (!isNull _findNearestRock) then {
_weapons set [count _weapons,dayz_onBack];
//Make sure player did not drop pickaxe
- if (!_finished or !("MeleePickaxe" in _weapons or ("ItemPickaxe" in _weapons))) exitWith {
+ if (!_finished || !("ItemPickaxe" in _weapons)) exitWith {
_isOk = false;
_proceed = false;
};
@@ -48,18 +48,9 @@ if (!isNull _findNearestRock) then {
_breaking = false;
if (dayz_toolBreaking && _mineChance) then {
_breaking = true;
- if ("MeleePickaxe" in weapons player) then {
- player removeWeapon "MeleePickaxe";
- } else {
- if ("ItemPickaxe" in weapons player) then {
- player removeWeapon "ItemPickaxe";
- } else {
- if (dayz_onBack == "MeleePickaxe") then {
- dayz_onBack = "";
- if (!isNull findDisplay 106) then {findDisplay 106 displayCtrl 1209 ctrlSetText "";};
- };
- };
- };
+ if ("ItemPickaxe" in weapons player) then {
+ player removeWeapon "ItemPickaxe";
+ };
if (!("ItemPickaxeBroken" in weapons player)) then {
player addWeapon "ItemPickaxeBroken";
};
diff --git a/SQF/dayz_code/actions/player_surrender.sqf b/SQF/dayz_code/actions/player_surrender.sqf
index 2ef9fa5e4..d6eae7fd7 100644
--- a/SQF/dayz_code/actions/player_surrender.sqf
+++ b/SQF/dayz_code/actions/player_surrender.sqf
@@ -32,6 +32,7 @@ if (_canDo && !DZE_Surrender && !(player isKindOf "PZombie_VB")) then {
if (dayz_onBack != "") then {
[dayz_onBack,2,1] call fn_dropItem;
dayz_onBack = ""; // Remove from back
+ player setVariable ["dayz_onBack",dayz_onBack,true];
if (!isNull findDisplay 106) then {findDisplay 106 displayCtrl 1209 ctrlSetText "";};
};
call player_forceSave;
diff --git a/SQF/dayz_code/actions/player_switchWeapon.sqf b/SQF/dayz_code/actions/player_switchWeapon.sqf
index 83abe06bf..f79efe88e 100644
--- a/SQF/dayz_code/actions/player_switchWeapon.sqf
+++ b/SQF/dayz_code/actions/player_switchWeapon.sqf
@@ -151,6 +151,8 @@ dz_fn_switchWeapon_swap = {
dayz_onBack = [primaryWeapon player,player removeWeapon primaryWeapon player,player addWeapon dayz_onBack] select 0;
};
+ player setVariable ["dayz_onBack",dayz_onBack,true];
+
if (_this) then {
player selectWeapon primaryWeapon player;
if (IS_MELEE(primaryWeapon player)) then {
diff --git a/SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf b/SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf
new file mode 100644
index 000000000..8b51bf3ae
--- /dev/null
+++ b/SQF/dayz_code/actions/remoteVehicle/remoteVehicle.sqf
@@ -0,0 +1,152 @@
+/*
+ Remote vehicle script by salival (https://github.com/oiad)
+*/
+
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+private ["_characterID","_checkDistance","_display","_distance","_fuel","_group","_vehicleFound","_keyID","_keyName","_option","_time","_vehicle","_vehicleType","_index","_control","_keyDisplay","_exit"];
+
+_keyName = _this select 0;
+_option = _this select 1;
+
+_checkDistance = true; // Check to see if the player is too far away from the remote
+_distance = 300; // Maximum distance the player can be away from the vehicle to be able to use the remote.
+
+disableSerialization;
+
+_exit = {
+ dayz_actionInProgress = false;
+ rv_vehicleList = nil;
+ rv_selected = nil;
+};
+
+_display = findDisplay 106;
+_display closeDisplay 0;
+
+_keyList = call epoch_tempKeys;
+_keyID = 0;
+
+_keyID = (_keyList select 0) select ((_keyList select 2) find _keyName);
+_foundPos = (_keyList select 0) find _keyID;
+
+if (_foundPos >= 0) then {
+ _keyDisplay = (_keyList select 1) select _foundPos;
+};
+
+if (_foundPos == -1) exitWith {systemChat localize "STR_CL_RV_NO_KEYS"; call _exit;};
+
+rv_vehicleList = [];
+_vehicleFound = false;
+{
+ _vehicleType = typeOf _x;
+ _characterID = _x getVariable ["CharacterID","0"];
+ if ((_characterID == _keyID) && {_vehicleType isKindOf "Air" || _vehicleType isKindOf "LandVehicle" || _vehicleType isKindOf "Ship"}) then {
+ _vehicleFound = true;
+ rv_vehicleList set [count rv_vehicleList,_x];
+ };
+} count vehicles;
+
+if (count rv_vehicleList > 1) then {
+ rv_isOk = false;
+
+ createDialog "remoteVehicle";
+
+ _display = uiNamespace getVariable["rv_dialog", displayNull];
+ _display displayCtrl 8801 ctrlSetText(format[localize "STR_CL_RV_TITLE",_keyDisplay]);
+
+ _control = ((findDisplay 8800) displayCtrl 8802);
+ lbClear _control;
+ {
+ _control lbAdd getText(configFile >> "CfgVehicles" >> typeOf _x >> "displayName");
+ if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then {
+ _control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];
+ };
+ } count rv_vehicleList;
+ _control lbSetCurSel 0;
+
+ waitUntil {!dialog};
+
+} else {
+ rv_selected = rv_vehicleList select 0;
+ rv_isOk = true;
+};
+
+if (!rv_isOk) exitWith {call _exit;};
+
+if (!_vehicleFound) exitWith {systemChat localize "STR_CL_RV_NO_VEHICLES"; call _exit;};
+
+_vehicleType = typeOf rv_selected;
+_displayName = getText(configFile >> "CfgVehicles" >> _vehicleType >> "displayName");
+
+if (!alive rv_selected) exitWith {systemChat localize "STR_CL_RV_DESTROYED"; call _exit;};
+if (_checkDistance && {(player distance rv_selected) >= _distance}) exitWith {format[localize "STR_CL_RV_RANGE_FAIL",_displayName] call dayz_rollingMessages; call _exit;};
+
+if (_option == 1) then {
+ _group = units group player;
+
+ systemChat format[localize "STR_CL_RV_EJECT",_displayName];
+ {
+ if !(_x in _group) then {
+ _x action ["eject",rv_selected];
+ systemChat format[localize "STR_CL_RV_EJECT_PLAYER",name _x];
+ };
+ } forEach (crew rv_selected);
+};
+
+if (_option == 2) then {
+ systemChat format[localize "STR_CL_RV_ENGINE",if (isEngineOn rv_selected) then {localize "strwfoff"} else {localize "strwfon"},_displayName];
+ if (isEngineOn rv_selected) then {
+ if (rv_selected isKindOf "Helicopter") then { // This is needed because dayz_engineSwitch won't turn off the engine for a helicopter.
+ _fuel = fuel rv_selected;
+ rv_selected setFuel 0;
+ player action ["engineOff",rv_selected];
+ uiSleep 4.5;
+ rv_selected setFuel _fuel;
+ } else {
+ [rv_selected,false] call dayz_engineSwitch;
+ };
+ } else {
+ [rv_selected,true] call dayz_engineSwitch;
+ };
+};
+
+if (_option == 3) then {
+ systemChat format[localize "STR_BLD_UNLOCKED",_displayName];
+ PVDZE_veh_Lock = [rv_selected,false];
+ _time = diag_tickTime;
+
+ if (local rv_selected) then {
+ PVDZE_veh_Lock call local_lockUnlock;
+ } else {
+ publicVariable "PVDZE_veh_Lock";
+ waitUntil {uiSleep 0.1;(!locked rv_selected or (diag_tickTime - _time > 4))};
+ };
+};
+
+if (_option == 4) then {
+ systemChat format[localize "STR_EPOCH_PLAYER_117",_displayName];
+ PVDZE_veh_Lock = [rv_selected,true];
+ _time = diag_tickTime;
+
+ if (local rv_selected) then {
+ PVDZE_veh_Lock call local_lockUnlock;
+ } else {
+ publicVariable "PVDZE_veh_Lock";
+ waitUntil {uiSleep 0.1;(locked rv_selected or (diag_tickTime - _time > 4))};
+ };
+};
+
+if (_option == 5) then {
+ if !(rv_selected getVariable["vehicleLights",false]) then {
+ player action ["lightOn", rv_selected];
+ systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfon",_vehicleType];
+ rv_selected setVariable ["vehicleLights",true,true];
+ } else {
+ player action ["lightOff", rv_selected];
+ systemChat format[localize "STR_CL_RV_LIGHTS",localize "strwfoff",_vehicleType];
+ rv_selected setVariable ["vehicleLights",false,true];
+ };
+};
+
+call _exit;
\ No newline at end of file
diff --git a/SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf b/SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf
new file mode 100644
index 000000000..8fc6a2390
--- /dev/null
+++ b/SQF/dayz_code/actions/remoteVehicle/vehicleInfo.sqf
@@ -0,0 +1,54 @@
+private ["_backPackCount","_backPackCount_raw","_backPackSlots","_formattedText","_gearCount","_magazineCount","_magazineCount_raw","_magazineSlots","_name","_picture","_price","_text","_typeOf","_weaponSlots","_weaponsCount","_weaponsCount_raw","_control","_index"];
+
+_gearCount = {
+ private ["_counter"];
+ _counter = 0;
+ {_counter = _counter + _x;} count _this;
+ _counter
+};
+
+_control = (_this select 0) select 0;
+_index = (_this select 0) select 1;
+
+rv_selected = rv_vehicleList select _index;
+_typeOf = typeOf rv_selected;
+
+_weaponsCount_raw = getWeaponCargo rv_selected;
+_magazineCount_raw = getMagazineCargo rv_selected;
+_backPackCount_raw = getBackpackCargo rv_selected;
+
+_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons");
+_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines");
+_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks");
+_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName");
+_picture = getText(configFile >> 'CfgVehicles' >> _typeOf >> 'picture');
+
+_weaponsCount = (_weaponsCount_raw select 1) call _gearCount;
+_magazineCount = (_magazineCount_raw select 1) call _gearCount;
+_backPackCount = (_backPackCount_raw select 1) call _gearCount;
+
+_formattedText = format [
+ "![]()
" +
+ "%2: %3
" +
+ "%4: %5
" +
+ "%6:
%13/%10
%14/%11
%15/%12
",
+ _picture,
+ localize "STR_EPOCH_NAME",
+ _name,
+ localize "STR_EPOCH_CLASS",
+ _typeOf,
+ localize "STR_EPOCH_CARGO_SPACE",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa",
+ _weaponSlots,
+ _magazineSlots,
+ _backPackSlots,
+ _weaponsCount,
+ _magazineCount,
+ _backPackCount,
+ _text
+];
+
+((findDisplay 8800) displayCtrl 8803) ctrlSetStructuredText parseText _formattedText;
+ctrlShow [8803,true];
\ No newline at end of file
diff --git a/SQF/dayz_code/actions/remove.sqf b/SQF/dayz_code/actions/remove.sqf
index bf35db7f3..9894537ba 100644
--- a/SQF/dayz_code/actions/remove.sqf
+++ b/SQF/dayz_code/actions/remove.sqf
@@ -137,6 +137,7 @@ if (_brokenTool) then {
} else {
if (dayz_onBack == "MeleeCrowbar") then {
dayz_onBack = ""; // Remove
+ player setVariable ["dayz_onBack",dayz_onBack,true];
_success = true;
if (!isNull (findDisplay 106)) then {((findDisplay 106) displayCtrl 1209) ctrlSetText "";};
};
diff --git a/SQF/dayz_code/actions/servicePoints/init.sqf b/SQF/dayz_code/actions/servicePoints/init.sqf
new file mode 100644
index 000000000..09aefd287
--- /dev/null
+++ b/SQF/dayz_code/actions/servicePoints/init.sqf
@@ -0,0 +1,176 @@
+/*
+ Vehicle Service Point by Axe Cop
+ Rewritten for single currency, gems, briefcase support and 1.0.7 epoch compatibility by salival - https://github.com/oiad/
+
+ Requires DayZ Epoch 1.0.7
+
+ This version adds support for both single currency and gems (from the epoch 1.0.7 update) as well as the original epoch briefcase currency system.
+ Instead of pricing things like the original way, prices are now done on a "worth" similar to how coins are done. The price value of items are below.
+
+ 1 silver = 1 worth
+ 1 10oz silver = 10 worth
+ 1 gold = 100 worth
+ 1 10oz gold = 1,000 worth
+ 1 briefcase = 10,000 worth
+
+ Please see dayz_code\configVariables.sqf for the value of gems (DZE_GemWorthArray) and their relevant worth if they are enabled.
+
+ Example config settings for DZE_SP_Refuel_Costs, DZE_SP_Repair_Costs and DZE_SP_Rearm_Costs:
+
+ All 3 sections can either be made free, disabled or a specifc price with the following examples:
+
+ ["Air",localize "strwffree"] will make the vehicle config class of "Air" free for the specific action.
+ ["Air",localize "str_temp_param_disabled"] will make the vehicle config class of "Air" disabled for the specific action.
+ ["Air",2000] will make the vehicle config class of "Air" have a worth of 2000 for the specific action.
+ ["Armored_SUV_PMC",2000] will make the specific vehicle have a worth of 2000 for the specific action.
+ ["Armored_SUV_PMC",localize "strwffree"] will make the specific vehicle be free for the specific action.
+ ["Armored_SUV_PMC",localize "str_temp_param_disabled"] will make the specific vehicle be disabled for the specific action.
+
+ Valid vehicle config classes as an example: "Air", "AllVehicles", "All", "APC", "Bicycle", "Car", "Helicopter", "Land", "Motorcycle", "Plane", "Ship", "Tank"
+*/
+
+private ["_folder","_actionTitleFormat","_actionCostsFormat","_message","_messageShown","_lastVehicle","_lastRole","_fnc_removeActions","_fnc_getCostsWep","_fnc_getCostsWep","_fnc_actionTitle","_fnc_isArmed","_fnc_getWeapons","_cycleTime","_servicePoints","_vehicle","_role","_costs","_actionTitle","_weapons","_weaponName"];
+
+// general settings
+_folder = "\z\addons\dayz_code\actions\servicePoints\"; // folder where the service point scripts are saved, relative to the mission file
+_actionTitleFormat = "%1 (%2)"; // text of the vehicle menu, %1 = action name (Refuel, Repair, Rearm), %2 = costs (see format below)
+_actionCostsFormat = "%2 %1"; // %1 = item name, %2 = item count
+_message = localize "STR_CL_SP_MESSAGE"; // This is translated from your stringtable.xml in your mission folder root. Set to "" to disable
+_cycleTime = 5; // Time in sections for how often the action menu will be refreshed and how often it will search for a nearby fuel station (setting this too low can make a lot of lag)
+
+_lastVehicle = objNull;
+_lastRole = [];
+_messageShown = false;
+
+SP_refuel_action = -1;
+SP_repair_action = -1;
+SP_rearm_actions = [];
+
+_fnc_removeActions = {
+ if (isNull _lastVehicle) exitWith {};
+ _lastVehicle removeAction SP_refuel_action;
+ SP_refuel_action = -1;
+ _lastVehicle removeAction SP_repair_action;
+ SP_repair_action = -1;
+ {
+ _lastVehicle removeAction _x;
+ } forEach SP_rearm_actions;
+ SP_rearm_actions = [];
+ _lastVehicle = objNull;
+ _lastRole = [];
+};
+
+_fnc_getCosts = {
+ private ["_getVehicle","_getCosts","_cost","_getTypeName"];
+ _getVehicle = _this select 0;
+ _getCosts = _this select 1;
+ _cost = [];
+ {
+ _getTypeName = _x select 0;
+ if (_getVehicle isKindOf _getTypeName) exitWith {
+ _cost = _x select 1;
+ };
+ } forEach _getCosts;
+ _cost
+};
+
+_fnc_getCostsWep = {
+ private ["_weapon","_getCostsWep","_returnCostWep","_typeName"];
+ _weapon = _this select 0;
+ _getCostsWep = _this select 1;
+ _returnCostWep = DZE_SP_Rearm_Defaultcost;
+ {
+ _typeName = _x select 0;
+ if (_weapon == _typeName) exitWith {
+ _returnCostWep = _x select 1;
+ };
+ } forEach _getCostsWep;
+ _returnCostWep
+};
+
+_fnc_actionTitle = {
+ private ["_actionName","_actionCosts","_costsText","_return"];
+ _actionName = _this select 0;
+ _actionCosts = _this select 1;
+ if (typeName _actionCosts == "STRING") then {
+ _costsText = _actionCosts;
+ } else {
+ _costsText = if (Z_SingleCurrency) then {format ["%1 %2",[_actionCosts] call BIS_fnc_numberText,CurrencyName]} else {format ["%1",[_actionCosts,true] call z_calcCurrency]};
+ };
+ _return = format [_actionTitleFormat,_actionName,_costsText];
+ _return
+};
+
+_fnc_getWeapons = {
+ private ["_gWeaponsVehicle","_gWeaponsRole","_gWeapons","_gWeaponName","_gTurret","_gWeaponsTurret"];
+ _gWeaponsVehicle = _this select 0;
+ _gWeaponsRole = _this select 1;
+ _gWeapons = [];
+ if (count _gWeaponsRole > 1) then {
+ _gTurret = _gWeaponsRole select 1;
+ _gWeaponsTurret = _gWeaponsVehicle weaponsTurret _gTurret;
+ {
+ _gWeaponName = getText (configFile >> "CfgWeapons" >> _x >> "displayName");
+ if !(_gWeaponName in DZE_SP_Rearm_Ignore) then {
+ _gWeapons set [count _gWeapons, [_x,_gWeaponName,_gTurret]];
+ };
+ } forEach _gWeaponsTurret;
+ };
+ _gWeapons
+};
+
+while {1==1} do {
+ _vehicle = vehicle player;
+ if (_vehicle != player) then {
+ _servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) - [_vehicle];
+ if (count _servicePoints > 0) then {
+ if (assignedDriver _vehicle == player) then {
+ _role = ["Driver", [-1]];
+ } else {
+ _role = assignedVehicleRole player;
+ };
+ if (((str _role) != (str _lastRole)) || {_vehicle != _lastVehicle}) then {
+ call _fnc_removeActions;
+ };
+ _lastVehicle = _vehicle;
+ _lastRole = _role;
+ if (DZE_SP_Refuel_Enable) then {
+ if (SP_refuel_action < 0) then {
+ _costs = [_vehicle,DZE_SP_Refuel_Costs] call _fnc_getCosts;
+ _actionTitle = [localize "config_depot.sqf8",_costs] call _fnc_actionTitle;
+ SP_refuel_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["refuel",_costs,DZE_SP_Refuel_UpdateInterval,DZE_SP_Refuel_Amount],-1,false,true];
+ };
+ };
+ if (DZE_SP_Repair_Enable) then {
+ if (SP_repair_action < 0) then {
+ _costs = [_vehicle,DZE_SP_Repair_Costs] call _fnc_getCosts;
+ _actionTitle = [localize "config_depot.sqf1",_costs] call _fnc_actionTitle;
+ SP_repair_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["repair",_costs,DZE_SP_Repair_RepairTime],-1,false,true];
+ };
+ };
+ if (DZE_SP_Rearm_Enable) then {
+ if ((count _role > 1) && {count SP_rearm_actions == 0}) then {
+ _weapons = [_vehicle,_role] call _fnc_getWeapons;
+ {
+ _weaponName = _x select 1;
+ _costs = [_weaponName,DZE_SP_Rearm_Costs] call _fnc_getCostsWep;
+ _actionTitle = [format["%1 %2",localize "config_depot.sqf5",_weaponName],_costs] call _fnc_actionTitle;
+ SP_rearm_action = _vehicle addAction [_actionTitle,_folder + "servicePointActions.sqf",["rearm",_costs,DZE_SP_Rearm_MagazineCount,_x],-1,false,true];
+ SP_rearm_actions set [count SP_rearm_actions, SP_rearm_action];
+ } forEach _weapons;
+ };
+ };
+ if (!_messageShown && {_message != ""}) then {
+ _messageShown = true;
+ _vehicle vehicleChat _message;
+ };
+ } else {
+ call _fnc_removeActions;
+ _messageShown = false;
+ };
+ } else {
+ call _fnc_removeActions;
+ _messageShown = false;
+ };
+ uiSleep _cycleTime;
+};
diff --git a/SQF/dayz_code/actions/servicePoints/servicePointActions.sqf b/SQF/dayz_code/actions/servicePoints/servicePointActions.sqf
new file mode 100644
index 000000000..40dcec70a
--- /dev/null
+++ b/SQF/dayz_code/actions/servicePoints/servicePointActions.sqf
@@ -0,0 +1,143 @@
+// Vehicle Service Point (Rearm) by Axe Cop
+// Rewritten for single currency, gems, briefcase support and 1.0.7 epoch compatibility by salival - https://github.com/oiad/
+// Requires DayZ Epoch 1.0.7 for gem support.
+
+private ["_vehicle","_costs","_fuel","_magazineCount","_weapon","_type","_name","_weaponType","_weaponName","_turret","_magazines","_ammo","_textMissing","_pos","_message","_action","_damage","_selection","_strH","_disabled","_amount","_enoughMoney","_moneyInfo","_wealth","_success","_reason","_cmpt"];
+
+_vehicle = _this select 0;
+
+_ammo = "";
+_reason = "";
+
+_action = (_this select 3) select 0;
+
+_type = typeOf _vehicle;
+_disabled = false;
+_name = getText(configFile >> "cfgVehicles" >> _type >> "displayName");
+
+_amount = (_this select 3) select 1;
+
+if (_action == "rearm") then {
+ _magazineCount = (_this select 3) select 2;
+ _weapon = (_this select 3) select 3;
+
+ _weaponType = _weapon select 0;
+ _weaponName = _weapon select 1;
+ _turret = _weapon select 2;
+};
+
+if (typeName _amount == "STRING") then {
+ if (_amount == (localize "str_temp_param_disabled")) then {
+ if (_action == "rearm") then {_reason = format[localize "STR_CL_SP_UNABLE_REARM",_weaponName]; _disabled = true};
+ if (_action == "repair") then {_reason = format[localize "STR_CL_SP_UNABLE_REPAIR",_name]; _disabled = true};
+ if (_action == "refuel") then {_reason = format[localize "STR_CL_SP_UNABLE_REFUEL",_name]; _disabled = true};
+ };
+ if (_amount == (localize "strwffree")) then {_amount = 0};
+};
+
+if (_disabled) exitWith {[_reason,1] call dayz_rollingMessages};
+
+_enoughMoney = false;
+_moneyInfo = [false, [], [], [], 0];
+_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0];
+
+if (Z_SingleCurrency) then {
+ _enoughMoney = (_wealth >= _amount);
+} else {
+ Z_Selling = false;
+ if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle};
+ _moneyInfo = _amount call Z_canAfford;
+ _enoughMoney = _moneyInfo select 0;
+};
+
+_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault};
+
+if (!_success && _enoughMoney) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"}; // Not enough room in gear or bag to accept change
+
+if (_enoughMoney) then {
+ _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault};
+ if (_success) then {
+ if (Z_SingleCurrency) then {
+ player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];
+ };
+
+ [player,(getPosATL player),50,"refuel"] spawn fnc_alertZombies;
+ _vehicle engineOn false;
+ if (_action == "refuel") then {
+ [format[localize "STR_CL_SP_REFUELING",_name],1] call dayz_rollingMessages;
+
+ while {vehicle player == _vehicle} do {
+ if ([0,0,0] distance (velocity _vehicle) > 1) exitWith {[format[localize "STR_CL_SP_REFUELING_STOPPED",_name],1] call dayz_rollingMessages};
+ _fuel = (fuel _vehicle) + ((_this select 3) select 3);
+ if (_fuel > 0.99) exitWith {
+ _vehicle setFuel 1;
+ [format[localize "STR_CL_SP_REFUEL_OK",_name],1] call dayz_rollingMessages;
+ };
+ _vehicle setFuel _fuel;
+ uiSleep ((_this select 3) select 2);
+ };
+ };
+ if (_action == "repair") then {
+ [player,(getPosATL player),50,"repair"] spawn fnc_alertZombies;
+
+ _hitpoints = _vehicle call vehicle_getHitpoints;
+ _allRepaired = true;
+ {
+ if ((vehicle player != _vehicle) || {[0,0,0] distance (velocity _vehicle) > 1}) exitWith {
+ _allRepaired = false;
+ [format[localize "STR_CL_SP_REPAIRING_STOPPED",_name],1] call dayz_rollingMessages;
+ };
+ _hits = [_vehicle,_x] call object_getHit;
+ _damage = _hits select 0;
+ if (_damage > 0) then {
+ _cmpt = [];
+ {
+ if (_forEachIndex > 2) then {_cmpt set [count _cmpt,_x]};
+ } forEach toArray (_x);
+ _cmpt = toString _cmpt;
+ [format[localize "STR_CL_SP_REPAIRING",_cmpt],1] call dayz_rollingMessages;
+ _selection = getText(configFile >> "cfgVehicles" >> _type >> "HitPoints" >> _x >> "name");
+ _strH = "hit_" + (_selection);
+ _vehicle setHit[_selection,0];
+ _vehicle setVariable [_strH,0,true];
+ uiSleep ((_this select 3) select 2);
+ };
+ } forEach _hitpoints;
+ PVDZ_veh_Save = [_vehicle,"repair",true];
+ publicVariableServer "PVDZ_veh_Save";
+
+ if (_allRepaired) then {
+ _vehicle setDamage 0;
+ _vehicle setVelocity [0,0,1];
+ [format[localize "STR_CL_SP_REPAIR_OK",_name],1] call dayz_rollingMessages;
+ };
+ };
+
+ if (_action == "rearm") then {
+ _magazines = getArray (configFile >> "CfgWeapons" >> _weaponType >> "magazines");
+ _ammo = _magazines select 0;
+
+ if (_weaponType == "CMFlareLauncher") then {
+ _vehicle removeWeaponTurret ["CMFlareLauncher",_turret];
+ for "_i" from 1 to _magazineCount do {_vehicle addMagazineTurret [_ammo,_turret];};
+ _vehicle addWeaponTurret ["CMFlareLauncher",_turret];
+ } else {
+ {_vehicle removeMagazinesTurret [_x,_turret];} forEach _magazines;
+
+ for "_i" from 1 to _magazineCount do {_vehicle addMagazineTurret [_ammo,_turret];};
+ };
+
+ [format[localize "STR_CL_SP_REARMED",_weaponName,_name],1] call dayz_rollingMessages;
+ };
+ call player_forceSave;
+ } else {
+ systemChat localize "STR_EPOCH_TRADE_DEBUG";
+ };
+} else {
+ _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency};
+ if (Z_SingleCurrency) then {
+ systemChat format[localize "STR_CL_SP_FAIL_COINS",[_amount] call BIS_fnc_numberText,_itemText,_action,_name];
+ } else {
+ systemChat format[localize "STR_CL_SP_FAIL_BRIEFCASES",_itemText,_action,_name];
+ };
+};
diff --git a/SQF/dayz_code/actions/takeClothes.sqf b/SQF/dayz_code/actions/takeClothes.sqf
new file mode 100644
index 000000000..ac1ef48ab
--- /dev/null
+++ b/SQF/dayz_code/actions/takeClothes.sqf
@@ -0,0 +1,45 @@
+/*
+ Originally by Zabn
+ Modified for DayZ Epoch 1.0.7+ by salival (https://github.com/oiad)
+*/
+
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+private ["_body","_clothesTaken","_finished","_itemNew","_itemNewName","_okSkin","_playerNear","_result","_skin"];
+
+_body = _this select 3;
+
+player removeAction s_player_clothes;
+s_player_clothes = -1;
+
+if (isNull _body) exitWith {dayz_actionInProgress = false; systemChat localize "str_cursorTargetNotFound";};
+
+_playerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1;
+if (_playerNear) exitWith {dayz_actionInProgress = false; localize "str_pickup_limit_5" call dayz_rollingMessages;};
+
+_clothesTaken = _body getVariable["clothesTaken",false];
+if (_clothesTaken) exitWith {dayz_actionInProgress = false; localize "STR_CL_TC_ALREADY_TAKEN" call dayz_rollingMessages;};
+
+_skin = typeOf _body;
+_itemNew = _skin;
+_itemNew = "Skin_" + _itemNew;
+_okSkin = isClass (configFile >> "CfgMagazines" >> _itemNew);
+
+if (!_okSkin || _skin in DZE_Disable_Take_Clothes) exitWith {dayz_actionInProgress = false; format[localize "STR_CL_TC_NOT_SUPPORTED",_skin] call dayz_rollingMessages;};
+
+_finished = ["Medic",1] call fn_loopAction;
+if (_finished) then {
+ _itemNewName = getText (configFile >> "CfgMagazines" >> _itemNew >> "displayName");
+ _result = [player,_itemNew] call BIS_fnc_invAdd;
+ if (_result) then {
+ _body setVariable["clothesTaken",true,true];
+ format[localize "STR_CL_TC_ADD_OK",_itemNewName] call dayz_rollingMessages;
+ } else {
+ format[localize "STR_CL_TC_ADD_FAIL",_itemNewName] call dayz_rollingMessages;
+ };
+} else {
+ localize "str_epoch_player_26" call dayz_rollingMessages;
+};
+
+dayz_actionInProgress = false;
\ No newline at end of file
diff --git a/SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf b/SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf
new file mode 100644
index 000000000..209fec3f9
--- /dev/null
+++ b/SQF/dayz_code/actions/virtualGarage/player_MaintainVG.sqf
@@ -0,0 +1,42 @@
+// Written by icomrade (https://github.com/icomrade)
+
+private ["_hasAccess","_heliPad","_objectID","_objectUID","_plotCheck"];
+
+closeDialog 0;
+
+_itemText = if (Z_SingleCurrency) then {CurrencyName} else {[vg_maintainCost,true] call z_calcCurrency};
+_enoughMoney = false;
+_moneyInfo = [false, [], [], [], 0];
+
+if (Z_SingleCurrency) then {
+ _wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0];
+ _enoughMoney = (_wealth >= vg_maintainCost);
+} else {
+ Z_Selling = false;
+ _moneyInfo = vg_maintainCost call Z_canAfford;
+ _enoughMoney = _moneyInfo select 0;
+};
+
+_success = true;
+if (vg_maintainCost > 0) then {
+ _success = if (Z_SingleCurrency) then {_enoughMoney} else {[player,vg_maintainCost,_moneyInfo,false,0] call Z_payDefault};
+};
+
+if (!_success && _enoughMoney) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL";};
+
+if (_enoughMoney || vg_maintainCost < 1) then {
+ if (Z_SingleCurrency) then {
+ player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - vg_maintainCost),true];
+ };
+ localize "STR_CL_VG_MAINTAINSUCCESS" call dayz_rollingMessages;
+ PVDZE_maintainGarage = if (vg_tiedToPole) then {
+ _plotCheck = [player,false] call FNC_find_plots;
+ _ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID};
+ [player,_ownerPUID]
+ } else {
+ [player]
+ };
+ publicVariableServer "PVDZE_maintainGarage";
+} else {
+ localize "STR_CL_VG_MAINTAINFAIL" call dayz_rollingMessages;
+};
diff --git a/SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf b/SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf
new file mode 100644
index 000000000..409bfcf1f
--- /dev/null
+++ b/SQF/dayz_code/actions/virtualGarage/player_getVehicle.sqf
@@ -0,0 +1,69 @@
+// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/)
+// Rewritten by salival (https://github.com/oiad)
+
+private ["_backPack","_charID","_dir","_heliPad","_inventory","_isNearPlot","_keyID","_keyName","_location","_plotCheck","_sign","_vehicle"];
+
+closeDialog 0;
+_vehicle = (call compile format["%1",lbData[2802,(lbCurSel 2802)]]);
+
+if (vg_removeKey && {_vehicle select 3 != 0} && {({getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 131072} count (weapons player)) == 12}) exitWith {localize "str_epoch_player_107" call dayz_rollingMessages;};
+
+_dir = round(random 360);
+_backPack = [];
+
+_plotCheck = [player,false] call FNC_find_plots;
+_isNearPlot = (_plotCheck select 1) > 0;
+
+_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {player},vg_heliPads,if (_isNearPlot) then {DZE_maintainRange} else {Z_VehicleDistance}];
+if ((count _heliPad == 0) && ((_vehicle select 1) isKindOf "Air")) exitWith {localize "STR_CL_VG_NEED_HELIPAD" call dayz_rollingMessages;};
+if (count _heliPad > 0) then {
+ _location = [(_heliPad select 0)] call FNC_GetPos;
+} else {
+ _location = [(position player),0,400,10,0,2000,0] call BIS_fnc_findSafePos;
+ _location set [2,0];
+};
+
+_sign = "Sign_arrow_down_large_EP1" createVehicleLocal [0,0,0];
+_sign setPos _location;
+
+if (surfaceIsWater _location && {count (_location nearEntities ["Ship",8]) > 0}) then {
+ deleteVehicle _sign;
+ localize "STR_EPOCH_TRADE_OBSTRUCTED" call dayz_rollingMessages;
+} else {
+ [_vehicle select 1,_sign] call fn_waitForObject;
+};
+
+PVDZE_spawnVehicle = [[_dir,_location],player,_vehicle select 0];
+publicVariableServer "PVDZE_spawnVehicle";
+
+waitUntil {!isNil "PVDZE_spawnVehicleResult"};
+
+if (PVDZE_spawnVehicleResult != "0") then {
+ _keyID = "";
+ _charID = parseNumber PVDZE_spawnVehicleResult;
+ if ((_charID > 0) && (_charID <= 2500)) then {_keyID = format["ItemKeyGreen%1",_charID];};
+ if ((_charID > 2500) && (_charID <= 5000)) then {_keyID = format["ItemKeyRed%1",_charID-2500];};
+ if ((_charID > 5000) && (_charID <= 7500)) then {_keyID = format["ItemKeyBlue%1",_charID-5000];};
+ if ((_charID > 7500) && (_charID <= 10000)) then {_keyID = format["ItemKeyYellow%1",_charID-7500];};
+ if ((_charID > 10000) && (_charID <= 12500)) then {_keyID = format["ItemKeyBlack%1",_charID-10000];};
+ _keyName = getText(configFile >> "CfgWeapons" >> _keyID >> "displayName");
+
+ if (vg_removeKey) then {
+ _inventory = weapons player;
+ dayz_myBackpack = unitBackpack player;
+ if (!isNull dayz_myBackpack) then {_backPack = (getWeaponCargo dayz_myBackpack) select 0;};
+ if (_keyID in (_inventory+_backPack)) then {
+ if (_keyID in _inventory) then {format[localize "STR_CL_VG_IN_INVENTORY",_keyName] call dayz_rollingMessages;};
+ if (_keyID in _backPack) then {format[localize "STR_CL_VG_IN_BACKPACK",_keyName] call dayz_rollingMessages;};
+ } else {
+ player addWeapon _keyID;
+ format[localize "STR_CL_VG_ADDED_INVENTORY",_keyName] call dayz_rollingMessages;
+ };
+ };
+};
+
+PVDZE_spawnVehicle = nil;
+PVDZE_spawnVehicleResult = nil;
+vg_vehicleList = nil;
+
+localize "STR_CL_VG_VEHICLE_SPAWNED" call dayz_rollingMessages;
diff --git a/SQF/dayz_code/actions/virtualGarage/player_removePad.sqf b/SQF/dayz_code/actions/virtualGarage/player_removePad.sqf
new file mode 100644
index 000000000..fd0e54247
--- /dev/null
+++ b/SQF/dayz_code/actions/virtualGarage/player_removePad.sqf
@@ -0,0 +1,24 @@
+// Written by salival (https://github.com/oiad)
+
+private ["_hasAccess","_objectID","_objectUID","_plotCheck"];
+
+closeDialog 0;
+
+_plotCheck = [player, false] call FNC_find_plots;
+_hasAccess = [player,_plotCheck select 2] call FNC_check_access;
+
+if ((_hasAccess select 0) or (_hasAccess select 2) or (_hasAccess select 3) or (_hasAccess select 4)) then {
+
+ {
+ _objectID = _x getVariable ["ObjectID","0"];
+ _objectUID = _x getVariable ["ObjectUID","0"];
+
+ PVDZ_obj_Destroy = [_objectID,_objectUID,player,_x,dayz_authKey];
+ publicVariableServer "PVDZ_obj_Destroy";
+
+ deleteVehicle _x;
+ systemChat format[localize "STR_CL_VG_HELIPAD_REMOVED",typeOf _x];
+ } count (nearestObjects [_plotCheck select 2,vg_heliPads,Z_VehicleDistance]);
+} else {
+ systemChat localize "STR_EPOCH_PLAYER_134";
+};
diff --git a/SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf b/SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf
new file mode 100644
index 000000000..a5a5c65eb
--- /dev/null
+++ b/SQF/dayz_code/actions/virtualGarage/player_storeVehicle.sqf
@@ -0,0 +1,209 @@
+// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/)
+// Rewritten by salival (https://github.com/oiad)
+
+private ["_amount","_backPackCount","_backPackGear","_cargoAmount","_charID","_control","_counter","_display","_enoughMoney","_gearCount","_hasKey","_isLimitArray","_itemText","_items","_keyName","_limit","_magazineCount","_matchedCount","_moneyInfo","_name","_overLimit","_storedVehicles","_success","_typeName","_typeOf","_vehicle","_vehicleID","_vehicleUID","_wealth","_weaponsCount","_woGear","_playerNear","_ownerPUID","_plotCheck"];
+
+disableSerialization;
+
+_display = findDisplay 2800;
+_control = ((findDisplay 2800) displayCtrl 2802);
+
+_vehicle = vg_vehicleList select (lbCurSel _control);
+_typeOf = typeOf _vehicle;
+_isLimitArray = typeName vg_limit == "ARRAY";
+
+_overLimit = false;
+_matchedCount = 0;
+_storedVehicles = [];
+
+{if (_typeOf isKindOf _x) exitWith {_overLimit = true;}} count vg_blackListed;
+if (_overLimit) exitWith {localize "STR_CL_VG_BLACKLISTED" call dayz_rollingMessages;};
+
+{
+ if (typeName _x == "ARRAY") then {
+ _storedVehicles set [count _storedVehicles,_x select 1];
+ };
+} count vg_vehicleList;
+
+_gearCount = {
+ private ["_counter"];
+ _counter = 0;
+ {_counter = _counter + _x;} count _this;
+ _counter
+};
+
+if (_isLimitArray) then {
+ {
+ _typeName = _x select 0;
+ _limit = _x select 1;
+ if (typeName _x == "ARRAY") then {
+ if (_typeOf isKindOf _typeName) then {
+ {
+ if (_x isKindOf _typeName) then {_matchedCount = _matchedCount +1};
+ if (_matchedCount >= _limit) then {_overLimit = true;};
+ } count _storedVehicles;
+ };
+ };
+ if (_overLimit) exitWith {};
+ } count vg_limit;
+} else {
+ if (count _storedVehicles >= vg_limit) then {_overLimit = true;};
+};
+
+if (_overLimit) exitWith {
+ if (_isLimitArray) then {
+ systemChat localize "STR_CL_VG_LIMIT_ARRAY";
+ } else {
+ systemChat localize "STR_CL_VG_LIMIT_NUMBER";
+ };
+};
+
+vg_vehicleList = nil;
+
+_woGear = _this select 0;
+closeDialog 0;
+if (!vg_storeWithGear && !_woGear) exitWith {localize "STR_CL_VG_NOSTOREWITHGEAR" call dayz_rollingMessages;};
+
+_charID = _vehicle getVariable ["CharacterID","0"];
+_vehicleID = _vehicle getVariable ["ObjectID","0"];
+_vehicleUID = _vehicle getVariable ["ObjectUID","0"];
+_weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount;
+_magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount;
+_backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount;
+_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount);
+
+if (_vehicleID == "1" || _vehicleUID == "1") exitWith {localize "STR_CL_VG_STORE_MISSION" call dayz_rollingMessages;};
+if (isNull DZE_myVehicle || !local DZE_myVehicle) exitWith {localize "STR_EPOCH_PLAYER_245" call dayz_rollingMessages;};
+
+_hasKey = false;
+
+_items = items player;
+dayz_myBackpack = unitBackpack player;
+
+if (!isNull dayz_myBackpack) then {
+ _backPackGear = (getWeaponCargo dayz_myBackpack) select 0;
+ _items = _items + _backPackGear;
+};
+
+if (_charID != "0") then {
+ {
+ if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in DZE_itemKeys) then {
+ if (str(getNumber(configFile >> "CfgWeapons" >> _x >> "keyid")) == _charID) then {
+ _keyName = _x;
+ _hasKey = true;
+ };
+ };
+ } count _items;
+} else {
+ if (vg_store_keyless_vehicles) then {
+ _hasKey = true;
+ };
+};
+
+if (vg_requireKey && {!_hasKey}) exitWith {localize "STR_CL_VG_REQUIRE_KEY" call dayz_rollingMessages;};
+
+_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName");
+
+{
+ if (_typeOf isKindOf (_x select 0)) exitWith {_amount = _x select 1};
+} forEach vg_price;
+
+if (_cargoAmount > 0) then {_amount = _amount + (_cargoAmount * vg_pricePer);};
+
+if (!isNil "sk_dualCurrency") then {_amount = if (z_singleCurrency) then {_amount * 10} else {_amount};};
+
+/*
+_playerNear = {isPlayer _x && (_x != player)} count (([_vehicle] call FNC_GetPos) nearEntities ["CAManBase", 15]) > 0;
+if (_playerNear) exitWith {localize "STR_CL_VG_PLAYERNEARVEHICLE" call dayz_rollingMessages;};
+*/
+
+if (count (crew _vehicle) > 0) exitWith {localize "STR_CL_VG_PLAYERINVEHICLE" call dayz_rollingMessages;};
+
+_enoughMoney = false;
+_moneyInfo = [false,[],[],[],0];
+
+if (Z_SingleCurrency) then {
+ _wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0];
+ _enoughMoney = (_wealth >= _amount);
+} else {
+ Z_Selling = false;
+ if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle};
+ _moneyInfo = _amount call Z_canAfford;
+ _enoughMoney = _moneyInfo select 0;
+};
+
+_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault};
+
+if (!_success && {_enoughMoney}) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"};
+
+if (_enoughMoney) then {
+ _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault};
+ if (_success) then {
+ if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];};
+
+ [_vehicle,true] call local_lockUnlock;
+ DZE_myVehicle = objNull;
+
+ PVDZE_storeVehicle = if (vg_tiedToPole) then {
+ _plotCheck = [player,false] call FNC_find_plots;
+ _ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID};
+ [_vehicle,player,_woGear,_ownerPUID]
+ } else {
+ [_vehicle,player,_woGear]
+ };
+
+ publicVariableServer "PVDZE_storeVehicle";
+ waitUntil {!isNil "PVDZE_storeVehicleResult"};
+
+ PVDZE_storeVehicle = nil;
+ PVDZE_storeVehicleResult = nil;
+
+ format[localize "STR_CL_VG_VEHICLE_STORED",_name] call dayz_rollingMessages;
+ if (vg_removeKey && {_charID != "0"}) then {
+ if (_keyName in (items player)) then {
+ [player,_keyName,1] call BIS_fnc_invRemove;
+ } else {
+ private ["_weparray", "_qtyarray", "_arraycnt","_newwepqty","_newwep","_newarray","_cntarray","_weapon","_weaponqty"];
+
+ _weparray = [];
+ _qtyarray = [];
+ _arraycnt = -1;
+ _backPackGear = getWeaponCargo dayz_myBackpack;
+
+ {
+ _arraycnt = _arraycnt + 1;
+ if (_x == _keyName) then {
+ } else {
+ _newwep = (_backPackGear select 0) select _arraycnt;
+ _newwepqty = (_backPackGear select 1) select _arraycnt;
+
+ _weparray set [count _weparray, _newwep];
+ _qtyarray set [count _qtyarray,_newwepqty];
+ };
+ } forEach (_backPackGear select 0);
+
+ _newarray = [];
+ _newarray = [_weparray] + [_qtyarray];
+
+ clearWeaponCargoGlobal dayz_myBackpack;
+
+ _cntarray = count _weparray;
+
+ for "_i" from 0 to (_cntarray-1) do {
+ _weapon = (_newarray select 0) select _i;
+ _weaponqty = (_newarray select 1) select _i;
+ dayz_myBackpack addWeaponCargoGlobal [_weapon,_weaponqty];
+ };
+ };
+ };
+ } else {
+ systemChat localize "STR_EPOCH_TRADE_DEBUG";
+ };
+} else {
+ _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency};
+ if (Z_SingleCurrency) then {
+ systemChat format[localize "STR_CL_VG_NEED_COINS",[_amount] call BIS_fnc_numberText,_itemText,_name];
+ } else {
+ systemChat format[localize "STR_CL_VG_NEED_BRIEFCASES",_itemText,_name];
+ };
+};
diff --git a/SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf b/SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf
new file mode 100644
index 000000000..9b752779e
--- /dev/null
+++ b/SQF/dayz_code/actions/virtualGarage/vehicleInfo.sqf
@@ -0,0 +1,110 @@
+// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/)
+// Rewritten by salival (https://github.com/oiad)
+
+private ["_backPackCount","_backPackSlots","_cargoAmount","_control","_counter","_DateStored","_formattedText","_index","_inventory","_localVehicle","_magazineCount","_magazineSlots","_name","_picture","_price","_typeOf","_vehicle","_weaponSlots","_weaponsCount","_MaintainDays","_DateMaintained"];
+
+disableSerialization;
+
+_control = (_this select 0) select 0;
+_index = (_this select 0) select 1;
+_localVehicle = typeName (vg_vehicleList select _index) == "OBJECT";
+_DateMaintained = "";
+_MaintainDays = -1;
+_gearCount = {
+ private ["_counter"];
+ _counter = 0;
+ {_counter = _counter + _x;} count _this;
+ _counter;
+};
+
+if (_localVehicle) then {
+ _vehicle = vg_vehicleList select _index;
+ _typeOf = typeOf _vehicle;
+ _weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount;
+ _magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount;
+ _backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount;
+ ctrlShow[2852,false]; // getVehicle
+ ctrlShow[2850,true]; // storeVehicle
+ ctrlShow[2851,true]; // storeVehicleWithGear
+} else {
+ _vehicle = (vg_vehicleList select _index) select 1;
+ _inventory = (vg_vehicleList select _index) select 2;
+ _DateStored = (vg_vehicleList select _index) select 4;
+ _DateMaintained = (vg_vehicleList select _index) select 5;
+ _MaintainDays = (vg_vehicleList select _index) select 6;
+ _typeOf = _vehicle;
+ _weaponsCount = _inventory select 0;
+ _magazineCount = _inventory select 1;
+ _backPackCount = _inventory select 2;
+
+ ctrlShow[2852,true]; // getVehicle
+ ctrlShow[2850,false]; // storeVehicle
+ ctrlShow[2851,false]; // storeVehicleWithGear
+};
+
+_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons");
+_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines");
+_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks");
+_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName");
+_picture = getText (configFile >> 'CfgVehicles' >> _typeOf >> 'picture');
+
+_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount);
+
+if (_localVehicle) then {
+ {
+ if (_typeOf isKindOf (_x select 0)) exitWith {_price = _x select 1;};
+ } forEach vg_price;
+ if (_cargoAmount > 0) then {
+ _price = _price + (_cargoAmount * vg_pricePer);
+ ctrlShow[2850,false];
+ } else {
+ ctrlShow[2851,false];
+ };
+ _price = if (_price == 0) then {localize "strwffree"} else {
+ if (!isNil "sk_dualCurrency") then {_price = if (z_singleCurrency) then {_price * 10} else {_price};};
+ if (z_singleCurrency) then {
+ format ["%1 %2",[_price] call BIS_fnc_numberText,currencyName]
+ } else {
+ [_price,true] call z_calcCurrency
+ };
+ };
+};
+
+_formattedText = format [
+ "![]()
" +
+ "%2: %3
" +
+ "%4: %5
" +
+ "%6:
%13/%10
%14/%11
%15/%12
",
+ _picture,
+ localize "STR_EPOCH_NAME",
+ _name,
+ localize "STR_EPOCH_CLASS",
+ _typeOf,
+ localize "STR_EPOCH_CARGO_SPACE",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa",
+ _weaponSlots,
+ _magazineSlots,
+ _backPackSlots,
+ _weaponsCount,
+ _magazineCount,
+ _backPackCount
+];
+
+if (_localVehicle) then {_formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_PRICE",_price];};
+if (!_localVehicle) then {
+ if (_DateStored != "old") then {
+ _formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_STOREDATE",_DateStored];
+ if (_MaintainDays >= 0) then {
+ _formattedText = _formattedText + format ["%1: %2
%3: %4
",localize "STR_CL_VG_MAINTAINDATE",_DateMaintained,localize "STR_CL_VG_MAINTAININTERVAL",_MaintainDays];
+ };
+ } else {
+ _formattedText = _formattedText + format ["%1: %2
",localize "STR_CL_VG_STOREDATE",localize "STR_CL_VG_STOREDATE_INVALID"];
+ };
+};
+
+((findDisplay 2800) displayCtrl 2803) ctrlSetStructuredText parseText _formattedText;
+
+ctrlShow [2803,true];
+ctrlShow [2830,true];
diff --git a/SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf b/SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf
new file mode 100644
index 000000000..12a6fdca3
--- /dev/null
+++ b/SQF/dayz_code/actions/virtualGarage/virtualGarage.sqf
@@ -0,0 +1,64 @@
+// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/)
+// Rewritten by salival (https://github.com/oiad)
+
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+private ["_class","_control","_displayName","_heliPad","_isNearPlot","_itemText","_localVehicles","_plotCheck","_storedVehicles","_vgDisplCtl"];
+disableSerialization;
+
+vg_hasRun = false;
+createDialog "virtualGarage";
+
+{ctrlShow [_x,false]} count [2803,2830,2850,2851,2852,2853];
+
+_plotCheck = [player,false] call FNC_find_plots;
+_isNearPlot = (_plotCheck select 1) > 0;
+
+PVDZE_queryVehicle = if (vg_tiedToPole) then {
+ [player,if (_isNearPlot) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID}]
+} else {
+ [player]
+};
+
+publicVariableServer "PVDZE_queryVehicle";
+waitUntil {!isNil "PVDZE_queryVehicleResult"};
+
+_storedVehicles = PVDZE_queryVehicleResult;
+PVDZE_queryVehicle = nil;
+PVDZE_queryVehicleResult = nil;
+
+_localVehicles = ([player] call FNC_getPos) nearEntities [["Air","LandVehicle","Ship"],Z_VehicleDistance];
+_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {player},vg_heliPads,if (_isNearPlot) then {DZE_maintainRange} else {Z_VehicleDistance}];
+
+if (count _heliPad > 0 && {_isNearPlot}) then {ctrlShow[2853,true];};
+
+_control = ((findDisplay 2800) displayCtrl 2802);
+lbClear _control;
+
+if (count _storedVehicles == 0 && {isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}}) exitWith {ctrlSetText[2811,localize "STR_CL_VG_NO_VEHICLES"];};
+
+vg_vehicleList = [];
+
+{
+ _displayName = getText(configFile >> "CfgVehicles" >> (_x select 1) >> "displayName");
+ _control lbAdd _displayName;
+ _control lbSetData [(lbSize _control)-1,str(_x)];
+ vg_vehicleList set [count vg_vehicleList,_x];
+} count _storedVehicles;
+
+{
+ if (!isNull DZE_myVehicle && {local DZE_myVehicle} && {alive DZE_myVehicle} && {DZE_myVehicle == _x}) then {
+ _class = typeOf _x;
+ _displayName = getText(configFile >> "CfgVehicles" >> _class >> "displayName");
+ _control lbAdd _displayName;
+ _control lbSetData [(lbSize _control)-1,_class];
+ _control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];
+ vg_vehicleList set [count vg_vehicleList,_x];
+ };
+} count _localVehicles;
+
+ctrlShow[2810,false];
+ctrlShow[2811,false];
+
+ctrlSetText [2804, format ["%1 (%2 %3)",localize "STR_CL_VG_YOUR_VEHICLES",count (_storedVehicles),localize "STR_CL_VG_VEHICLES"]];
diff --git a/SQF/dayz_code/actions/vkc/vehicleInfo.sqf b/SQF/dayz_code/actions/vkc/vehicleInfo.sqf
new file mode 100644
index 000000000..e430206b3
--- /dev/null
+++ b/SQF/dayz_code/actions/vkc/vehicleInfo.sqf
@@ -0,0 +1,68 @@
+private ["_backPackCount","_backPackCount_raw","_backPackSlots","_formattedText","_gearCount","_magazineCount","_magazineCount_raw","_magazineSlots","_name","_picture","_price","_text","_typeOf","_weaponSlots","_weaponsCount","_weaponsCount_raw"];
+
+_gearCount = {
+ private ["_counter"];
+ _counter = 0;
+ {_counter = _counter + _x;} count _this;
+ _counter
+};
+
+if (vkc_action == "claim") then {
+ ctrlShow[4850,true];
+ _text = localize "STR_CL_VKC_CLAIM";
+ _price = vkc_claimPrice;
+} else {
+ ctrlShow[4851,true];
+ _text = localize "STR_CL_VKC_CHANGE";
+ _price = vkc_changePrice;
+};
+
+_typeOf = typeOf vkc_cursorTarget;
+_weaponsCount_raw = getWeaponCargo vkc_cursorTarget;
+_magazineCount_raw = getMagazineCargo vkc_cursorTarget;
+_backPackCount_raw = getBackpackCargo vkc_cursorTarget;
+
+_weaponSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxWeapons");
+_magazineSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportMaxMagazines");
+_backPackSlots = getNumber(configFile >> "CfgVehicles" >> _typeOf >> "transportmaxbackpacks");
+_name = getText(configFile >> "CfgVehicles" >> _typeOf >> "displayName");
+_picture = getText(configFile >> 'CfgVehicles' >> _typeOf >> 'picture');
+
+_weaponsCount = (_weaponsCount_raw select 1) call _gearCount;
+_magazineCount = (_magazineCount_raw select 1) call _gearCount;
+_backPackCount = (_backPackCount_raw select 1) call _gearCount;
+
+if (!isNil "sk_dualCurrency") then {if (z_singleCurrency) then {_price = _price * 10};};
+
+_price = if (z_singleCurrency) then {
+ format ["%1 %2",[_price] call BIS_fnc_numberText,currencyName]
+} else {
+ [_price,true] call z_calcCurrency
+};
+_formattedText = format [
+ "![]()
" +
+ "%2: %3
" +
+ "%4: %5
" +
+ "%6:
%13/%10
%14/%11
%15/%12
" +
+ "Price to %16: %17
",
+ _picture,
+ localize "STR_EPOCH_NAME",
+ _name,
+ localize "STR_EPOCH_CLASS",
+ _typeOf,
+ localize "STR_EPOCH_CARGO_SPACE",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_weapons_white.paa",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_items_white.paa",
+ "\z\addons\dayz_code\gui\gear\gear_ui_slots_backPacks_white.paa",
+ _weaponSlots,
+ _magazineSlots,
+ _backPackSlots,
+ _weaponsCount,
+ _magazineCount,
+ _backPackCount,
+ toLower (_text),
+ _price
+];
+
+((findDisplay 4800) displayCtrl 4803) ctrlSetStructuredText parseText _formattedText;
+ctrlShow [4803,true];
diff --git a/SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf b/SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf
new file mode 100644
index 000000000..dd003f4c0
--- /dev/null
+++ b/SQF/dayz_code/actions/vkc/vehicleKeyChanger.sqf
@@ -0,0 +1,175 @@
+/*
+ Vehicle Key Changer by salival (https://github.com/oiad)
+
+ This version adds support for both single currency and gems (from the epoch 1.0.6 update) as well as the original epoch briefcase currency system.
+ Instead of pricing things like the original way, prices are now done on a "worth" similar to how coins are done. The price value of items are below.
+ If you are using coins, I would recommend using the _currencyModifier variable since coins typically are 10x the value of briefcase based currency (1 brief == 100,000 coins)
+
+ 1 silver = 1 worth
+ 1 10oz silver = 10 worth
+ 1 gold = 100 worth
+ 1 10oz gold = 1,000 worth
+ 1 briefcase = 10,000 worth
+
+ Please see dayz_code\configVariables.sqf for the value of gems (DZE_GemWorthArray) and their relevant worth if they are enabled.
+*/
+
+if (dayz_actionInProgress) exitWith {localize "str_player_actionslimit" call dayz_rollingMessages;};
+dayz_actionInProgress = true;
+
+disableSerialization;
+private ["_amount","_characterID","_control","_currencyModifier","_enoughMoney","_exit","_foundPos","_index","_itemText","_message","_moneyInfo","_name","_playerNear","_position","_success","_typeOf","_vehicleID","_vehicleUID","_wealth"];
+
+vkc_cursorTarget = (_this select 3) select 0;
+_characterID = (_this select 3) select 1;
+vkc_action = (_this select 3) select 2;
+
+vkc_isOk = false;
+
+player removeAction s_player_claimVehicle;
+s_player_claimVehicle = 1;
+player removeAction s_player_copyToKey;
+s_player_copyToKey = 1;
+
+_exit = {
+ vkc_action = nil;
+ vkc_keyList = nil;
+ vkc_keyName = nil;
+ vkc_charID = nil;
+ vkc_isOk = nil;
+ vkc_cursorTarget = nil;
+ s_player_copyToKey = -1;
+ s_player_claimVehicle = -1;
+ dayz_actionInProgress = false;
+};
+
+if (isNull vkc_cursorTarget) exitWith {call _exit; systemChat localize "str_cursorTargetNotFound";};
+
+_playerNear = {isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities ["CAManBase", 10]) > 1;
+if (_playerNear) exitWith {call _exit; localize "str_pickup_limit_5" call dayz_rollingMessages;};
+
+if !(vkc_cursorTarget isKindOf "Air" || {vkc_cursorTarget isKindOf "LandVehicle"} || {vkc_cursorTarget isKindOf "Ship"}) exitWith {call _exit; localize "STR_CL_VKC_FAIL_CURSOR" call dayz_rollingMessages;};
+
+if (isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}) exitWith {call _exit; localize "str_epoch_player_245" call dayz_rollingMessages;};
+
+_vehicleID = vkc_cursorTarget getVariable ["ObjectID","0"];
+_vehicleUID = vkc_cursorTarget getVariable ["ObjectUID","0"];
+
+_typeOf = typeOf vkc_cursorTarget;
+_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName");
+
+if ((_vehicleID == "0" && {_vehicleUID == "0"}) || {_vehicleID == "1" || _vehicleUID == "1"}) exitWith {call _exit; format[localize "STR_CL_VKC_FAIL_SUPPORT",_name] call dayz_rollingMessages;};
+
+if (_vehicleUID == "0") then {
+ _vehicleUID = "";
+ {
+ _x = _x * 10;
+ if (_x < 0) then {_x = _x * -10};
+ _vehicleUID = _vehicleUID + str(round(_x));
+ } forEach getPosATL vkc_cursorTarget;
+ _vehicleUID = _vehicleUID + str(round((getDir vkc_cursorTarget) + time));
+ vkc_cursorTarget setVariable["ObjectUID",_vehicleUID,true];
+};
+
+vkc_keyList = call epoch_tempKeys;
+
+if (vkc_action == "change") then {
+ _amount = vkc_changePrice;
+ _message = [localize "STR_CL_VKC_CHANGE_MESSAGE_1",localize "STR_CL_VKC_CHANGE_MESSAGE_2",localize "STR_CL_VKC_CHANGE_MESSAGE_3"];
+ _foundPos = (vkc_keyList select 0) find _characterID;
+ if (_foundPos >= 0) then {
+ vkc_keyList set [0,(vkc_keyList select 0) - [(vkc_keyList select 0) select _foundPos]];
+ vkc_keyList set [1,(vkc_keyList select 1) - [(vkc_keyList select 1) select _foundPos]];
+ vkc_keyList set [2,(vkc_keyList select 2) - [(vkc_keyList select 2) select _foundPos]];
+ } else {
+ vkc_keyList = [[],[]];
+ };
+} else {
+ _amount = vkc_claimPrice;
+ _message = [localize "STR_CL_VKC_CLAIM_MESSAGE_1",localize "STR_CL_VKC_CLAIM_MESSAGE_2",localize "STR_CL_VKC_CLAIM_MESSAGE_3"];
+};
+
+if (count (vkc_keyList select 0) == 0) exitWith {systemChat localize "STR_CL_VKC_FAIL_KEYS"; call _exit;};
+
+if (!isNil "sk_dualCurrency") then {if (z_singleCurrency) then {_amount = _amount * 10};};
+
+_itemText = if (Z_SingleCurrency) then {format ["%1 %2",[_amount] call BIS_fnc_numberText,CurrencyName]} else {[_amount,true] call z_calcCurrency};
+
+createDialog "vkc";
+{ctrlShow [_x,false]} count [4803,4850,4851];
+
+call vkc_vehicleInfo;
+
+_control = ((findDisplay 4800) displayCtrl 4802);
+lbClear _control;
+
+{
+ _index = _control lbAdd ((vkc_keyList select 1) select _forEachIndex);
+ _control lbSetPicture [_index,getText(configFile >> "CfgWeapons" >> ((vkc_keyList select 2) select _index) >> "picture")];
+} forEach (vkc_keyList select 0);
+
+_control lbSetCurSel 0;
+
+waitUntil {!dialog};
+
+if (!vkc_isOk) exitWith {call _exit;};
+
+if (isNull DZE_myVehicle || {!(alive DZE_myVehicle)} || {!(local DZE_myVehicle)}) exitWith {call _exit; localize "str_epoch_player_245" call dayz_rollingMessages;};
+
+_enoughMoney = false;
+_moneyInfo = [false,[],[],[],0];
+
+if (Z_SingleCurrency) then {
+ _wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0];
+ _enoughMoney = (_wealth >= _amount);
+} else {
+ Z_Selling = false;
+ if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle};
+ _moneyInfo = _amount call Z_canAfford;
+ _enoughMoney = _moneyInfo select 0;
+};
+
+_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault};
+
+if (!_success && {_enoughMoney}) exitWith {call _exit;systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"};
+
+if (_enoughMoney) then {
+ _success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault};
+ if (_success) then {
+ if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];};
+
+ vkc_cursorTarget setVehicleLock "LOCKED";
+ player playActionNow "Medic";
+
+ _position = [vkc_cursorTarget] call FNC_GetPos;
+
+ [_typeOf,objNull] call fn_waitForObject;
+ dze_waiting = nil;
+
+ PVDZE_veh_Upgrade = [vkc_cursorTarget,[getDir vkc_cursorTarget,_position],_typeOf,vkc_charID,player,dayz_authKey,if (vkc_action == "change") then {"changed the key for"} else {"claimed"}];
+ publicVariableServer "PVDZE_veh_Upgrade";
+
+ localize "STR_CL_VKC_WAIT" call dayz_rollingMessages;
+
+ waitUntil {!isNil "dze_waiting"};
+
+ if (dze_waiting == "fail") then {
+ systemChat format[localize "STR_CL_VKC_FAIL_UPGRADE",_name];
+ if (z_singleCurrency) then {
+ player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),_wealth,true];
+ } else {
+ Z_Selling = true;
+ _success = [_amount,0,false,0,[],[],false] call Z_returnChange;
+ };
+ } else {
+ {player reveal _x;} count (player nearEntities [["LandVehicle"],10]);
+ [format[_message select 0,_name,vkc_keyName],1] call dayz_rollingMessages;
+ };
+ } else {
+ systemChat localize "STR_EPOCH_TRADE_DEBUG";
+ };
+} else {
+ systemChat format[localize "STR_CL_VKC_FAIL_MONEY",_itemText,_message select 1,_name];
+};
+
+call _exit;
diff --git a/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf
new file mode 100644
index 000000000..8cbbd93c7
--- /dev/null
+++ b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_addon.sqf
@@ -0,0 +1,105 @@
+disableSerialization;
+local _control = _this select 0;
+local _button = _this select 1;
+local _parent = findDisplay 106;
+
+if (carryClick) then {carryClick = false;};
+
+if (_button == 1) then {
+ if (animationState player in ["ainjppnemstpsnonwnondnon_rolltofront","amovppnemstpsnonwnondnon_healed"]) exitWith {
+ //Prevent bypassing unconscious wake up animation with bandage or other right click actions
+ localize "str_player_actionslimit" call dayz_rollingMessages;
+ };
+
+ local _group = _parent displayCtrl 6902;
+ local _pos = ctrlPosition _group;
+ local _item = gearSlotData _control;
+
+ if ( //No right click action
+ (!DZE_SelfTransfuse && {_item in ["ItemBloodbag","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]})
+ ) exitWith {};
+
+ if (mouseOverCarry) then {
+ _item = DayZ_onBack;
+ carryClick = true;
+ };
+
+ _pos set [0,((_this select 2) + 0.46)];
+ _pos set [1,((_this select 3) + 0.07)];
+
+ local _conf = configFile >> "cfgMagazines" >> _item;
+ if (!isClass _conf) then {
+ _conf = configFile >> "cfgWeapons" >> _item;
+ };
+ local _name = getText(_conf >> "displayName");
+
+ local _cfgActions = _conf >> "ItemActions";
+ local _numActions = (count _cfgActions);
+ local _height = 0;
+ if (!dayz_groupSystem && {_item == "ItemRadio"}) then {_numActions = 1;}; // Used to bypass the group action when not enabled.
+
+ local _i = 0;
+ //Populate Menu
+ while {_i <= (_numActions - 1)} do {
+ local _menu = _parent displayCtrl (1600 + _i);
+ _menu ctrlShow true;
+ local _config = (_cfgActions select _i);
+ local _type = getText (_config >> "text");
+ local _script = getText (_config >> "script");
+ local _outputOriented = getNumber (_config >> "outputOriented") == 1;
+ _height = _height + (0.025 * safezoneH);
+ local _compile = format["_id = '%2' %1;",_script,_item];
+ uiNamespace setVariable ['uiControl', _control];
+ if (_outputOriented) then {
+ /*
+ This flag means that the action is output oriented
+ the output class will then be transferred to the script
+ and the type used for the name
+ */
+ local _array = getArray (_config >> "output");
+ local _outputClass = _array select 0;
+ local _outputType = _array select 1;
+ _name = getText (configFile >> _outputType >> _outputClass >> "displayName");
+ _compile = format["_id = ['%2',%3] %1;",_script,_item,_array];
+ };
+
+ _menu ctrlSetText format[_type,_name];
+ _menu ctrlSetEventHandler ["ButtonClick",_compile];
+ _i = _i + 1;
+ };
+
+ local _isKey = ((["ItemKey",_item] call fnc_inString) && (_item != "ItemKeyKit"));
+
+ {
+ local _classname = _x select 0;
+ local _text = _x select 1;
+ local _execute = _x select 2;
+ local _condition = _x select 3;
+
+ if ((_item == _classname || (_isKey && (_className == "ItemKey"))) && (call compile _condition)) then {
+ local _menu = _parent displayCtrl (1600 + _numActions);
+ _menu ctrlShow true;
+ _height = _height + (0.025 * safezoneH);
+ uiNamespace setVariable ['uiControl', _control];
+ _menu ctrlSetText _text;
+ if (_isKey && (_className == "ItemKey")) then {
+ if (count _this > 4) then {
+ local _option = _x select 4;
+ _menu ctrlSetEventHandler ["ButtonClick",format ["[%1,%2] %3",str _item,_option,_execute]];
+ };
+ } else {
+ _menu ctrlSetEventHandler ["ButtonClick",_execute];
+ };
+ _numActions = _numActions + 1;
+ };
+ } forEach DZE_CLICK_ACTIONS;
+
+ _pos set [3,_height];
+
+ //hint format["Obj: %1 \nHeight: %2\nPos: %3",_item,_height,_grpPos];
+
+ _group ctrlShow true;
+ ctrlSetFocus _group;
+ _group ctrlSetPosition _pos;
+ _group ctrlCommit 0;
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/compile/ui_selectSlot.sqf b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_vanilla.sqf
similarity index 62%
rename from SQF/dayz_code/compile/ui_selectSlot.sqf
rename to SQF/dayz_code/compile/Rightclicks/ui_selectSlot_vanilla.sqf
index 04740e5bf..e33d457e2 100644
--- a/SQF/dayz_code/compile/ui_selectSlot.sqf
+++ b/SQF/dayz_code/compile/Rightclicks/ui_selectSlot_vanilla.sqf
@@ -1,8 +1,7 @@
-//private ["_control","_button","_parent","_group","_pos","_item","_conf","_name","_cfgActions","_numActions","_height","_menu","_config","_type","_script","_outputOriented","_compile","_array","_outputClass","_outputType"];
disableSerialization;
-_control = _this select 0;
-_button = _this select 1;
-_parent = findDisplay 106;
+local _control = _this select 0;
+local _button = _this select 1;
+local _parent = findDisplay 106;
if (carryClick) then {carryClick = false;};
@@ -12,12 +11,10 @@ if (_button == 1) then {
localize "str_player_actionslimit" call dayz_rollingMessages;
};
- private ["_conf","_name","_compile","_height","_item"];
- _group = _parent displayCtrl 6902;
-
- _pos = ctrlPosition _group;
-
- _item = gearSlotData _control;
+ local _group = _parent displayCtrl 6902;
+ local _pos = ctrlPosition _group;
+ local _item = gearSlotData _control;
+
if ( //No right click action
(!DZE_SelfTransfuse && {_item in ["ItemBloodbag","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"]})
) exitWith {};
@@ -30,28 +27,28 @@ if (_button == 1) then {
_pos set [0,((_this select 2) + 0.46)];
_pos set [1,((_this select 3) + 0.07)];
- _conf = configFile >> "cfgMagazines" >> _item;
+ local _conf = configFile >> "cfgMagazines" >> _item;
if (!isClass _conf) then {
_conf = configFile >> "cfgWeapons" >> _item;
};
- _name = getText(_conf >> "displayName");
+ local _name = getText(_conf >> "displayName");
- _cfgActions = _conf >> "ItemActions";
- _numActions = (count _cfgActions);
- _height = 0;
+ local _cfgActions = _conf >> "ItemActions";
+ local _numActions = (count _cfgActions);
+ local _height = 0;
if (!dayz_groupSystem && {_item == "ItemRadio"}) then {_numActions = 1;}; // Used to bypass the group action when not enabled.
+ local _i = 0;
//Populate Menu
- for "_i" from 0 to (_numActions - 1) do
- {
- _menu = _parent displayCtrl (1600 + _i);
+ while {_i <= (_numActions - 1)} do {
+ local _menu = _parent displayCtrl (1600 + _i);
_menu ctrlShow true;
- _config = (_cfgActions select _i);
- _type = getText (_config >> "text");
- _script = getText (_config >> "script");
- _outputOriented = getNumber (_config >> "outputOriented") == 1;
+ local _config = (_cfgActions select _i);
+ local _type = getText (_config >> "text");
+ local _script = getText (_config >> "script");
+ local _outputOriented = getNumber (_config >> "outputOriented") == 1;
_height = _height + (0.025 * safezoneH);
- _compile = format["_id = '%2' %1;",_script,_item];
+ local _compile = format["_id = '%2' %1;",_script,_item];
uiNamespace setVariable ['uiControl', _control];
if (_outputOriented) then {
/*
@@ -59,15 +56,16 @@ if (_button == 1) then {
the output class will then be transferred to the script
and the type used for the name
*/
- _array = getArray (_config >> "output");
- _outputClass = _array select 0;
- _outputType = _array select 1;
+ local _array = getArray (_config >> "output");
+ local _outputClass = _array select 0;
+ local _outputType = _array select 1;
_name = getText (configFile >> _outputType >> _outputClass >> "displayName");
_compile = format["_id = ['%2',%3] %1;",_script,_item,_array];
};
_menu ctrlSetText format[_type,_name];
_menu ctrlSetEventHandler ["ButtonClick",_compile];
+ _i = _i + 1;
};
_pos set [3,_height];
@@ -77,4 +75,4 @@ if (_button == 1) then {
ctrlSetFocus _group;
_group ctrlSetPosition _pos;
_group ctrlCommit 0;
-};
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/compile/building_spawnZombies.sqf b/SQF/dayz_code/compile/building_spawnZombies.sqf
index 8e7be6f60..865a9e981 100644
--- a/SQF/dayz_code/compile/building_spawnZombies.sqf
+++ b/SQF/dayz_code/compile/building_spawnZombies.sqf
@@ -41,4 +41,11 @@ if (!([_objPos] call DZE_SafeZonePosCheck)) then {
};
} forEach _positions;
};
+
+ // Bloodsuckers
+ if (DZE_Bloodsuckers) then {
+ if ((dayz_spawnBloodsuckers < DZE_BloodsuckersMaxLocal) && {dayz_CurrentNearBloodsuckers < DZE_BloodsuckersMaxNear} && {dayz_currentGlobalBloodsuckers < DZE_BloodsuckersMaxGlobal} && {_type in DZE_BloodsuckerBuildings} && {(random 1) < DZE_BloodsuckerChance}) then {
+ _objPos call mutant_generate;
+ };
+ };
};
diff --git a/SQF/dayz_code/compile/fn_selfActions.sqf b/SQF/dayz_code/compile/fn_selfActions.sqf
index 43de6709b..13a19bdf2 100644
--- a/SQF/dayz_code/compile/fn_selfActions.sqf
+++ b/SQF/dayz_code/compile/fn_selfActions.sqf
@@ -128,9 +128,28 @@ if (_inVehicle) then {
{DZE_myVehicle removeAction _x} count s_player_lockUnlockInside;s_player_lockUnlockInside = [];
s_player_lockUnlockInside_ctrl = -1;
};
+
+ //Allows to open garage doors from the vehicle, but may negatively impact performance
+ if (DZE_GarageDoor_Opener) then {
+ local _doors = nearestObjects [DZE_myVehicle, DZE_GarageDoors, DZE_GarageDoor_Radius];
+
+ if (count _doors > 0 && {driver DZE_myVehicle == player}) then {
+ local _hasAccess = [player,_doors select 0] call FNC_check_access;
+ if (s_player_gdoor_opener_ctrl < 0 && ((_hasAccess select 0) || (_hasAccess select 2) || (_hasAccess select 3) || (_hasAccess select 4))) then {
+ local _door = DZE_myVehicle addAction [format["%1",localize "STR_CL_GDO_GARAGE"],"\z\addons\dayz_code\actions\garageDoorOpener.sqf",_doors select 0, 1, false, true];
+ s_player_gdoor_opener set [count s_player_gdoor_opener,_door];
+ s_player_gdoor_opener_ctrl = 1;
+ };
+ } else {
+ {DZE_myVehicle removeAction _x} count s_player_gdoor_opener;s_player_gdoor_opener = [];
+ s_player_gdoor_opener_ctrl = -1;
+ };
+ };
} else {
{DZE_myVehicle removeAction _x} count s_player_lockUnlockInside;s_player_lockUnlockInside = [];
s_player_lockUnlockInside_ctrl = -1;
+ {DZE_myVehicle removeAction _x} count s_player_gdoor_opener;s_player_gdoor_opener = [];
+ s_player_gdoor_opener_ctrl = -1;
};
if (DZE_HeliLift) then {
@@ -215,6 +234,7 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis
local _weaponsPlayer = weapons player;
local _hasCrowbar = "ItemCrowbar" in _itemsPlayer || "MeleeCrowbar" in _weaponsPlayer || dayz_onBack == "MeleeCrowbar";
local _hasToolbox = "ItemToolbox" in _itemsPlayer;
+ local _hasKeymakerskit = "ItemKeyKit" in _itemsPlayer;
local _isAlive = alive _cursorTarget;
local _text = getText (configFile >> "CfgVehicles" >> _typeOfCursorTarget >> "displayName");
local _isPlant = _typeOfCursorTarget in Dayz_plants;
@@ -549,11 +569,12 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis
// Allow Owner to lock and unlock vehicle
if (_player_lockUnlock_crtl) then {
+ local _totalKeys = call epoch_tempKeys;
+ local _temp_keys = _totalKeys select 0;
+ local _temp_keys_names = _totalKeys select 1;
+ local _hasKey = _characterID in _temp_keys;
+
if (s_player_lockUnlock_crtl < 0) then {
- local _totalKeys = call epoch_tempKeys;
- local _temp_keys = _totalKeys select 0;
- local _temp_keys_names = _totalKeys select 1;
- local _hasKey = _characterID in _temp_keys;
local _oldOwner = (_characterID == _uid);
local _unlock = [];
@@ -579,9 +600,18 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis
};
};
};
+ if (DZE_VehicleKey_Changer) then {
+ if (s_player_copyToKey < 0) then {
+ if ((_hasKeymakerskit && _hasKey && !_isLocked && {(count _temp_keys) > 1}) || {_cursorTarget getVariable ["hotwired",false]}) then {
+ s_player_copyToKey = player addAction [format["%1",localize "STR_CL_VKC_CHANGE_ACTION"],"\z\addons\dayz_code\actions\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,if (_cursorTarget getVariable ["hotwired",false]) then {"claim"} else {"change"}],5,false,true];
+ };
+ };
+ };
} else {
{player removeAction _x} count s_player_lockunlock;s_player_lockunlock = [];
s_player_lockUnlock_crtl = -1;
+ player removeAction s_player_copyToKey;
+ s_player_copyToKey = -1;
};
if (DZE_Hide_Body && {_isMan && !_isAlive}) then {
@@ -616,7 +646,7 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis
};
//Allow owner to unlock vault
- if (_isClose && !keypadCancel && {(_typeOfCursorTarget in DZE_LockedStorage) && {_characterID != "0"}}) then {
+ if (_isClose && !keypadCancel && {(_typeOfCursorTarget in (DZE_LockedStorage + DZE_UnLockedStorage)) && {_characterID != "0"}}) then {
if (s_player_unlockvault < 0) then {
local _combi = [];
if (_typeOfCursorTarget in DZE_LockedStorage) then {
@@ -790,22 +820,73 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis
player removeAction s_player_fillgen;
s_player_fillgen = -1;
};
+
+ if (DZE_VehicleKey_Changer) then {
+ if (_hasKeymakerskit && _isVehicle && !_isMan && _isAlive && {_characterID == "0"}) then {
+ if (s_player_claimVehicle < 0) then {
+ _totalKeys = call epoch_tempKeys;
+ if (count (_totalKeys select 0) > 0) then {
+ s_player_claimVehicle = player addAction [format["%1",format[localize "STR_CL_VKC_CLAIM_ACTION",_text]],"\z\addons\dayz_code\actions\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,"claim"],5,false,true];
+ };
+ };
+ } else {
+ player removeAction s_player_claimVehicle;
+ s_player_claimVehicle = -1;
+ };
+ };
- //Towing with tow truck
- /*
- if(_typeOfCursorTarget == "TOW_DZE") then {
- if (s_player_towing < 0) then {
- if(!(_cursorTarget getVariable ["DZEinTow", false])) then {
- s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_ATTACH" "\z\addons\dayz_code\actions\tow_AttachStraps.sqf",_cursorTarget, 0, false, true];
+ if (!_isAlive && _isMan && !_isZombie && {!(_cursorTarget isKindOf "Animal")}) then {
+ if (DZE_Take_Clothes) then {
+ if (!(_cursorTarget getVariable["clothesTaken",false]) && {_typeOfCursorTarget in AllPlayers} && {!(_typeOfCursorTarget in DZE_Disable_Take_Clothes)}) then {
+ if (s_player_clothes < 0) then {
+ s_player_clothes = player addAction [format["%1",localize "STR_CL_TC_TAKE_CLOTHES"],"\z\addons\dayz_code\actions\takeClothes.sqf",_cursorTarget,0, false,true];
+ };
} else {
- s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_DETACH", "\z\addons\dayz_code\actions\tow_DetachStraps.sqf",_cursorTarget, 0, false, true];
+ player removeAction s_player_clothes;
+ s_player_clothes = -1;
+ };
+ };
+
+ if (DZE_Bury_Body) then {
+ local _hasShovel = ("ItemEtool" in _itemsPlayer || "ItemShovel" in _itemsPlayer);
+ if (_hasShovel && !(_cursorTarget getVariable ["bodyButchered",false])) then {
+ if (s_player_bury_human < 0) then {
+ s_player_bury_human = player addAction [format["%1",localize "STR_CL_BA_BURY"],"\z\addons\dayz_code\actions\buryActions.sqf",[_cursorTarget,"bury"],0,false,true];
+ };
+ } else {
+ player removeAction s_player_bury_human;
+ s_player_bury_human = -1;
+ };
+ };
+
+ if (DZE_Butcher_Body) then {
+ if (({_x in ["ItemKnife","ItemKnife5","ItemKnife4","ItemKnife3","ItemKnife2","ItemKnife1"]} count _itemsPlayer > 0) && !(_cursorTarget getVariable ["bodyButchered",false])) then {
+ if (s_player_butcher_human < 0) then {
+ s_player_butcher_human = player addAction [format["%1",localize "STR_CL_BA_BUTCHER"],"\z\addons\dayz_code\actions\buryActions.sqf",[_cursorTarget,"butcher"],0,false,true];
+ };
+ } else {
+ player removeAction s_player_butcher_human;
+ s_player_butcher_human = -1;
};
};
- } else {
- player removeAction s_player_towing;
- s_player_towing = -1;
};
- */
+
+ if (DZE_Virtual_Garage) then {
+ if (_typeOfCursorTarget in vg_List) then {
+ if (s_garage_dialog < 0) then {
+ local _hasAccess = [player,_cursorTarget] call FNC_check_access;
+ local _plotCheck = [player, false] call FNC_find_plots;
+ local _isNearPlot = ((_plotCheck select 1) > 0);
+
+ if ((_isNearPlot && ((_hasAccess select 0) || (_hasAccess select 2) || (_hasAccess select 3) || (_hasAccess select 4))) || !_isNearPlot) then {
+ s_garage_dialog = player addAction [format["%1",localize "STR_CL_VG_VIRTUAL_GARAGE"],"\z\addons\dayz_code\actions\virtualGarage\virtualGarage.sqf",_cursorTarget,3,false,true];
+ };
+ };
+ } else {
+ player removeAction s_garage_dialog;
+ s_garage_dialog = -1;
+ };
+ };
// ZSC
if (Z_singleCurrency) then {
@@ -1079,6 +1160,18 @@ if (!isNull _cursorTarget && {!_inVehicle && !_isPZombie && _canDo && player dis
s_bank_dialog3 = -1;
player removeAction s_player_checkWallet;
s_player_checkWallet = -1;
+ player removeAction s_player_clothes;
+ s_player_clothes = -1;
+ player removeAction s_player_bury_human;
+ s_player_bury_human = -1;
+ player removeAction s_player_butcher_human;
+ s_player_butcher_human = -1;
+ player removeAction s_player_copyToKey;
+ s_player_copyToKey = -1;
+ player removeAction s_player_claimVehicle;
+ s_player_claimVehicle = -1;
+ player removeAction s_garage_dialog;
+ s_garage_dialog = -1;
};
//Dog actions on player self
@@ -1110,4 +1203,4 @@ if (_dogHandle > 0) then {
};
//Monitor
-player setVariable ["selfActions", diag_ticktime, false];
\ No newline at end of file
+player setVariable ["selfActions", diag_ticktime, false];
diff --git a/SQF/dayz_code/compile/local_gutObject.sqf b/SQF/dayz_code/compile/local_gutObject.sqf
index aad00420d..48eed429f 100644
--- a/SQF/dayz_code/compile/local_gutObject.sqf
+++ b/SQF/dayz_code/compile/local_gutObject.sqf
@@ -1,38 +1,43 @@
-private ["_amount","_animalbody","_rawfoodtype","_qty"];
+local _body = _this select 0;
+local _qty = _this select 1;
+local _rawfoodtype = "";
+local _bodyType = typeOf _body;
+local _time = diag_tickTime;
-_animalbody = _this select 0;
-_qty = _this select 1;
-
-if (_animalbody isKindOf "zZombie_base") then {
- _qty = 1;
- _rawfoodtype = "ItemZombieParts";
-} else {
- _rawfoodtype = getText (configFile >> "CfgSurvival" >> "Meat" >> typeOf _animalbody >> "rawfoodtype");
+call {
+ if (_body isKindOf "zZombie_base") exitWith {
+ _qty = 1;
+ _rawfoodtype = "ItemZombieParts";
+ };
+
+ if (_bodyType == "z_bloodsucker") exitWith {
+ _qty = 1;
+ _rawfoodtype = "ItemMutantHeart"; // toolbelt item
+ };
+ // default is animal
+ _rawfoodtype = getText (configFile >> "CfgSurvival" >> "Meat" >> _bodyType >> "rawfoodtype");
};
-if (local _animalbody) then {
+if (local _body) then {
for "_i" from 1 to _qty do {
- _animalbody addMagazine _rawfoodtype;
+ if (_rawfoodtype == "ItemMutantHeart") then {
+ _body addWeapon _rawfoodtype;
+ } else {
+ _body addMagazine _rawfoodtype;
+ };
};
- if (typeOf _animalbody in ["Cock","Hen"]) then {
- _amount = (floor (random 4)) + 2;
+ if (_bodyType in ["Cock","Hen"]) then {
+ local _amount = (floor (random 4)) + 2;
for "_x" from 1 to _amount do {
- _animalbody addMagazine "equip_feathers";
+ _body addMagazine "equip_feathers";
};
};
- [time, _animalbody] spawn {
- _timer = _this select 0;
- _body = _this select 1;
- _pos = getPosATL _body;
- while {(count magazines _body > 0) && (time - _timer < 300)} do {
- uiSleep 5;
- };
- hideBody _body;
-
- uiSleep 10;
- deleteVehicle _body;
- true
+ while {((count magazines _body > 0) || (count weapons _body > 0)) && (diag_tickTime - _time < 300)} do {
+ uiSleep 5;
};
+ hideBody _body;
+ uiSleep 10;
+ deleteVehicle _body;
};
diff --git a/SQF/dayz_code/compile/mutant_findTarget.sqf b/SQF/dayz_code/compile/mutant_findTarget.sqf
new file mode 100644
index 000000000..a5dee71f2
--- /dev/null
+++ b/SQF/dayz_code/compile/mutant_findTarget.sqf
@@ -0,0 +1,29 @@
+/*
+ _localtargets and _remotetargets are set in player_zombieCheck.
+ The bloodsucker will move in the direction of the player assigned as target.
+ Players with a mutant heart on tool belt will not be targeted.
+*/
+
+local _mutant = _this;
+
+if (isNull _mutant) exitWith {objNull}; // Prevent errors if mutant is suddenly deleted
+
+local _localtargets = _mutant getVariable ["localtargets",[]];
+local _remotetargets = _mutant getVariable ["remotetargets",[]];
+local _targets = _localtargets + _remotetargets;
+
+local _target = objNull;
+local _scandist = 200;
+
+{
+ local _skip = (DZE_MutantHeartProtect && {_x hasWeapon "ItemMutantHeart"});
+ if (!_skip) then {
+ local _dist = _x distance _mutant;
+ if (_dist < _scandist) then {
+ _target = _x;
+ _scandist = _dist;
+ };
+ };
+} count _targets;
+
+_target
\ No newline at end of file
diff --git a/SQF/dayz_code/compile/mutant_generate.sqf b/SQF/dayz_code/compile/mutant_generate.sqf
new file mode 100644
index 000000000..ca1278726
--- /dev/null
+++ b/SQF/dayz_code/compile/mutant_generate.sqf
@@ -0,0 +1,16 @@
+// Select random position between 50 and 100 meters away from the building.
+local _pos = [_this, 50, 100, 1] call fn_selectRandomLocation;
+
+if (surfaceIsWater _pos) exitWith { diag_log "Mutant_Generate: Location is in water...abort"; };
+
+// Create mutant
+_agent = createAgent ["z_bloodsucker", _pos, [], 0, "NONE"];
+_agent setDir (random 360);
+_agent setPosATL _pos;
+
+// Add to counts
+dayz_spawnBloodsuckers = dayz_spawnBloodsuckers + 1;
+dayz_CurrentNearBloodsuckers = dayz_CurrentNearBloodsuckers + 1;
+dayz_currentGlobalBloodsuckers = dayz_currentGlobalBloodsuckers + 1;
+
+//diag_log format ["Bloodsucker Counts: Current local - %1, Current near - %2, Current global - %3",dayz_spawnBloodsuckers,dayz_CurrentNearBloodsuckers,dayz_currentGlobalBloodsuckers];
diff --git a/SQF/dayz_code/compile/player_alertZombies.sqf b/SQF/dayz_code/compile/player_alertZombies.sqf
index 8a222e24e..38b1c8b15 100644
--- a/SQF/dayz_code/compile/player_alertZombies.sqf
+++ b/SQF/dayz_code/compile/player_alertZombies.sqf
@@ -1,23 +1,16 @@
-private ["_unit","_distance","_doRun","_pos","_listTalk","_zombie","_50","_localtargets","_remotetargets","_targets","_dis"];
-
-_unit = _this select 0;
-_distance = _this select 1;
-_doRun = _this select 2;
-_pos = _this select 3;
-
-_listTalk = _pos nearEntities ["zZombie_Base",_distance];
+local _unit = _this select 0;
+local _distance = _this select 1;
+local _doRun = _this select 2;
+local _pos = _this select 3;
{
- _distance = _distance max floor(_distance*.9);
- _dis = _x distance _unit;
- _zombie = _x;
-
+ local _dis = _x distance _unit;
call {
if (_dis < 51) exitwith {
if (_doRun) then {
- _localtargets = _x getVariable ["localtargets",[]];
- _remotetargets = _x getVariable ["remotetargets",[]];
- _targets = _localtargets + _remotetargets;
+ local _localtargets = _x getVariable ["localtargets",[]];
+ local _remotetargets = _x getVariable ["remotetargets",[]];
+ local _targets = _localtargets + _remotetargets;
if (!(_unit in _targets)) then {
if !(local _x) then {
_remotetargets set [count _remotetargets,_unit];
@@ -28,16 +21,15 @@ _listTalk = _pos nearEntities ["zZombie_Base",_distance];
};
};
} else {
- _zombie setVariable ["myDest",_pos,true];
+ _x setVariable ["myDest",_pos,true];
};
};
if ((_dis > 50) && {_dis <= 71}) exitwith {
- _50 = round(random 100);
- if (_50 < 50) then {
+ if (random 100 < 50) then {
if (_doRun) then {
- _localtargets = _x getVariable ["localtargets",[]];
- _remotetargets = _x getVariable ["remotetargets",[]];
- _targets = _localtargets + _remotetargets;
+ local _localtargets = _x getVariable ["localtargets",[]];
+ local _remotetargets = _x getVariable ["remotetargets",[]];
+ local _targets = _localtargets + _remotetargets;
if (!(_unit in _targets)) then {
if !(local _x) then {
_remotetargets set [count _remotetargets,_unit];
@@ -48,14 +40,14 @@ _listTalk = _pos nearEntities ["zZombie_Base",_distance];
};
};
} else {
- _zombie setVariable ["myDest",_pos,true];
+ _x setVariable ["myDest",_pos,true];
};
} else {
- _zombie setVariable ["myDest",_pos,true];
+ _x setVariable ["myDest",_pos,true];
};
};
if (_dis > 70) exitwith {
- _zombie setVariable ["myDest",_pos,true];
+ _x setVariable ["myDest",_pos,true];
};
};
-} count _listTalk;
+} count (_pos nearEntities ["Zed_Base",_distance]);
diff --git a/SQF/dayz_code/compile/player_forceSave.sqf b/SQF/dayz_code/compile/player_forceSave.sqf
index 9cde166e9..eccc222d0 100644
--- a/SQF/dayz_code/compile/player_forceSave.sqf
+++ b/SQF/dayz_code/compile/player_forceSave.sqf
@@ -8,7 +8,7 @@ That will interrupt actions like shooting. For loops use player_regularSave but
local _magazineArray = [] call player_countMagazines;
-PVDZ_plr_Save = [player, if (player isKindOf "PZombie_VB") then {nil} else {_magazineArray},dayz_onBack,weapons player];
+PVDZ_plr_Save = [player, if (player isKindOf "PZombie_VB") then {nil} else {_magazineArray}];
publicVariableServer "PVDZ_plr_Save";
//diag_log format["Player_forceSave with magazines: %1",_magazineArray];
diff --git a/SQF/dayz_code/compile/player_gearSet.sqf b/SQF/dayz_code/compile/player_gearSet.sqf
index 6c3386cd8..37930558d 100644
--- a/SQF/dayz_code/compile/player_gearSet.sqf
+++ b/SQF/dayz_code/compile/player_gearSet.sqf
@@ -5,6 +5,7 @@ if (count _inventory > 0) then {
_mags = _inventory select 1;
dayz_onBack = if (count _inventory > 2) then { _inventory select 2 } else { "" };
+ player setVariable ["dayz_onBack",dayz_onBack,true];
//Add inventory
{
diff --git a/SQF/dayz_code/compile/player_humanityMorph.sqf b/SQF/dayz_code/compile/player_humanityMorph.sqf
index 008a6f504..2d81df18e 100644
--- a/SQF/dayz_code/compile/player_humanityMorph.sqf
+++ b/SQF/dayz_code/compile/player_humanityMorph.sqf
@@ -28,6 +28,7 @@ local _ConfirmedBanditKills = player getVariable ["ConfirmedBanditKills",0];
local _friendlies = player getVariable ["friendlies",[]];
local _tagSetting = player getVariable ["DZE_display_name",false];
local _radiostate = player getVariable ["radiostate",false];
+local _dayz_onBack = player getVariable ["dayz_onBack",""];
local _coins = 0;
local _bankCoins = 0;
local _globalCoins = 0;
@@ -97,6 +98,7 @@ player setVariable ["ConfirmedBanditKills",_ConfirmedBanditKills,true];
player setVariable ["friendlies",_friendlies,true];
player setVariable ["DZE_display_name",_tagSetting,true];
player setVariable ["radiostate",_radiostate];
+player setVariable ["dayz_onBack",_dayz_onBack,true];
if (Z_SingleCurrency) then {
player setVariable ["cashMoney",_coins,true];
diff --git a/SQF/dayz_code/compile/player_mutantAttack.sqf b/SQF/dayz_code/compile/player_mutantAttack.sqf
new file mode 100644
index 000000000..6394004dd
--- /dev/null
+++ b/SQF/dayz_code/compile/player_mutantAttack.sqf
@@ -0,0 +1,76 @@
+/*
+ DayZ Epoch mutant attack script by JasonTM
+ Adapted from player_zombieAttack by facoptere
+ and Nightstalker melee attack effects by sumraknightstalkers.cz
+*/
+
+local _mutant = _this;
+if (isNull _mutant) exitWith {}; // Prevent errors if mutant is deleted suddenly
+
+local _damage = 0.5 + random (1.2); // Not sure about this. Maybe bloodsuckers should cause more damage.
+local _wound = "";
+local _dir = [_mutant,player] call BIS_Fnc_dirTo;
+_mutant setDir _dir;
+
+if (r_player_blood < (r_player_bloodTotal * 0.8)) then {
+ local _cnt = count (DAYZ_woundHit select 1);
+ local _index = floor (random _cnt);
+ _index = (DAYZ_woundHit select 1) select _index;
+ _wound = (DAYZ_woundHit select 0) select _index;
+} else {
+ local _cnt = count (DAYZ_woundHit_ok select 1);
+ local _index = floor (random _cnt);
+ _index = (DAYZ_woundHit_ok select 1) select _index;
+ _wound = (DAYZ_woundHit_ok select 0) select _index;
+};
+
+local _pos = getPosATL player;
+local _nearPlayer = false;
+
+{
+ if (isPlayer _x && _x != player && {_x distance _pos < 100}) exitWith {_nearPlayer = true;};
+} count playableUnits;
+
+// Select a random attack sound
+_sound = ["bloodatt0","bloodatt1","bloodatt2","bloodatt3"] call BIS_fnc_selectRandom;
+
+// Broadcast hit noise and animation if a player is near
+if (_nearPlayer) then {
+ [_mutant,_sound,0,false] call dayz_zombieSpeak;
+ //[objNull, _mutant, rplayMove, "AmelPercMstpSnonWnonDnon_amaterUder2"] call RE;
+ [nil, _mutant, rSwitchMove, "AmelPercMstpSnonWnonDnon_amaterUder2"] call RE;
+} else {
+ [_mutant,_sound,0,true] call dayz_zombieSpeak;
+ //_mutant playMove "AmelPercMstpSnonWnonDnon_amaterUder2";
+ _mutant switchMove "AmelPercMstpSnonWnonDnon_amaterUder2";
+};
+
+uiSleep 0.3; // This sleep better coordinates the UI effects below with the animation and attack sound above.
+
+if (DZE_BloodsuckerScreenEffect) then {cutRSC ["mutant_attack","PLAIN"];}; // the cool red slash marks that show up on screen.
+"dynamicBlur" ppEffectEnable true;
+"dynamicBlur" ppEffectAdjust [2];
+"dynamicBlur" ppEffectCommit 0.1;
+
+_pp = ppEffectCreate ["colorCorrections", 1553];
+_pp ppEffectEnable true;
+_pp ppEffectAdjust [1, 1, 0, [0.1, 0.0, 0.0, 1], [1.0, 0.5, 0.5, 0.1], [0.199, 0.587, 0.114, 0.0]];
+_pp ppEffectCommit 0.1;
+uiSleep 0.1;
+_pp ppEffectAdjust [1, 1, 0, [0.1, 0.0, 0.0, 0.5], [1.0, 0.5, 0.5, 0.1], [0.199, 0.587, 0.114, 0.0]];
+_pp ppEffectCommit 0.3;
+uiSleep 0.3;
+ppEffectDestroy _pp;
+
+[player, _wound, _damage, _mutant, "zombie"] call fnc_usec_damageHandler;
+
+uiSleep 0.2;
+
+if (_nearPlayer) then {
+ [nil, _mutant, rSWITCHMOVE, ""] call RE;
+} else {
+ _mutant switchMove "";
+};
+
+uiSleep 3;
+"dynamicBlur" ppEffectEnable false;
\ No newline at end of file
diff --git a/SQF/dayz_code/compile/player_regularSave.sqf b/SQF/dayz_code/compile/player_regularSave.sqf
index 09172e247..8aa0aae24 100644
--- a/SQF/dayz_code/compile/player_regularSave.sqf
+++ b/SQF/dayz_code/compile/player_regularSave.sqf
@@ -15,5 +15,5 @@
local _magazineArray = (magazines player) - ["CSGAS","Hatchet_Swing","Crowbar_Swing","Machete_Swing","Bat_Swing","BatBarbed_Swing","BatNails_Swing","Fishing_Swing","Sledge_Swing"];
-PVDZ_plr_Save = [player,_magazineArray,dayz_onBack,weapons player];
+PVDZ_plr_Save = [player,_magazineArray];
publicVariableServer "PVDZ_plr_Save";
\ No newline at end of file
diff --git a/SQF/dayz_code/compile/player_spawnCheck.sqf b/SQF/dayz_code/compile/player_spawnCheck.sqf
index 7cff6dea9..e6aed8be5 100644
--- a/SQF/dayz_code/compile/player_spawnCheck.sqf
+++ b/SQF/dayz_code/compile/player_spawnCheck.sqf
@@ -21,6 +21,22 @@ dayz_maxControlledZombies = dayz_maxLocalZombies; // This variable is also used
// Current loot spawns
dayz_currentWeaponHolders = count (_position nearObjects ["ReammoBox",_radius]);
+// Current bloodsuckers
+if (DZE_Bloodsuckers) then {
+ local _bloodsuckers = entities "z_bloodsucker";
+ dayz_currentGlobalBloodsuckers = count _bloodsuckers;
+ dayz_CurrentNearBloodsuckers = 0;
+ dayz_spawnBloodsuckers = 0;
+ {
+ if ((_x distance _position) < _radius && {alive _x}) then {
+ if (local _x) then {
+ dayz_spawnBloodsuckers = dayz_spawnBloodsuckers + 1;
+ };
+ dayz_CurrentNearBloodsuckers = dayz_CurrentNearBloodsuckers + 1;
+ };
+ } count _bloodsuckers;
+};
+
// In vehicle check
local _vehicle = vehicle player;
local _inVehicle = (_vehicle != player);
diff --git a/SQF/dayz_code/compile/player_zombieCheck.sqf b/SQF/dayz_code/compile/player_zombieCheck.sqf
index 73f891fc7..b15d05ed0 100644
--- a/SQF/dayz_code/compile/player_zombieCheck.sqf
+++ b/SQF/dayz_code/compile/player_zombieCheck.sqf
@@ -1,139 +1,145 @@
-private ["_attacked","_chance","_near","_targeted","_localtargets","_remotetargets","_forcedSpeed","_vehicle","_refObj",
-"_multiplier","_isAir","_hearingThreshold","_sightThreshold","_type","_dist","_attackDist",
-"_targetedBySight","_targetedBySound","_targets","_last","_entHeight","_pHeight","_delta","_attackResult","_cantSee","_tPos","_zPos",
-"_targetAngle","_inAngle","_lowBlood","_speedMin","_speedMax"];
+// Check for near zombies and mutants and attack player
-_vehicle = vehicle player;
-_refObj = driver _vehicle;
-_attacked = false; // at least one Z attacked the player
-_near = false;
-//_multiplier = 1;
-_isAir = _vehicle isKindOf "Air";
-_speedMin = DZE_ZombieSpeed select 0;
-_speedMax = DZE_ZombieSpeed select 1;
+local _vehicle = vehicle player;
+local _inVehicle = _vehicle != player;
+local _refObj = driver _vehicle;
+local _attacked = false; // at least one Z attacked the player
+local _isAir = _vehicle isKindOf "Air";
+local _speedMin = DZE_ZombieSpeed select 0;
+local _speedMax = DZE_ZombieSpeed select 1;
+local _cantSee = false;
{
- _forcedSpeed = if ((_speedMin != _speedMax) && {(_speedMin > 0) && (_speedMax > 0)}) then {((random (DZE_ZombieSpeed select 1)) max (DZE_ZombieSpeed select 0));} else {getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed");};
- //_forcedSpeed = getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed");
- //_hearingThreshold = getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "hearingThreshold");
- //_sightThreshold = getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "sightThreshold");
-
- if !(typeOf _x == "swarm_newBase") then {
- _type = "zombie";
- if (alive _x) then {
- private ["_dist","_attackDist"];
- _dist = _x distance _refObj;
- _group = _x;
- _chance = 1; //0 / dayz_monitorPeriod; // Z verbosity
- _targetedBySight = false;
- _targetedBySound = false;
- _localtargets = _group getVariable ["localtargets",[]];
- _remotetargets = _group getVariable ["remotetargets",[]];
- _targets = _localtargets + _remotetargets;
-
- if (_x distance player >= (dayz_areaAffect*2)) then {
- if (speed _x < 4) then {
- [_x,"idle",(_chance + 4),true] call dayz_zombieSpeak;
- } else {
- [_x,"chase",(_chance + 3),true] call dayz_zombieSpeak;
- };
+ local _isZombie = _x isKindOf "zZombie_base";
+ local _isMutant = (DZE_Bloodsuckers && {typeOf _x == "z_bloodsucker"});
+ local _forcedSpeed = if ((_speedMin != _speedMax) && {(_speedMin > 0) && (_speedMax > 0)}) then {((random (DZE_ZombieSpeed select 1)) max (DZE_ZombieSpeed select 0));} else {getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "forcedSpeed");};
+ local _dist = _x distance _refObj;
+ local _chance = 1; //0 / dayz_monitorPeriod; // Z verbosity
+ local _targetedBySight = false;
+ local _targetedBySound = false;
+ local _localtargets = _x getVariable ["localtargets",[]];
+ local _remotetargets = _x getVariable ["remotetargets",[]];
+ local _targets = _localtargets + _remotetargets;
+
+ if (_isMutant) then {
+ if (_dist <= 5) then {
+ local _skin = _x getVariable ["mutantSkin", "act_krovosos_new1"]; // Set textures locally on each client to prevent issues with RESec
+ _x setObjectTexture [0, format["\nst\ns_mutants\blood\%1.paa",_skin]];
+ } else {
+ _x setObjectTexture [0, ""];
+ local _sound = ["bloodgrowl0","bloodgrowl2","bloodgrowl3","bloodgrowl4","bloodforest1","bloodforest2","bloodforest3","bloodforest4"] call BIS_fnc_selectRandom;
+ [_x,_sound,(_chance + 4),false] call dayz_zombieSpeak;
+ };
+ };
+
+ if (_isZombie) then {
+ if (_x distance _refObj >= (dayz_areaAffect*2)) then {
+ if (speed _x < 4) then {
+ [_x,"idle",(_chance + 4),true] call dayz_zombieSpeak;
+ } else {
+ [_x,"chase",(_chance + 3),true] call dayz_zombieSpeak;
};
-
- if (_x distance _refObj >= 3.3) then {_x setVariable ["speedLimit",_forcedSpeed,false];};
- //if (!local _x) then {
- if (_refObj in _targets) then {
- _last = _x getVariable ["lastAttack", 0];
- _entHeight = (getPosATL _x) select 2;
- _pHeight = (getPosATL _refObj) select 2;
- _delta = _pHeight - _entHeight;
- _x setVariable ["speedLimit", 0, false];
-
- if (_x distance _refObj <= 3) then {
- //Force AI to Stand
- _x setUnitPos "UP";
- if !(animationState _x == "ZombieFeed") then {
- if (((diag_tickTime - _last) > 1.5) && ((_delta < 1.5) && (_delta > -1.5))) then {
- _cantSee = [_x,_refObj] call dayz_losCheck;
- if (!_cantSee) then {
- _attackResult = [_x, _type] spawn player_zombieAttack;
- _x setVariable ["lastAttack", diag_tickTime];
- };
+ };
+ if (_dist >= 3.3) then {_x setVariable ["speedLimit",_forcedSpeed,false];};
+ };
+
+ if (_refObj in _targets) then {
+ if (_isZombie) then {_x setVariable ["speedLimit", 0, false];};
+
+ if (_dist <= 3) then {
+ //Force AI to Stand
+ _x setUnitPos "UP";
+ if !(animationState _x == "ZombieFeed") then {
+ local _last = _x getVariable ["lastAttack", 0];
+ local _entHeight = (getPosATL _x) select 2;
+ local _pHeight = (getPosATL _refObj) select 2;
+ local _delta = _pHeight - _entHeight;
+ if (((diag_tickTime - _last) > 1.5) && ((_delta < 1.5) && (_delta > -1.5))) then {
+ _cantSee = [_refObj,_x] call dayz_losCheck;
+ if (!_cantSee) then {
+ if (_isZombie) then {
+ [_x, "zombie"] spawn player_zombieAttack;
+ } else {
+ local _noAttack = (DZE_MutantHeartProtect && {_refObj hasWeapon "ItemMutantHeart"});
+ if (!_noAttack && !_inVehicle) then {
+ _x spawn player_mutantAttack;
};
};
- } else {
- _x setVariable ["speedLimit", _forcedSpeed, false];
+ _x setVariable ["lastAttack", diag_tickTime];
};
- _attacked = true;
- } else {
- _x setVariable ["speedLimit", _forcedSpeed, false];
};
- //};
-
- //Block all target atteps while in a vehicle
- if (!_isAir) then {
- if !(_refObj in _targets) then {
- //Noise Activation (zed is within players audial projection)
- if (_dist < DAYZ_disAudial) then {
- if (DAYZ_disAudial > 80) then {
+ };
+ } else {
+ if (_isZombie) then {_x setVariable ["speedLimit", _forcedSpeed, false];};
+ };
+ _attacked = true;
+ } else {
+ if (_isZombie) then {_x setVariable ["speedLimit", _forcedSpeed, false];};
+ };
+
+ //Block all target attempts while in an aircraft
+ if (!_isAir) then {
+ if !(_refObj in _targets) then {
+ //Noise Activation (zed is within players audial projection)
+ if (_dist < DAYZ_disAudial) then {
+ if (DAYZ_disAudial > 80) then {
+ _targetedBySound = true;
+ } else {
+ //if (DAYZ_disAudial > 6) then {
+ _chance = [_x,_dist,DAYZ_disAudial] call dayz_losChance;
+ //diag_log ("Visual Detection: " + str([_x,_dist]) + " " + str(_chance));
+ if ((random 1) < _chance) then {
+ //make sure the player isnt behind a building or wall if target is in the open always target if player is making too much noise
+ _cantSee = [_refObj,_x] call dayz_losCheck;
+ if (!_cantSee) then {
_targetedBySound = true;
} else {
- //if (DAYZ_disAudial > 6) then {
- _chance = [_x,_dist,DAYZ_disAudial] call dayz_losChance;
- //diag_log ("Visual Detection: " + str([_x,_dist]) + " " + str(_chance));
- if ((random 1) < _chance) then {
- //make sure the player isnt behind a building or wall if target is in the open always target if player is making too much noise
- _cantSee = [_refObj,_x] call dayz_losCheck;
- if (!_cantSee) then {
- _targetedBySound = true;
- } else {
- if (_dist < (DAYZ_disAudial / 2)) then {_targetedBySound = true;};
- };
- };
- //};
+ if (_dist < (DAYZ_disAudial / 2)) then {_targetedBySound = true;};
};
};
-
- //Sight Activation
- if (_dist < DAYZ_disVisual ) then {
- _chance = [_x,_dist,DAYZ_disVisual] call dayz_losChance;
- if ((random 1) < _chance) then {
- _tPos = getPosASL _vehicle;
- _zPos = getPosASL _x;
- _targetAngle = 30;
- _inAngle = [_zPos,(direction _x),_targetAngle,_tPos] call fnc_inAngleSector;
- if (_inAngle) then {
- _cantSee = [_refObj,_x] call dayz_losCheck;
- if (!_cantSee) then {_targetedBySight = true;};
- };
- };
- };
+ //};
};
};
- if (_targetedBySight or _targetedBySound) then {
- [_x, "spotted", 0, false] call dayz_zombieSpeak;
- //diag_log format["Zombie: %1, Distance: %2, Target Reason: Sight-%3,%5/Sound-%4,%6",(typeof _x),_dist,_targetedBySight,_targetedBySound,DAYZ_disVisual,DAYZ_disAudial];
-
- switch (local _x) do {
- case false: {
- _remotetargets set [count _remotetargets,_refObj];
- _x setVariable ["remotetargets",_remotetargets,true];
+ //Sight Activation
+ if (_dist < DAYZ_disVisual) then {
+ _chance = [_x,_dist,DAYZ_disVisual] call dayz_losChance;
+ if ((random 1) < _chance) then {
+ local _tPos = getPosASL _vehicle;
+ local _zPos = getPosASL _x;
+ local _targetAngle = 30;
+ local _inAngle = [_zPos,(direction _x),_targetAngle,_tPos] call fnc_inAngleSector;
+ if (_inAngle) then {
+ _cantSee = [_refObj,_x] call dayz_losCheck;
+ if (!_cantSee) then {_targetedBySight = true;};
};
- case true: {
- _localtargets set [count _localtargets,_refObj];
- _x setVariable ["localtargets",_localtargets,false];
- };
- };
+ };
};
};
};
+
+ if (_targetedBySight || _targetedBySound) then {
+ local _sound = ["spotted","bloodgrowl1"] select _isMutant;
+ [_x, _sound, 0, false] call dayz_zombieSpeak;
+ //diag_log format["Zombie: %1, Distance: %2, Target Reason: Sight-%3,%5/Sound-%4,%6",(typeof _x),_dist,_targetedBySight,_targetedBySound,DAYZ_disVisual,DAYZ_disAudial];
+
+ if (local _x) then {
+ _localtargets set [count _localtargets,_refObj];
+ _x setVariable ["localtargets",_localtargets,false];
+ } else {
+ _remotetargets set [count _remotetargets,_refObj];
+ _x setVariable ["remotetargets",_remotetargets,true];
+ };
+ };
+
+ if (_isMutant && {DZE_BloodsuckerDeleteNearTrader && isInTraderCity}) then {deleteVehicle _x}; // Delete bloodsucker if the player is in a trader city
} forEach ((getPosATL _refObj) nearEntities ["Zed_Base",100]);
if (_attacked) then {
if (r_player_unconscious) then {
[_refObj, "scream", 6, false] call dayz_zombieSpeak;
} else {
- _lowBlood = (r_player_blood / r_player_bloodTotal) < 0.5;
+ local _lowBlood = (r_player_blood / r_player_bloodTotal) < 0.5;
if (diag_ticktime - dayz_panicCooldown > 9 && _lowBlood) then {
//Prevents overlapping sounds (panic tracks are 4-9s, this script is called every 1s)
//50% chance every 9s
@@ -143,5 +149,5 @@ if (_attacked) then {
};
};
-// return true if attacked or near. if so, player_monitor will perform its ridiculous 'while true' loop faster.
-(_attacked OR _near)
+// return true if attacked. if so, player_monitor will perform its ridiculous 'while true' loop faster.
+_attacked
diff --git a/SQF/dayz_code/config.cpp b/SQF/dayz_code/config.cpp
index 50a6ab9f5..60dc4615a 100644
--- a/SQF/dayz_code/config.cpp
+++ b/SQF/dayz_code/config.cpp
@@ -129,6 +129,9 @@ class DefaultEventhandlers {
#include "Configs\RscDisplay\doorManagement\doorManagement.hpp"
#include "Configs\RscDisplay\doorManagement\doorAccess.hpp"
#include "Configs\RscDisplay\zscDialogs.hpp"
+#include "Configs\RscDisplay\remoteVehicle.hpp"
+#include "Configs\RscDisplay\vehicleKeyChanger.hpp"
+#include "Configs\RscDisplay\virtualGarage.hpp"
//#include "Configs\RscDisplay\tradermenu.hpp"
class CfgTasks
diff --git a/SQF/dayz_code/configVariables.sqf b/SQF/dayz_code/configVariables.sqf
index bba4f3b6d..9a87806f8 100644
--- a/SQF/dayz_code/configVariables.sqf
+++ b/SQF/dayz_code/configVariables.sqf
@@ -3,6 +3,86 @@
// To change a variable copy paste it in the mission init.sqf below the #include line.
// Standard DayZ variables are found in dayz_code\init\variables.sqf.
+// Both
+dayz_infectiouswaterholes = true; //Enable infected waterholes
+dayz_townGenerator = false; // Spawn vanilla map junk instead of Epoch DynamicDebris. Currently only compatible with Chernarus. Also enables comfrey plant spawner which negatively impacts performance.
+dayz_townGeneratorBlackList = []; // If townGenerator is enabled it will not spawn junk within 150m of these positions. Example for Chernarus traders: [[4053,11668,0],[11463,11349,0],[6344,7806,0],[1606,7803,0],[12944,12766,0],[5075,9733,0],[12060,12638,0]]
+DZE_HeliLift = true; // Enable Epoch heli lift system
+DZE_GodModeBaseExclude = []; //Array of object class names excluded from the god mode bases feature
+DZE_NoVehicleExplosions = false; //Disable vehicle explosions to prevent damage to objects by ramming. Doesn't work with amphibious pook which should not be used due to FPS issues.
+DZE_SafeZoneZombieLoot = false; // Enable spawning of Zombies and loot in positions listed in DZE_SafeZonePosArray?
+dayz_ForcefullmoonNights = false; // Forces night time to be full moon.
+infectedWaterHoles = []; //Needed for non-cherno maps.
+DZE_GodModeBase = false; // Disables damage handler from base objects so they can't be destroyed.
+dayz_spawnselection = 0; //(Chernarus only) Turn on spawn selection 0 = random only spawns, 1 = spawn choice based on limits
+dayz_classicBloodBagSystem = false; // disable blood types system and use the single classic ItemBloodbag
+dayz_enableFlies = true; // Enable flies on dead bodies (negatively impacts FPS).
+
+// Death Messages
+DZE_DeathMsgChat = "none"; //"none","global","side","system" Display death messages in selected chat channel.
+DZE_DeathMsgDynamicText = false; // Display death messages as dynamicText in the top left with weapon icons.
+DZE_DeathMsgRolling = false; // Display death messages as rolling messages in bottom center of screen.
+
+// ZSC
+Z_SingleCurrency = false; // Enable single currency system.
+
+if (Z_SingleCurrency) then {
+ Z_globalBanking = false; // Enable global banking system.
+ Z_persistentMoney = false; // Enabling this stores currency to player_data instead of character_data. Currency transfers to a new character after death. For PVE servers only. Formerly called "GlobalMoney".
+ CurrencyName = "Coins"; // If using single currency this is the currency display name.
+ DZE_MoneyStorageClasses = ["VaultStorage","VaultStorage2","VaultStorageLocked","VaultStorage2Locked","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorage","LockboxStorage2","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","LockboxStorageWinter","LockboxStorageWinter2","TallSafe","TallSafeLocked"]; // If using single currency this is an array of object classes players can store coins in. E.g.: ["GunRack_DZ","WoodCrate_DZ"]
+ ZSC_VehicleMoneyStorage = true; // Allow players to store money in vehicles. If vehicles are destroyed the money is also destroyed.
+};
+
+Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader.
+
+// Vehicle Key Changer
+DZE_VehicleKey_Changer = false; // Enable Vehicle Key Changer. Create or change the key for a vehicle.
+
+// Virtual Garage
+DZE_Virtual_Garage = false; // Enable the Virtual Garage to store vehicles.
+
+// Plot Management and Plot for Life
+DZE_permanentPlot = true; // Plot ownership saves after death. Enables Plot for Life by @RimBlock and Plot Management by @DevZupa.
+DZE_isRemovable = ["Plastic_Pole_EP1_DZ"]; //Items that can be removed with a crowbar with no ownership or access required. To forbid base take overs remove plot pole from this list and add it to DZE_restrictRemoval. It is not necessary to add wrecks or items that inherit from 'BuiltItems' to this list.
+
+// Door Management
+DZE_doorManagement = true; // Enable Door Management by @DevZupa.
+
+// Group System
+dayz_groupSystem = false; // Enable group system
+
+// Bury and Butcher Bodies
+DZE_Bury_Body = false; // Enable Bury Bodies
+DZE_Butcher_Body = false; // Enable Butcher Bodies
+
+// Weather
+DZE_Weather = 2; // Options: 1 - Summer Static, 2 - Summer Dynamic, 3 - Winter Static, 4 - Winter Dynamic. If static is selected, the weather settings will be set at server startup and not change. Weather settings can be adjusted with array DZE_WeatherVariables.
+
+// The settings in the array below may be adjusted as desired. The default settings are designed to maximize client and server performance.
+// Having several features enabled at once might have adverse effects on client performance. For instance, you could have snowfall, ground fog, and breath fog threads all running at once.
+DZE_WeatherVariables = [
+ 15, // Minimum time in minutes for the weather to change. (default value: 15).
+ 30, // Maximum time in minutes for the weather to change. (default value: 30).
+ 0, // Minimum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0).
+ .2, // Maximum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0.8).
+ 0, // Minimum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 0). Note: Rain and snow will not occur when overcast is less than 0.70.
+ .6, // Maximum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 1).
+ 0, // Minimum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain.
+ .6, // Maximum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain.
+ 0, // Minimum wind strength (default value: 0).
+ 3, // Maximum wind strength (default value: 5).
+ .25, // Probability for wind to change when weather changes. (default value: .25).
+ 1, // Minimum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow.
+ 1, // Maximum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow.
+ .2,// Probability for a blizzard to occur when it is snowing. (0 = no blizzards, 1 = blizzard all the time). (default value: .2).
+ 10, // Blizzard interval in minutes. Set to zero to have the blizzard run for the whole interval, otherwise you can set a custom time interval for the blizzard.
+ 0, // Ground Fog Effects. Options: 0 - no ground fog, 1 - only at evening, night, and early morning, 2 - anytime, 3 - near cities and towns, at late evening, night, and early morning, 4 - near cities and towns, anytime.
+ 400, // Distance in meters from player to scan for buildings to spawn ground fog. By default, only the 15 nearest buildings will spawn ground fog.
+ false, // Allow ground fog when it's snowing or raining?
+ 2 // Winter Breath Fog Effects. Options: 0 - no breath fog, 1 - anytime, 2 - only when snowing or blizzard. Note: breath fog is only available with winter weather enabled.
+];
+
//Server
if (isServer) then {
DynamicVehicleDamageLow = 0; // Min damage random vehicles can spawn with
@@ -23,6 +103,20 @@ if (isServer) then {
// ZSC
Z_globalBankingTraders = false; // Enable banking NPCs at trader cities.
+
+ // Safe Zone Relocating
+ DZE_SafeZone_Relocate = false; //Enables relocating of vehicles left in Safe Zones over a server restart.
+
+ if (DZE_VehicleKey_Changer) then {
+ vkc_clearAmmo = true; // Clear the ammo of vehicles after they have been rekeyed/claimed? (stops users getting a free rearm)
+ vkc_disableThermal = [""]; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"];
+ };
+
+ if (DZE_Virtual_Garage) then {
+ vg_clearAmmo = true; // Clear the ammo of vehicles spawned during the same restart they are stored? (stops users storing a vehicle for a free rearm)
+ vg_disableThermal = []; // Array of vehicle config classes as well as vehicle classnames to disable thermal on when being spawned. i.e: ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"];
+ vg_sortColumn = 0; //0 or an out of range value sorts by the default column 'DisplayName', otherwise 1 = 'DateStored', 2 = 'id', 3 = 'Name' (of storing player), 4 = 'DateMaintained'
+ };
};
// Client
@@ -145,89 +239,253 @@ if (!isDedicated) then {
DZE_Bandit = -5000; // Defines the value at how much humanity the player is classed as a bandit.
// ZSC
- Z_showCurrencyUI = true; // Show the currency icon on the screen when Z_SingleCurrency is enabled.
- Z_showBankUI = true; // Show the banking icon on the screen when Z_globalBanking is enabled.
- ZSC_bankTraders = ["Functionary1_EP1"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1), do not use _DZ classes - they are used as player skins
- ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below.
- ZSC_bankObjects = [""]; // Array of objects that are available for banking i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"]
- ZSC_maxBankMoney = 500000; // Default limit for bank objects.
- ZSC_defaultStorageMultiplier = 200; // Default magazine count for bank objects that don't have storage slots i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"]
- ZSC_MaxMoneyInStorageMultiplier = 5000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 5000 multiplier is 1 million coin storage. (200 * 5000 = 1,000,000 coins)
- ZSC_ZombieCoins = [false,[0,1000]]; // First value activate coins on zombies, second value from 0 - 1000 coins on each zombie. Coin for zombies are handled directly in check wallet.
+ if (Z_SingleCurrency) then {
+ Z_showCurrencyUI = true; // Show the currency icon on the screen when Z_SingleCurrency is enabled.
+ Z_showBankUI = true; // Show the banking icon on the screen when Z_globalBanking is enabled.
+ ZSC_bankTraders = ["Functionary1_EP1"]; // Array of trader classnames that are available for banking (i.e Functionary1_EP1), do not use _DZ classes - they are used as player skins
+ ZSC_limitOnBank = true; // Have a limit on the bank? (i.e true or false) limits the global banking to the number below.
+ ZSC_bankObjects = [""]; // Array of objects that are available for banking i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"]
+ ZSC_maxBankMoney = 500000; // Default limit for bank objects.
+ ZSC_defaultStorageMultiplier = 200; // Default magazine count for bank objects that don't have storage slots i.e: ["Suitcase","Info_Board_EP1","Laptop_EP1","SatPhone"]
+ ZSC_MaxMoneyInStorageMultiplier = 5000; // Multiplier for how much money a bank object can hold, example: 200 magazine slots in the object (or the default value above ^^) multiplied by the 5000 multiplier is 1 million coin storage. (200 * 5000 = 1,000,000 coins)
+ ZSC_ZombieCoins = [false,[0,1000]]; // First value activate coins on zombies, second value from 0 - 1000 coins on each zombie. Coin for zombies are handled directly in check wallet.
+ };
// Loot system
dayz_toolBreaking = false; //Sledgehammer, crowbar and pickaxe have a chance to break when used.
dayz_knifeDulling = false; // Enable knife dulling. Knives need to be sharpened after so many uses.
dayz_matchboxCount = false; // Enable match stick count. After five uses matches run out and must be replaced.
dayz_waterBottleBreaking = false; // Water bottles have a chance to break when boiling and require duct tape to fix
+
+ // Bury and Butcher Bodies
+ if (DZE_Bury_Body) then {
+ DZE_Bury_Body_Value = 30;// Amount of humanity to gain for burying a body.
+ };
+ if (DZE_Butcher_Body) then {
+ DZE_Butcher_Body_Value = -30;// Amount of humanity to lose for butchering a body.
+ };
+
+ // Take Clothes
+ DZE_Take_Clothes = false; // Allows to take the clothing from dead players and AIs
+ DZE_Disable_Take_Clothes = []; // Enter the skins you do not want to be allowed to be recovered from dead bodies. E.g.: DZE_Disable_Take_Clothes = ["Doctor_DZ","Assistant_DZ","Worker1_DZ"];
+
+ /*
+ DZE_CLICK_ACTIONS
+ This is where you register your right-click actions
+ FORMAT -- (no comma after last array entry)
+ [_classname,_text,_execute,_condition],
+ PARAMETERS
+ _classname : the name of the class to click on (example = "ItemBloodbag")
+ _text : the text for the option that is displayed when right clicking on the item (example = "Self Transfuse")
+ _execute : compiled code to execute when the option is selected (example = "execVM 'my\scripts\self_transfuse.sqf';")
+ _condition : compiled code evaluated to determine whether or not the option is displayed (example = {true})
+ */
+
+ DZE_CLICK_ACTIONS = [
+ /* ["ItemGPS",localize "STR_CL_CA_SCAN_NEARBY","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((position player) nearEntities ['CAManBase',CA_GPS_RANGE]); format[localize 'STR_CL_CA_SCAN',CA_GPS_RANGE,CA_MAN_COUNT - CA_ZOMBIE_COUNT,count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]),count ((position player) nearEntities ['allVehicles',CA_GPS_RANGE]) - CA_MAN_COUNT] call dayz_rollingMessages;","true"],
+ ["ItemGPS",localize "STR_CL_CA_RANGE_UP","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE + 100) min 2500; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"],
+ ["ItemGPS",localize "STR_CL_CA_RANGE_DOWN","if(isNil 'CA_GPS_RANGE') then {CA_GPS_RANGE = 1500;};CA_GPS_RANGE = (CA_GPS_RANGE - 100) max 1000; format[localize 'STR_CL_CA_RANGE_GPS',CA_GPS_RANGE] call dayz_rollingMessages;","true"]
+ */
+ ];
+
+ DZE_Remote_Vehicle = false; // Enable/Disable the Remote Vehicle options like ejecting players from a vehicle or lock/unlock the vehicle from the distance just by the key.
+
+ if (DZE_Remote_Vehicle) then {
+ DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [
+ ["ItemKey",localize "STR_CL_RV_CA_EJECT","spawn remoteVehicle;","true",1],
+ ["ItemKey",localize "STR_CL_RV_CA_ENGINE","spawn remoteVehicle;","true",2],
+ ["ItemKey",localize "STR_CL_RV_CA_UNLOCK","spawn remoteVehicle;","true",3],
+ ["ItemKey",localize "STR_CL_RV_CA_LOCK","spawn remoteVehicle;","true",4],
+ ["ItemKey",localize "STR_CL_RV_CA_LIGHTS","spawn remoteVehicle;","true",5]
+ ];
+ };
+
+ DZE_LocateVehicle = false; // Enable/Disable the option to locate a vehicle from a key in the inventory with a rightclick on the GPS.
+
+ if (DZE_LocateVehicle) then {
+ DZE_CLICK_ACTIONS = DZE_CLICK_ACTIONS + [
+ ["ItemGPS",localize "STR_CL_LV_LOCATE_VEHICLES","[] spawn locateVehicle;","true"]
+ ];
+ };
+
+ if (DZE_VehicleKey_Changer) then {
+ vkc_claimPrice = 1000; // Amount in worth for claiming a vehicle. See the top of this script for an explanation.
+ vkc_changePrice = 5000; // Amount in worth for changing the key for a vehicle. See the top of this script for an explanation.
+ };
+
+ if (DZE_Virtual_Garage) then {
+ vg_list = ["Plastic_Pole_EP1_DZ"]; // List of objects/traders that are allowed to interact with virtual garage. i.e: ["Plastic_Pole_EP1_DZ","Worker2"];
+ vg_blackListed = []; // Array of vehicle config classes as well as vehicle classnames that are blacklisted from being stored, i.e ["All","Land","Air","Ship","StaticWeapon","AH1Z","MTVR"]
+ vg_heliPads = ["Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ"]; // Array of heli pad classnames
+ vg_store_keyless_vehicles = false; // Allow storing of keyless vehicle (map or mission spawned)
+ vg_removeKey = true; // Remove the key from the players inventory after storing vehicle?
+ vg_requireKey = true; // Require the player to have the key when storing a locked vehicle.
+ vg_storeWithGear = true; // Allow storing vehicles with gear?
+ vg_tiedToPole = true; // Tie the virtual garage to a local plot pole? If no plot pole is present (i.e a communal garage at a trader etc) the players UID will be used.
+ vg_pricePer = 100; // Price in worth to store a vehicle per gear item, use 0 if you want it to be free.
+ vg_maintainCost = 10000; //cost is 1000 per 10oz gold, gem cost is as defined in DZE_GemWorthArray; if you use ZSC then this is an amount of coins. This is a flate rate for all vehicles in the garage/per player depending on vg_tiedToPole
+ vg_price = [["Land",500],["Air",500],["Ship",500]];
+ /*
+ vg_price can be an array of vehicle config classes as well as vehicle classnames, you need to put these in order of what you prefer to get checked first.
+ Price is in worth for briefcases or coins for gold based servers (10,000 worth is considered 1 briefcase, 100,000 coins is considered 1 briefcase)
+
+ i.e:
+ vg_price = [["Land",500],["Air",300],["Ship",100]];
+ vg_price = [["350z_red",200],["Land",500],["AH1Z",1000],["Air",300],["Ship",100]];
+ */
+ vg_limit = [["Land",5],["Air",5],["Ship",5]];
+ /*
+ vg_limit can be an array of vehicle config classes and classnames to narrow down what players can store or it can be a numerical value for a total limit.
+ These can be classnames as well as config classnames, you need to put these in order of what you prefer to get checked first.
+
+ i.e:
+ vg_limit = [["Land",5],["Air",3],["Ship",1]];
+ vg_limit = [["350z_red",2],["Land",5],["AH1Z",1],["Air",3],["Ship",1]];
+ vg_limit = 5;
+ */
+ };
+
+ // Bloodsuckers
+ DZE_Bloodsuckers = false; // Enable bloodsucker spawning.
+
+ if (DZE_Bloodsuckers) then {
+ DZE_BloodsuckerChance = .15; // Chance that a building will spawn a bloodsucker. Default .15 (15%)
+ DZE_BloodsuckerBuildings = ["Land_Hlidac_budka","Land_Mil_Guardhouse","Land_Mil_Barracks","Land_Mil_House","Land_Mil_Barracks_i","CrashSite_RU","CrashSite_US","CrashSite_EU","CrashSite_UN"]; // Bloodsuckers will spawn near these building classes.
+ DZE_BloodsuckersMaxGlobal = 15; // Maximum number of bloodsuckers allowed on the map at one time.
+ DZE_BloodsuckersMaxNear = 3; // Maximum number of bloodsuckers allowed in any 200 meter area.
+ DZE_BloodsuckersMaxLocal = 2; // Maximum number of bloodsuckers that can spawn per client.
+ DZE_BloodsuckerScreenEffect = true; // On screen slash marks when the bloodsuckers attack.
+ DZE_BloodsuckerDeleteNearTrader = true; // Deletes bloodsuckers when near trader cities.
+ DZE_MutantHeartProtect = true; // Disables targeting and attack if the player has a mutant heart in inventory.
+ };
+
+ // Garage Door Opener
+ DZE_GarageDoor_Opener = false; // Enables the option to open Garage Doors from the inside of a vehicle.
+
+ if (DZE_GarageDoor_Opener) then {
+ DZE_GarageDoors = ["CinderWallDoorLocked_DZ","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","Land_DZE_WoodGateLocked","CinderGateLocked_DZ","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopLocked_DZ"]; // Array of Garage Doors that can be opened.
+ DZE_GarageDoor_Radius = 30; // Radius from where the Garage Doors can be opened. Higher values may negatively impact the performance
+ };
+
+ // Service Points for Refuel, Repair and Rearm
+ DZE_Service_Points = false;
+
+ if (DZE_Service_Points) then {
+ // Valid vehicle config classes as an example: "Air", "AllVehicles", "All", "APC", "Bicycle", "Car", "Helicopter", "Land", "Motorcycle", "Plane", "Ship", "Tank"
+ DZE_SP_Classes = ["Map_A_FuelStation_Feed","Land_A_FuelStation_Feed","FuelPump_DZ"]; // service point classes, You can also use dayz_fuelpumparray by its self for all the default fuel pumps.
+ DZE_SP_MaxDistance = 50; // maximum distance from a service point for the options to be shown
+
+ // Refuel Settings
+ DZE_SP_Refuel_Enable = true; // enable or disable the refuel option
+ if (DZE_SP_Refuel_Enable) then {
+ DZE_SP_Refuel_Costs = [
+ //["Ship",localize "str_temp_param_disabled"], // All vehicles are disabled to refuel.
+ ["Land",localize "strwffree"], // All vehicles are free to refuel.
+ ["Air",1000] //1000 worth is 1 10oz gold for all air vehicles
+ ];
+ DZE_SP_Refuel_UpdateInterval = 1; // update interval (in seconds)
+ DZE_SP_Refuel_Amount = 0.05; // amount of fuel to add with every update (in percent)
+ };
+
+
+ // Repair Settings
+ DZE_SP_Repair_Enable = true; // enable or disable the repair option
+ if (DZE_SP_Repair_Enable) then {
+ DZE_SP_Repair_RepairTime = 2; // time needed to repair each damaged part (in seconds)
+ DZE_SP_Repair_Costs = [
+ ["Air",4000], // 4000 worth is 4 10oz gold.
+ ["AllVehicles",2000] // 2000 worth is 2 10oz gold for all other vehicles
+ ];
+ };
+
+ // Rearm Settings
+ DZE_SP_Rearm_Enable = true; // enable or disable the rearm option
+ if (DZE_SP_Rearm_Enable) then {
+ DZE_SP_Rearm_Defaultcost = 10000; // Default cost to rearm a weapon. (10000 worth == 1 briefcase)
+ DZE_SP_Rearm_MagazineCount = 2; // amount of magazines to be added to the vehicle weapon
+ DZE_SP_Rearm_Ignore = [(localize "str_dn_horn"),(localize "str_dn_laser_designator")]; // Array of weapon display names that are ignored in the rearm listing.
+ /*
+ DZE_SP_Rearm_Costs is an array based on the AMMO type. I.e M240, MK19, PKM, PKT, M134 etc.
+ You can disable certain ammo types from being able to be rearmed by making the price disabled text
+ example: ["M134",localize "str_temp_param_disabled"]
+ */
+ DZE_SP_Rearm_Costs = [
+ [(localize "str_mn_40rnd_grad"),localize "str_temp_param_disabled"], // BM-21 Grad is disabled (ammo is broken)
+ [(localize "str_dn_flarelauncher"),2000], // Flares
+ [(localize "str_ep1_dn_smokelauncher"),2000], // Smokes
+ [(localize "str_dn_pk"),5000], // PKM
+ [(localize "str_dn_pkt"),5000], // PKT
+ [(localize "str_sn_m134"),5000], // M134
+ [(localize "str_dn_ags30"),5000], // AGS-30
+ [(localize "str_dn_dshkm"),5000], // DSHKM
+ [(localize "str_DN_VIKHR_CCP"),5000], // Vikhr 9A4172
+ [(localize "str_baf_baf_l94a10"),5000], // L94A1 Chain Gun
+ [(localize "str_baf_crv70"),5000], // CRV7
+ [(localize "str_baf_ctws0"),5000], // CTWS
+ [(localize "str_baf_m621_manual0"),5000], // M621
+ [(localize "str_dn_2a38m"),5000], // 2A38M Gun
+ [(localize "str_dn_2a42"),5000], // 2A42
+ [(localize "str_dn_2a46m"),5000], // 2A46M Cannon
+ [(localize "str_dn_2a46m_rocket"),5000], // 9M119M Refleks rocket
+ [(localize "str_dn_2a70"),5000], // 2A70 100mm
+ [(localize "str_dn_2a70_rocket"),5000], // 9M117M1 Arkan
+ [(localize "str_dn_2a72"),5000], // 2A72 30mm
+ [(localize "str_dn_80mmlauncher_burst"),5000], // S-8
+ [(localize "str_dn_9m311laucher"),5000], // Tunguska 9M311
+ [(localize "str_dn_ags17"),5000], // AGS-17
+ [(localize "str_dn_d81"),5000], // D-81
+ [(localize "str_dn_dt_veh"),5000], // DT
+ [(localize "str_dn_hellfire"),5000], // AGM-114 Hellfire
+ [(localize "str_dn_kord"),5000], // KORD
+ [(localize "str_dn_m197"),5000], // M197
+ [(localize "str_dn_m240"),5000], // M240
+ [(localize "str_dn_m242"),5000], // M242
+ [(localize "str_dn_m256"),5000], // M256
+ [(localize "str_dn_sidewinderlaucher"),5000], // AIM-9L Sidewinder
+ [(localize "str_dn_zis_s_53"),5000], // ZiS-S-53
+ [(localize "str_ep1_dn_57mmlauncher"),5000], // S-5
+ [(localize "str_ep1_dn_azp85"),5000], // AZP-23
+ [(localize "str_ep1_dn_ffarlauncher"),5000], // Hydra
+ [(localize "str_ep1_dn_m2"),5000], // M2 Machinegun
+ [(localize "str_ep1_dn_m230"),5000], // M230
+ [(localize "str_ep1_dn_m32_ep1"),5000], // M32
+ [(localize "str_ep1_dn_mk19"),5000], // Mk19
+ [(localize "str_ep1_dn_yakb"),5000], // Yak-B
+ [(localize "str_mn_at2_mi24d"),5000], // Falanga 3M11
+ [(localize "str_mn_at5_bmp2"),5000], // Konkurs 9M113
+ [(localize "str_mn_stinger"),5000], // FIM-92F Stinger
+ [(localize "str_mn_12rnd_mlrs"),5000], // MLRS
+ [(localize "str_baf_baf_l2a10"),5000], // L111A1
+ [(localize "STR_DN_D10_CCP"),5000], // D-10
+ [(localize "str_dn_tow"),5000], // M220 TOW
+ [(localize "str_dn_zu23"),5000], // ZU-23
+ [(localize "str_dn_kpvt"),5000], // KPVT
+ [(localize "str_dn_m3p"),5000], // M3P
+ [(localize "str_dn_spg9"),5000], // SPG-9
+ [(localize "str_dn_gau8"),5000], // GAU-8
+ [(localize "str_dn_maverick"),5000], // AGM-65 Maverick
+ [(localize "str_dn_gbu12"),5000], // GBU-12
+ [(localize "str_dn_gau12"),5000], // GAU-12
+ [(localize "STR_DN_KH29_CCP"),5000], // Kh-29L
+ [(localize "str_dn_r73"),5000], // R-73
+ [(localize "str_mn_fab250"),5000], // FAB-250
+ [(localize "str_dn_gsh301"),5000], // GSh-301
+ [(localize "str_mn_23mm_gsh23l"),5000], // GSh-23L
+ [(localize "str_sn_grenade"),5000], // Grenade
+ [(localize "str_mn_at9_mi24p"),5000], // Ataka-V 9M120
+ [(localize "str_mn_at6_mi24v"),5000], // Shturm 9K114
+
+ ["SGMT",5000], // SGMT no localization available
+ ["M68",5000], // M68 no localization available
+ ["GAU-22",5000], // GAU-22 no localization available
+ ["GSh-30",5000], // GSh-30 no localization available
+ ["M60",5000], // M60 no localization available
+ ["GSh-30K",5000] // GSh-30K no localization available
+ ];
+ };
+ };
};
-// Both
-dayz_infectiouswaterholes = true; //Enable infected waterholes
-dayz_townGenerator = false; // Spawn vanilla map junk instead of Epoch DynamicDebris. Currently only compatible with Chernarus. Also enables comfrey plant spawner which negatively impacts performance.
-dayz_townGeneratorBlackList = []; // If townGenerator is enabled it will not spawn junk within 150m of these positions. Example for Chernarus traders: [[4053,11668,0],[11463,11349,0],[6344,7806,0],[1606,7803,0],[12944,12766,0],[5075,9733,0],[12060,12638,0]]
-DZE_HeliLift = true; // Enable Epoch heli lift system
-DZE_GodModeBaseExclude = []; //Array of object class names excluded from the god mode bases feature
-DZE_NoVehicleExplosions = false; //Disable vehicle explosions to prevent damage to objects by ramming. Doesn't work with amphibious pook which should not be used due to FPS issues.
-DZE_SafeZoneZombieLoot = false; // Enable spawning of Zombies and loot in positions listed in DZE_SafeZonePosArray?
-dayz_ForcefullmoonNights = false; // Forces night time to be full moon.
-infectedWaterHoles = []; //Needed for non-cherno maps.
-DZE_GodModeBase = false; // Disables damage handler from base objects so they can't be destroyed.
-dayz_spawnselection = 0; //(Chernarus only) Turn on spawn selection 0 = random only spawns, 1 = spawn choice based on limits
-dayz_classicBloodBagSystem = false; // disable blood types system and use the single classic ItemBloodbag
-dayz_enableFlies = true; // Enable flies on dead bodies (negatively impacts FPS).
-
-// Death Messages
-DZE_DeathMsgChat = "none"; //"none","global","side","system" Display death messages in selected chat channel.
-DZE_DeathMsgDynamicText = false; // Display death messages as dynamicText in the top left with weapon icons.
-DZE_DeathMsgRolling = false; // Display death messages as rolling messages in bottom center of screen.
-
-// ZSC
-Z_SingleCurrency = false; // Enable single currency system.
-Z_globalBanking = false; // Enable global banking system.
-Z_persistentMoney = false; // Enabling this stores currency to player_data instead of character_data. Currency transfers to a new character after death. For PVE servers only. Formerly called "GlobalMoney".
-Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader.
-CurrencyName = "Coins"; // If using single currency this is the currency display name.
-DZE_MoneyStorageClasses = ["VaultStorage","VaultStorage2","VaultStorageLocked","VaultStorage2Locked","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorage","LockboxStorage2","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","LockboxStorageWinter","LockboxStorageWinter2","TallSafe","TallSafeLocked"]; // If using single currency this is an array of object classes players can store coins in. E.g.: ["GunRack_DZ","WoodCrate_DZ"]
-ZSC_VehicleMoneyStorage = true; // Allow players to store money in vehicles. If vehicles are destroyed the money is also destroyed.
-
-// Plot Management and Plot for Life
-DZE_permanentPlot = true; // Plot ownership saves after death. Enables Plot for Life by @RimBlock and Plot Management by @DevZupa.
-DZE_isRemovable = ["Plastic_Pole_EP1_DZ"]; //Items that can be removed with a crowbar with no ownership or access required. To forbid base take overs remove plot pole from this list and add it to DZE_restrictRemoval. It is not necessary to add wrecks or items that inherit from 'BuiltItems' to this list.
-
-// Door Management
-DZE_doorManagement = true; // Enable Door Management by @DevZupa.
-
-// Group System
-dayz_groupSystem = false; // Enable group system
-
-// Weather
-DZE_Weather = 2; // Options: 1 - Summer Static, 2 - Summer Dynamic, 3 - Winter Static, 4 - Winter Dynamic. If static is selected, the weather settings will be set at server startup and not change. Weather settings can be adjusted with array DZE_WeatherVariables.
-
-// The settings in the array below may be adjusted as desired. The default settings are designed to maximize client and server performance.
-// Having several features enabled at once might have adverse effects on client performance. For instance, you could have snowfall, ground fog, and breath fog threads all running at once.
-DZE_WeatherVariables = [
- 15, // Minimum time in minutes for the weather to change. (default value: 15).
- 30, // Maximum time in minutes for the weather to change. (default value: 30).
- 0, // Minimum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0).
- .2, // Maximum fog intensity (0 = no fog, 1 = maximum fog). (default value: 0.8).
- 0, // Minimum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 0). Note: Rain and snow will not occur when overcast is less than 0.70.
- .6, // Maximum overcast intensity (0 = clear sky, 1 = completely overcast). (default value: 1).
- 0, // Minimum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain.
- .6, // Maximum rain intensity (0 = no rain, 1 = maximum rain). Overcast needs to be at least 70% for it to rain.
- 0, // Minimum wind strength (default value: 0).
- 3, // Maximum wind strength (default value: 5).
- .25, // Probability for wind to change when weather changes. (default value: .25).
- 1, // Minimum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow.
- 1, // Maximum snow intensity (0 = no snow, 1 = maximum snow). Overcast needs to be at least 75% for it to snow.
- .2,// Probability for a blizzard to occur when it is snowing. (0 = no blizzards, 1 = blizzard all the time). (default value: .2).
- 10, // Blizzard interval in minutes. Set to zero to have the blizzard run for the whole interval, otherwise you can set a custom time interval for the blizzard.
- 0, // Ground Fog Effects. Options: 0 - no ground fog, 1 - only at evening, night, and early morning, 2 - anytime, 3 - near cities and towns, at late evening, night, and early morning, 4 - near cities and towns, anytime.
- 400, // Distance in meters from player to scan for buildings to spawn ground fog. By default, only the 15 nearest buildings will spawn ground fog.
- false, // Allow ground fog when it's snowing or raining?
- 2 // Winter Breath Fog Effects. Options: 0 - no breath fog, 1 - anytime, 2 - only when snowing or blizzard. Note: breath fog is only available with winter weather enabled.
-];
-
/*
Developers:
@@ -236,4 +494,4 @@ DZE_WeatherVariables = [
Variables that are map specific or frequently changed should be included in init.sqf by default
with a corresponding if(isNil)then{}; in variables.sqf.
-*/
+*/
\ No newline at end of file
diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp
index 296e8bcd5..25a0f0a05 100644
--- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp
+++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Ammo/VehicleAmmo.hpp
@@ -692,4 +692,11 @@ class IRStrobe
{
weight = 2;
};
-
+class 200Rnd_40mmHE_FV510
+{
+ weight = 20;
+};
+class 200Rnd_40mmSABOT_FV510
+{
+ weight = 20;
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp
index f656a8164..6213a8336 100644
--- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp
+++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/Misc.hpp
@@ -64,11 +64,6 @@ class deer_stand_kit
weight = 25;
};
-class m240_nest_kit
-{
- weight = 125;
-};
-
class rusty_gate_kit
{
weight = 80;
diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp
new file mode 100644
index 000000000..352399679
--- /dev/null
+++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Buildings/StaticWeapons.hpp
@@ -0,0 +1,100 @@
+class m240_nest_kit
+{
+ weight = 125;
+};
+class M2_MG_Static_kit
+{
+ weight = 45;
+};
+class M2_TriPod_MG_Static_kit
+{
+ weight = 35;
+};
+class DSHKM_MG_Static_kit
+{
+ weight = 45;
+};
+class DSHKM_TriPod_MG_Static_kit
+{
+ weight = 35;
+};
+class KORD_TriPod_MG_Static_kit
+{
+ weight = 35;
+};
+class KORD_MG_Static_kit
+{
+ weight = 65;
+};
+class L2A1_MG_Static_kit
+{
+ weight = 45;
+};
+class L2A1_Tripod_MG_Static_kit
+{
+ weight = 30;
+};
+class GMG_Tripod_MG_Static_kit
+{
+ weight = 30;
+};
+class AGS30_GrenadeLauncher_Static_kit
+{
+ weight = 35;
+};
+class MK19_TriPod_GrenadeLauncher_Static_kit
+{
+ weight = 35;
+};
+class GPMG_TriPod_GrenadeLauncher_Static_kit
+{
+ weight = 35;
+};
+class M119_Artillery_Static_kit
+{
+ weight = 280;
+};
+class D30_Artillery_Static_kit
+{
+ weight = 380;
+};
+class SearchLight_Static_kit
+{
+ weight = 25;
+};
+class M252_Mortar_Static_kit
+{
+ weight = 30;
+};
+class 2b14_82mm_Mortar_Static_kit
+{
+ weight = 30;
+};
+class Metis_Launcher_Static_kit
+{
+ weight = 75;
+};
+class SPG9_Launcher_Static_kit
+{
+ weight = 75;
+};
+class Stinger_Tripod_Launcher_Static_kit
+{
+ weight = 30;
+};
+class TOW_Tripod_Launcher_Static_kit
+{
+ weight = 30;
+};
+class Rbs70_Launcher_Static_kit
+{
+ weight = 130;
+};
+class Igla_AntiAir_Launcher_Static_kit
+{
+ weight = 120;
+};
+class ZU23_AntiAir_Static_kit
+{
+ weight = 370;
+};
\ No newline at end of file
diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp
index eb43d9a47..fad483b92 100644
--- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp
+++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Magazines/Items/Misc.hpp
@@ -140,4 +140,60 @@ class ItemPlasticParts
class ItemCeramicParts
{
weight = 3;
+};
+class ItemWeaponPartsPistol
+{
+ weight = 4;
+};
+class ItemWeaponPartsSMG
+{
+ weight = 5;
+};
+class ItemWeaponPartsShotgun
+{
+ weight = 5;
+};
+class ItemWeaponPartsRifle
+{
+ weight = 7;
+};
+class ItemWeaponPartsSniperRilfe
+{
+ weight = 7.5;
+};
+class ItemWeaponPartsMG
+{
+ weight = 9;
+};
+class ItemWeaponPartsUnknown
+{
+ weight = 8.5;
+};
+class ItemWeaponPartsBad
+{
+ weight = 8;
+};
+class ItemWeaponPartsNormal
+{
+ weight = 9;
+};
+class ItemWeaponPartsGood
+{
+ weight = 9.5;
+};
+class ItemWeaponPartsExecellent
+{
+ weight = 10;
+};
+class ItemGunPowderSmall
+{
+ weight = 2;
+};
+class ItemGunPowder
+{
+ weight = 8;
+};
+class ItemGunPowderBig
+{
+ weight = 16;
};
\ No newline at end of file
diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp
index 64abe8397..9d974e259 100644
--- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp
+++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/R3F_CfgWeight.hpp
@@ -34,6 +34,7 @@ class CfgWeight
#include "Magazines\Buildings\Tent.hpp"
#include "Magazines\Buildings\Misc.hpp"
#include "Magazines\Buildings\TripWire.hpp"
+ #include "Magazines\Buildings\StaticWeapons.hpp"
#include "Magazines\Consumables\Fish.hpp"
#include "Magazines\Consumables\Meat.hpp"
diff --git a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp
index d602e519f..4e62f7358 100644
--- a/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp
+++ b/SQF/dayz_code/external/R3F_Realism/R3F_Weight/Weapons/Rifles.hpp
@@ -2282,6 +2282,30 @@ class G3_DZ
{
weight = 6.1;
};
+class G3A3_DZ
+{
+ weight = 6.1;
+};
+class G3A3_CCO_DZ
+{
+ weight = 6.2;
+};
+class G3A3_Holo_DZ
+{
+ weight = 6.2;
+};
+class G3A3_ACOG_DZ
+{
+ weight = 6.3;
+};
+class G3_SG1_DZ
+{
+ weight = 6.5;
+};
+class G3_SG1_Bipod_DZ
+{
+ weight = 6.7;
+};
class SCAR_H_AK_DZ
{
weight = 4.5;
diff --git a/SQF/dayz_code/init/compiles.sqf b/SQF/dayz_code/init/compiles.sqf
index cb0135c07..19f119700 100644
--- a/SQF/dayz_code/init/compiles.sqf
+++ b/SQF/dayz_code/init/compiles.sqf
@@ -112,7 +112,12 @@ if (!isDedicated) then {
//ui
player_toggleSoundMute = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_toggleSoundMute.sqf";
player_toggleStreamerMode = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_toggleStreamerMode.sqf";
- player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_selectSlot.sqf";
+ if (!isNil "DZE_CLICK_ACTIONS" && {count DZE_CLICK_ACTIONS > 0}) then {
+ player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\Rightclicks\ui_selectSlot_addon.sqf";
+ } else {
+ player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\Rightclicks\ui_selectSlot_vanilla.sqf";
+ DZE_CLICK_ACTIONS = nil;
+ };
player_selectWeapon = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_selectWeapon.sqf";
player_markMap = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_markMap.sqf";
player_gearSet = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSet.sqf";
@@ -193,6 +198,53 @@ if (!isDedicated) then {
fnc_radioState = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\radioState.sqf"; // Toggle radio on and off
fnc_localizeMessage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_localizeMessage.sqf";
fnc_remoteMessage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_remoteMessage.sqf";
+
+ if (DZE_Remote_Vehicle) then {
+ remoteVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remoteVehicle\remoteVehicle.sqf";
+ rv_vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remoteVehicle\vehicleInfo.sqf";
+ };
+
+ if (DZE_LocateVehicle) then {
+ locateVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\locateVehicle.sqf";
+ };
+
+ if (DZE_VehicleKey_Changer) then {
+ vkc_vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\vkc\vehicleInfo.sqf";
+ };
+
+ if (DZE_Virtual_Garage) then {
+ player_getVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_getVehicle.sqf";
+ player_removePad = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_removePad.sqf";
+ player_storeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_storeVehicle.sqf";
+ Player_MaintainVG = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\player_MaintainVG.sqf";
+ vehicleInfo = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\virtualGarage\vehicleInfo.sqf";
+ vg_maintainSetText = {
+ disableSerialization;
+ waituntil {!isNull (findDisplay 2800)};
+ _vgDisplCtl = (findDisplay 2800) displayCtrl 2854;
+ if (vg_maintainCost > 0) then {
+ _itemText = if (Z_SingleCurrency) then {CurrencyName} else {[vg_maintainCost,true] call z_calcCurrency};
+ if (Z_SingleCurrency) then {
+ _vgDisplCtl ctrlSetText format["%1 (%2 %3)",localize "STR_CL_VG_MAINTAIN_GARAGE",vg_maintainCost,_itemText];
+ } else {
+ _vgDisplCtl ctrlSetText format["%1 (%2)",localize "STR_CL_VG_MAINTAIN_GARAGE",_itemText];
+ };
+ } else {
+ _vgDisplCtl ctrlSetText format["%1 (%2)",localize "STR_CL_VG_MAINTAIN_GARAGE",localize "strwffree"];
+ };
+ };
+ };
+
+ if (DZE_Service_Points) then {
+ execVM "\z\addons\dayz_code\actions\servicePoints\init.sqf";
+ };
+
+ // Bloodsuckers
+ if (DZE_Bloodsuckers) then {
+ player_mutantAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_mutantAttack.sqf";
+ mutant_generate = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\mutant_generate.sqf";
+ mutant_findTarget = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\mutant_findTarget.sqf";
+ };
// Weather
if (DZE_Weather in [3,4]) then {
diff --git a/SQF/dayz_code/init/variables.sqf b/SQF/dayz_code/init/variables.sqf
index f10291c80..6fe423ed9 100644
--- a/SQF/dayz_code/init/variables.sqf
+++ b/SQF/dayz_code/init/variables.sqf
@@ -1,7 +1,7 @@
/**************Variables Compiled on Both Client and Server**************/
Dayz_plants = ["Dayz_Plant1","Dayz_Plant2","Dayz_Plant3"];
-DayZ_SafeObjects = ["Base_Fire_DZ","Land_Fire_DZ","TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","BearTrap_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","CamoNet_DZ","Trap_Cans","TrapTripwireFlare","TrapBearTrapSmoke","TrapTripwireGrenade","TrapTripwireSmoke","TrapBearTrapFlare","TentStorageDomed","VaultStorageLocked","VaultStorage2Locked","BagFenceRound_DZ","TrapBear","Fort_RazorWire","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","M240Nest_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","Plastic_Pole_EP1_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","GunRack2_DZ","FireBarrel_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","WoodenFence_7_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"];
+DayZ_SafeObjects = ["Base_Fire_DZ","Land_Fire_DZ","TentStorage","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4","Wire_cat1","Sandbag1_DZ","Fence_DZ","Generator_DZ","Hedgehog_DZ","BearTrap_DZ","DomeTentStorage","DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","CamoNet_DZ","Trap_Cans","TrapTripwireFlare","TrapBearTrapSmoke","TrapTripwireGrenade","TrapTripwireSmoke","TrapBearTrapFlare","TentStorageDomed","VaultStorageLocked","VaultStorage2Locked","BagFenceRound_DZ","TrapBear","Fort_RazorWire","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","Plastic_Pole_EP1_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","LockboxStorage2Locked","LockboxStorageWinterLocked","LockboxStorageWinter2Locked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","GunRack2_DZ","FireBarrel_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","DesertTentStorage","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","WoodenFence_1_foundation_DZ","WoodenFence_1_frame_DZ","WoodenFence_quaterpanel_DZ","WoodenFence_halfpanel_DZ","WoodenFence_thirdpanel_DZ","WoodenFence_1_DZ","WoodenFence_2_DZ","WoodenFence_3_DZ","WoodenFence_4_DZ","WoodenFence_5_DZ","WoodenFence_6_DZ","WoodenFence_7_DZ","MetalFence_1_foundation_DZ","MetalFence_1_frame_DZ","MetalFence_halfpanel_DZ","MetalFence_thirdpanel_DZ","MetalFence_1_DZ","MetalFence_2_DZ","MetalFence_3_DZ","MetalFence_4_DZ","MetalFence_5_DZ","MetalFence_6_DZ","MetalFence_7_DZ","WoodenGate_foundation_DZ","WoodenGate_1_DZ","WoodenGate_2_DZ","WoodenGate_3_DZ","WoodenGate_4_DZ","WoodGateFrame_DZ","Land_DZE_WoodGate","Land_DZE_WoodGateLocked","CinderGateFrame_DZ","CinderGate_DZ","CinderGateLocked_DZ","Metal_Drawbridge_DZ","Metal_DrawbridgeLocked_DZ","WoodTriangleWall_DZ","WoodHandrail_DZ","WoodFloorStairs_DZ","WoodPillar_DZ","Land_DZE_WoodOpenTopGarageDoor","Land_DZE_WoodOpenTopGarageLocked","CinderGarageOpenTopFrame_DZ","CinderGarageOpenTop_DZ","CinderGarageOpenTopLocked_DZ","DoorFrame_DZ","Door_DZ","DoorLocked_DZ","CinderWallWindow_DZ","CinderWallWindowLocked_DZ","CinderDoorHatch_DZ","CinderDoorHatchLocked_DZ","MetalPillar_DZ","MetalFloor_Half_DZ","MetalFloor_Quarter_DZ","GlassFloor_DZ","Concrete_Bunker_DZ","Concrete_Bunker_Locked_DZ","TallSafeLocked","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","Office_Chair_DZ","MetalFloor4x_DZ","GlassFloor_Half_DZ","GlassFloor_Quarter_DZ","WoodFloor4x_DZ","WoodTriangleFloor_DZ","CinderWallHalf_Gap_DZ","TentStorageWinter","TentStorageWinter0","TentStorageWinter1","TentStorageWinter2","TentStorageWinter3","TentStorageWinter4","WinterDomeTentStorage","WinterDomeTentStorage0","WinterDomeTentStorage1","WinterDomeTentStorage2","WinterDomeTentStorage3","WinterDomeTentStorage4","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"];
DayZ_GearedObjects = ["Car","Helicopter","Motorcycle","Ship","TentStorage_base","StashSmall_base","StashMedium_base","Plane","Tank","VaultStorage","VaultStorage2","TallSafe","LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2","TentStorage","OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Scaffolding_DZ","Generator_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","StorageCrate_DZ","CamoStorageCrate_DZ"];
dayz_typedBags = ["bloodTester","bloodBagANEG","bloodBagAPOS","bloodBagBNEG","bloodBagBPOS","bloodBagABNEG","bloodBagABPOS","bloodBagONEG","bloodBagOPOS","wholeBloodBagANEG","wholeBloodBagAPOS","wholeBloodBagBNEG","wholeBloodBagBPOS","wholeBloodBagABNEG","wholeBloodBagABPOS","wholeBloodBagONEG","wholeBloodBagOPOS"];
dayz_plant = ["pumpkin.p3d","p_helianthus.p3d","p_fiberplant_ep1.p3d"];
@@ -24,6 +24,8 @@ DZE_LockedStorage = ["VaultStorageLocked","VaultStorage2Locked","LockboxStorageL
DZE_UnLockedStorage = ["VaultStorage","VaultStorage2","LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2","TallSafe"];
DZE_isNewStorage = ["OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","StorageCrate_DZ","CamoStorageCrate_DZ"];
DZE_isWreck = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"];
+DZE_StaticWeapons = ["ZU23_AntiAir_Static_DZ","Igla_AntiAir_Launcher_Static_DZ","Rbs70_Launcher_Static_DZ","TOW_Tripod_Launcher_Static_DZ","Stinger_Tripod_Launcher_Static_DZ","SPG9_Launcher_Static_DZ","Metis_Launcher_Static_DZ","2b14_82mm_Mortar_Static_DZ","M252_Mortar_Static_DZ","SearchLight_Static_DZ","D30_Artillery_Static_DZ","M119_Artillery_Static_DZ","GPMG_TriPod_GrenadeLauncher_Static_DZ","MK19_TriPod_GrenadeLauncher_Static_DZ","AGS30_GrenadeLauncher_Static_DZ","GMG_Tripod_MG_Static_DZ","L2A1_Tripod_MG_Static_DZ","L2A1_MG_Static_DZ","KORD_MG_Static_DZ","KORD_Tripod_MG_Static_DZ","DSHKM_TriPod_MG_Static_DZ","DSHKM_MG_Static_DZ","M2_TriPod_MG_Static_DZ","M2_MG_Static_DZ","M240Nest_DZ"];
+DayZ_SafeObjects = DayZ_SafeObjects + DZE_StaticWeapons;
respawn_west_original = getMarkerPos "respawn_west"; //Prevent problems caused by cheaters moving respawn_west marker with setMarkerPos or deleteMarker
@@ -41,7 +43,6 @@ if (isServer) then {
dayz_serverPUIDArray = [];
dayz_serverClientKeys = [];
dayz_traps = [];
- dead_bodyCleanup = [];
needUpdate_objects = [];
dayz_choppedTrees = [];
dayz_ghostPlayers = [];
@@ -208,6 +209,14 @@ if (!isDedicated) then {
s_bank_dialog2 = -1;
s_bank_dialog3 = -1;
s_player_checkWallet = -1;
+ s_player_clothes = -1;
+ s_player_gdoor_opener = [];
+ s_player_gdoor_opener_ctrl = -1;
+ s_player_bury_human = -1;
+ s_player_butcher_human = -1;
+ s_player_copyToKey = -1;
+ s_player_claimVehicle = -1;
+ s_garage_dialog = -1;
};
call dayz_resetSelfActions;
@@ -264,7 +273,7 @@ if (!isDedicated) then {
Dayz_meatraw = ["FoodBeefRaw","FoodMuttonRaw","FoodChickenRaw","FoodRabbitRaw","FoodBaconRaw","FoodGoatRaw","FoodDogRaw","FishRawTrout","FishRawSeaBass","FishRawTuna","FoodPotatoRaw"];
Dayz_meatcooked = ["FoodBeefCooked","FoodMuttonCooked","FoodChickenCooked","FoodRabbitCooked","FoodBaconCooked","FoodGoatCooked","FoodDogCooked","FishCookedTrout","FishCookedSeaBass","FishCookedTuna","FoodPotatoBaked"];
boil_tin_cans = ["TrashTinCan","FoodCanGriffEmpty","FoodCanBadguyEmpty","FoodCanBoneboyEmpty","FoodCanCornEmpty","FoodCanCurgonEmpty","FoodCanDemonEmpty","FoodCanFraggleosEmpty","FoodCanHerpyEmpty","FoodCanDerpyEmpty","FoodCanOrlokEmpty","FoodCanPowellEmpty","FoodCanTylersEmpty","FoodCanUnlabeledEmpty","FoodCanRusUnlabeledEmpty","FoodCanRusStewEmpty","FoodCanRusPorkEmpty","FoodCanRusPeasEmpty","FoodCanRusMilkEmpty","FoodCanRusCornEmpty","ItemSodaEmpty","ItemSodaClaysEmpty","ItemSodaDrwasteEmpty","ItemSodaFrankaEmpty","ItemSodaGrapeDrinkEmpty","ItemSodaLemonadeEmpty","ItemSodaLirikEmpty","ItemSodaLvgEmpty","ItemSodaMtngreenEmpty","ItemSodaMzlyEmpty","ItemSodaPeppsyEmpty","ItemSodaR4z0rEmpty","ItemSodaRabbitEmpty","ItemSodaRocketFuelEmpty","ItemSodaSacriteEmpty","ItemSodaSherbetEmpty","ItemSodaSmashtEmpty","FoodCanPotatoesEmpty","FoodCanBeefEmpty"];
- MeleeWeapons = ["MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseball","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails","MeleeFishingPole","MeleeSledge"];
+ MeleeWeapons = ["MeleeHatchet","MeleeCrowbar","MeleeMachete","MeleeBaseBallBat","MeleeBaseBallBatBarbed","MeleeBaseBallBatNails","MeleeFishingPole","MeleeSledge"];
MeleeMagazines = ["Hatchet_Swing","Crowbar_Swing","Machete_Swing","Bat_Swing","BatBarbed_Swing","BatNails_Swing","Fishing_Swing","Sledge_Swing"];
MeleeAmmo = ["Hatchet_Swing_Ammo","Crowbar_Swing_Ammo","Machete_Swing_Ammo","Bat_Swing_Ammo","BatBarbed_Swing_Ammo","BatNailed_Swing_Ammo","Fishing_Swing_Ammo","Sledge_Swing_Ammo","Chainsaw_Swing_Ammo"];
Dayz_Gutting = ["ItemKnife","ItemKnife5","ItemKnife4","ItemKnife3","ItemKnife2","ItemKnife1","ItemKnifeBlunt"];
@@ -281,7 +290,7 @@ if (!isDedicated) then {
DZE_LockboxesUnlocked = ["LockboxStorage","LockboxStorage2","LockboxStorageWinter","LockboxStorageWinter2"];
DZE_REPLACE_WEAPONS = [["Crossbow","DMR","M14_EP1","SVD","SVD_CAMO","M4SPR","VSS_vintorez"],["Crossbow_DZ","DMR_DZ","M14_CCO_DZ","SVD_PSO1_DZ","SVD_PSO1_Gh_DZ","M4SPR_DZE","VSS_vintorez_DZE"]];
DZE_replaceMagazines = [["vil_20Rnd_762x51_G3"],["vil_20Rnd_762x51_G3"]];
- DZE_maintainClasses = ["ModularItems","DZE_Housebase","LightPole_DZ","BuiltItems","Generator_DZ","DZ_buildables","Plastic_Pole_EP1_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","StickFence_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","DeerStand_DZ","Scaffolding_DZ","FireBarrel_DZ","M240Nest_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"];
+ DZE_maintainClasses = ["StaticWeapon","ModularItems","DZE_Housebase","LightPole_DZ","BuiltItems","Generator_DZ","DZ_buildables","Plastic_Pole_EP1_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","StickFence_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","WinterCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","WinterLargeCamoNet_DZ","DeerStand_DZ","Scaffolding_DZ","FireBarrel_DZ","M240Nest_DZ","Notebook_DZ","Water_Pump_DZ","Greenhouse_DZ","Bed_DZ","Table_DZ","VaultStorageBroken","VaultStorageBroken2","TallSafeBroken","LockboxStorageBroken","LockboxStorage2Broken","LockboxStorageWinterBroken","LockboxStorageWinter2Broken","Garage_Green_DZ","Garage_White_DZ","Garage_Brown_DZ","Garage_Grey_DZ","Helipad_Civil_DZ","Helipad_Rescue_DZ","Helipad_Army_DZ","Helipad_Cross_DZ","Helipad_ParkBorder_DZ","CCTV_DZ"];
DZE_fueltruckarray = ["UralRefuel_TK_EP1_DZ","UralRefuel_TK_EP1_DZE1","UralRefuel_TK_EP1_DZE2","UralRefuel_TK_EP1_DZE3","UralRefuel_TK_EP1_DZE4","MtvrRefuel_DES_EP1_DZ","MtvrRefuel_DES_EP1_DZE1","MtvrRefuel_DES_EP1_DZE2","MtvrRefuel_DES_EP1_DZE3","MtvrRefuel_DES_EP1_DZE4","V3S_Refuel_TK_GUE_EP1_DZ","V3S_Refuel_TK_GUE_EP1_DZE1","V3S_Refuel_TK_GUE_EP1_DZE2","V3S_Refuel_TK_GUE_EP1_DZE3","V3S_Refuel_TK_GUE_EP1_DZE4","MtvrRefuel_DZ","MtvrRefuel_DZE1","MtvrRefuel_DZE2","MtvrRefuel_DZE3","MtvrRefuel_DZE4","KamazRefuel_DZ","KamazRefuel_DZE1","KamazRefuel_DZE2","KamazRefuel_DZE3","KamazRefuel_DZE4","T810A_ACR_REFUEL_DES_DZE","T810A_ACR_REFUEL_DES_DZE1","T810A_ACR_REFUEL_DES_DZE2","T810A_ACR_REFUEL_DES_DZE3","T810A_ACR_REFUEL_DES_DZE4","T810A_ACR_REFUEL_DZE","T810A_ACR_REFUEL_DZE1","T810A_ACR_REFUEL_DZE2","T810A_ACR_REFUEL_DZE3","T810A_ACR_REFUEL_DZE4","UralRefuel_INS_DZE","UralRefuel_INS_DZE1","UralRefuel_INS_DZE2","UralRefuel_INS_DZE3","UralRefuel_INS_DZE4","UralRefuel_CDF_DZE","UralRefuel_CDF_DZE1","UralRefuel_CDF_DZE2","UralRefuel_CDF_DZE3","UralRefuel_CDF_DZE4"];
DZE_HeliAllowToTow = ["hilux1_civil_1_open","HMMWV_Base","Lada_base","Offroad_DSHKM_base","Pickup_PK_base","SkodaBase","tractor","VWGolf","Volha_TK_CIV_Base_EP1","S1203_TK_CIV_EP1","SUV_Base_EP1","ArmoredSUV_Base_PMC","UAZ_Base","LandRover_Base","Ship"];
DZE_isDestroyableStorage = ["OutHouse_DZ","Wooden_shed_DZ","Wooden_shed2_DZ","WoodShack_DZ","WoodShack2_DZ","StorageShed_DZ","StorageShed2_DZ","GunRack_DZ","GunRack2_DZ","WoodCrate_DZ","WoodCrate2_DZ","Advanced_WorkBench_DZ","CookTripod_DZ","Stoneoven_DZ","Commode_DZ","Wardrobe_DZ","Fridge_DZ","Washing_Machine_DZ","Server_Rack_DZ","ATM_DZ","Armchair_DZ","Sofa_DZ","Arcade_DZ","Vendmachine1_DZ","Vendmachine2_DZ","StorageCrate_DZ","CamoStorageCrate_DZ","StashSmall","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4"];
diff --git a/SQF/dayz_code/stringtable.xml b/SQF/dayz_code/stringtable.xml
index 4aa5f253d..ed11d1791 100644
--- a/SQF/dayz_code/stringtable.xml
+++ b/SQF/dayz_code/stringtable.xml
@@ -14281,6 +14281,10 @@
Infecté
Infikovaný
+
+ Bloodsucker
+ Кровосос
+
Viral Infected
Infectado Viral
@@ -18302,13 +18306,31 @@
- G3
+ G3A1
Assault Rifle <br/>Caliber: 7.62x51mm
Sturmgewehr <br/>Kaliber: 7.62x51mm
Штурмовая винтовка<br/>Калибр: 7.62x51мм
+
+ G3A3
+
+
+ G3A3 CCO
+
+
+ G3A3 Holo
+
+
+ G3A3 ACOG
+
+
+ G3 SG1
+
+
+ G3 SG1 Bipod
+
@@ -22463,6 +22485,11 @@
%1 a été vidé, les pièces de zombies sont maintenant sur la carcasse.
%1 byl zničený, zombie díly jsou nyní na kostru.
+
+ You have carved the heart of the %1 from it's chest.
+ Du hast das Herz des %1 aus seiner Brust herausgeschnitten.
+ Вы вырезали сердце %1 из его тела.
+
Tame Dog
Hund zähmen
@@ -25541,6 +25568,11 @@
Dépecer le zombie
Vykuchat Zombie
+
+ Butcher Bloodsucker
+ Bloodsucker ausnehmen
+ Разделать Кровососа
+
Open %1
%1 öffnen
@@ -27337,6 +27369,16 @@
Zombiehaut in einem Sack.
Кожа зомби в мешке.
+
+ Mutant Heart
+ Mutantenherz
+ Сердце мутанта
+
+
+ The heart of a mutant. It is probably worth a lot.
+ Das Herz eines Mutanten. Es ist möglicherweise viel wert.
+ Сердце мутанта. Это, наверное, многого стоит.
+
Combination Lock
Zahlenschloss
@@ -32152,6 +32194,11 @@
Währung
Валюта
+
+ Heli Pads
+ Helipads
+ Вертолётные площадки
+
Trade %1 %2 for %3 %4
%1 %2 für %3 %4 handeln
@@ -34274,6 +34321,119 @@
Eine Kiste mit Keramikteile.
Ящик с керамическими частями.
+
+
+ Gun parts (Pistol)
+ Waffenteile (Pistole)
+
+
+ A pile of pistol gun parts.
+ Ein Haufen Waffenteile einer Pistole.
+
+
+ Gun parts (SMG)
+ Waffenteile (SMG)
+
+
+ A pile of smg gun parts.
+ Ein Haufen Waffenteile einer Maschinenpistole.
+
+
+ Gun parts (Shotgun)
+ Waffenteile (Schrotflinte)
+
+
+ A pile of shotgun gun parts.
+ Ein Haufen Waffenteile einer Schrotflinte.
+
+
+ Gun parts (Rifle)
+ Waffenteile (Gewehr)
+
+
+ A pile of rifle gun parts.
+ Ein Haufen Waffenteile eines Gewehrs.
+
+
+ Gun parts (Sniper Rifle)
+ Waffenteile (Scharfschützengewehr)
+
+
+ A pile of sniper rifle gun parts.
+ Ein Haufen Waffenteile eines Scharfschützengewehrs.
+
+
+ Gun parts (MG)
+ Waffenteile (MG)
+
+
+ A pile of mg gun parts.
+ Ein Haufen Waffenteile eines Maschinengewehrs.
+
+
+ Gun parts (Unknown)
+ Waffenteile (Unbekannt)
+
+
+ A pile of unknown gun parts in a good condition.
+ Ein Haufen unbekannter Waffenteile, in einem guten Zustand.
+
+
+ Gun parts (Bad)
+ Waffenteile (Schlecht)
+
+
+ A pile of old gun parts in a bad condition.
+ Ein Haufen alter Waffenteile in einem schlechten Zustand.
+
+
+ Gun parts (Average)
+ Waffenteile (Normal)
+
+
+ A pile of gun parts in an average condition.
+ Ein Haufen Waffenteile in einem durchschnittlichen Zustand.
+
+
+ Gun parts (Good)
+ Waffenteile (Gut)
+
+
+ A pile of gun parts in a good condition.
+ Ein Haufen Waffenteile, in einem guten Zustand.
+
+
+ Gun parts (Excellent)
+ Waffenteile (Exzellent)
+
+
+ A pile of gun parts in an excellent condition.
+ Ein Haufen Waffenteile, in einem exzellenten Zustand.
+
+
+ Gun Powder (Small)
+ Schießpulver (Klein)
+
+
+ A small can with gun powder. Used for crafting ammunation.
+ Eine kleine Dose mit Schießpulver, welche für die Herstellung von Munition genutzt werden kann.
+
+
+ Gun Powder
+ Schießpulver
+
+
+ A can with gun powder. Used for crafting ammunation.
+ Eine Dose mit Schießpulver, welche für die Herstellung von Munition genutzt werden kann.
+
+
+ Gun Powder (Big)
+ Schießpulver (Groß)
+
+
+ A big can with gun powder. Used for crafting ammunation.
+ Eine große Dose mit Schießpulver, welche für die Herstellung von Munition genutzt werden kann.
+
Slugs in a can
Пули в банке
diff --git a/SQF/dayz_code/system/mission/server_traders/caribou.sqf b/SQF/dayz_code/system/mission/server_traders/caribou.sqf
index 17c579697..bd13f45ae 100644
--- a/SQF/dayz_code/system/mission/server_traders/caribou.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/caribou.sqf
@@ -135,6 +135,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -142,6 +144,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf b/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf
index 66d84566b..ca464d481 100644
--- a/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/chernarus11.sqf
@@ -181,6 +181,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -188,6 +190,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf b/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf
index e9c4c6651..bfb679373 100644
--- a/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/chernarus17.sqf
@@ -179,6 +179,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -186,6 +188,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf b/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf
index 953c43b12..5cbec6619 100644
--- a/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/cmr_ovaron.sqf
@@ -138,6 +138,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -145,6 +147,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf b/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf
index 4144b2b9f..02cb16dd1 100644
--- a/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/fdf_isle1_a.sqf
@@ -128,6 +128,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -135,6 +137,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/isladuala.sqf b/SQF/dayz_code/system/mission/server_traders/isladuala.sqf
index 5cbed648c..26ddd1ca5 100644
--- a/SQF/dayz_code/system/mission/server_traders/isladuala.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/isladuala.sqf
@@ -181,6 +181,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -188,6 +190,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/lingor.sqf b/SQF/dayz_code/system/mission/server_traders/lingor.sqf
index ea6d2c4f3..4100fb270 100644
--- a/SQF/dayz_code/system/mission/server_traders/lingor.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/lingor.sqf
@@ -181,6 +181,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -188,6 +190,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/namalsk.sqf b/SQF/dayz_code/system/mission/server_traders/namalsk.sqf
index 7b7eaec9e..e07c5383e 100644
--- a/SQF/dayz_code/system/mission/server_traders/namalsk.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/namalsk.sqf
@@ -88,6 +88,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/napf.sqf b/SQF/dayz_code/system/mission/server_traders/napf.sqf
index 205e7354f..42fdd81f7 100644
--- a/SQF/dayz_code/system/mission/server_traders/napf.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/napf.sqf
@@ -179,6 +179,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -186,6 +188,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/panthera2.sqf b/SQF/dayz_code/system/mission/server_traders/panthera2.sqf
index 212995906..4d3deb580 100644
--- a/SQF/dayz_code/system/mission/server_traders/panthera2.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/panthera2.sqf
@@ -181,6 +181,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -188,6 +190,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/sauerland.sqf b/SQF/dayz_code/system/mission/server_traders/sauerland.sqf
index 15d7b389d..546421266 100644
--- a/SQF/dayz_code/system/mission/server_traders/sauerland.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/sauerland.sqf
@@ -174,6 +174,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -181,6 +183,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf b/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf
index 625d96e38..c1e450440 100644
--- a/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/smd_sahrani_a2.sqf
@@ -181,6 +181,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -188,6 +190,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/takistan.sqf b/SQF/dayz_code/system/mission/server_traders/takistan.sqf
index 7ab157516..fde29f9b3 100644
--- a/SQF/dayz_code/system/mission/server_traders/takistan.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/takistan.sqf
@@ -167,6 +167,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -174,6 +176,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mission/server_traders/tavi.sqf b/SQF/dayz_code/system/mission/server_traders/tavi.sqf
index 6f3b16d3c..a3ee4e652 100644
--- a/SQF/dayz_code/system/mission/server_traders/tavi.sqf
+++ b/SQF/dayz_code/system/mission/server_traders/tavi.sqf
@@ -181,6 +181,8 @@ menu_Profiteer2 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer2 select 0) set [count (menu_Profiteer2 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Wholesaler*********/
menu_Profiteer3 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_WHOLESALE",50]],
@@ -188,6 +190,8 @@ menu_Profiteer3 = [
"neutral"
];
+if (DZE_Virtual_Garage) then {(menu_Profiteer3 select 0) set [count (menu_Profiteer3 select 0), [localize "STR_EPOCH_TRADER_CATEGORY_HELI_PADS",52]];};
+
/***************Banker*********/
menu_Functionary1_EP1 = [
[[localize "STR_EPOCH_TRADER_CATEGORY_CURRENCY",51]],
diff --git a/SQF/dayz_code/system/mutant_agent.fsm b/SQF/dayz_code/system/mutant_agent.fsm
new file mode 100644
index 000000000..09c4deca8
--- /dev/null
+++ b/SQF/dayz_code/system/mutant_agent.fsm
@@ -0,0 +1,719 @@
+/*%FSM*/
+/*%FSM*/
+/*
+item0[] = {"init",0,250,-400.000000,-250.000000,-300.000000,-200.000000,0.000000,"init"};
+item1[] = {"End",1,250,175.000000,-250.000000,275.000000,-200.000000,0.000000,"End"};
+item2[] = {"Not_Alive",4,218,25.000000,375.000000,125.000000,425.000000,5.000000,"Not" \n "Alive"};
+item3[] = {"Nobody_Near",4,218,25.000000,525.000000,125.000000,575.000000,6.000000,"Nobody" \n "Near"};
+item4[] = {"",7,210,-29.000042,396.000000,-20.999958,404.000000,0.000000,""};
+item5[] = {"",7,210,-29.000040,470.999939,-20.999960,479.000061,0.000000,""};
+item6[] = {"",7,210,-354.000031,121.000000,-346.000000,129.000000,0.000000,""};
+item7[] = {"UnitReady",4,218,-275.000000,275.000000,-175.000000,325.000000,5.000000,"UnitReady"};
+item8[] = {"Chase",2,250,-150.000000,375.000000,-50.000000,425.000000,0.000000,"Chase"};
+item9[] = {"",7,210,-29.000006,121.000000,-20.999994,129.000000,0.000000,""};
+item10[] = {"",7,210,-29.000008,221.000000,-20.999992,229.000015,0.000000,""};
+item11[] = {"No_Target",4,218,-400.000000,450.000000,-300.000000,500.000000,3.000000,"No" \n "Target"};
+item12[] = {"",7,210,-479.000000,471.000000,-471.000000,479.000000,0.000000,""};
+item13[] = {"",7,210,-729.000000,346.000000,-721.000000,354.000000,0.000000,""};
+item14[] = {"",7,210,221.000000,396.000000,229.000000,404.000000,0.000000,""};
+item15[] = {"",7,210,221.000000,471.000000,229.000000,479.000000,0.000000,""};
+item16[] = {"Cleanup_",2,250,175.000000,200.000000,275.000000,250.000000,0.000000,"Cleanup?"};
+item17[] = {"nobody_around",4,218,175.000000,-25.000000,275.000000,25.000000,0.000000,"nobody" \n "around"};
+item18[] = {"",7,210,-104.000023,471.000000,-95.999985,479.000000,0.000000,""};
+item19[] = {"cant_see",4,218,-275.000000,575.000000,-175.000000,625.000000,2.000000,"cant" \n "see"};
+item20[] = {"Finish_Move",2,250,-275.000000,650.000000,-175.000000,700.000000,0.000000,"Finish" \n "Move"};
+item21[] = {"finished",4,218,-425.000000,650.000000,-325.000000,700.000000,1.000000,"finished"};
+item22[] = {"",7,210,-479.000000,671.000000,-471.000000,679.000000,0.000000,""};
+item23[] = {"",7,210,-29.000002,671.000000,-20.999998,679.000000,0.000000,""};
+item24[] = {"Move",2,250,-650.000000,50.000000,-550.000000,100.000000,0.000000,"Move"};
+item25[] = {"someone_here",4,218,300.000000,200.000000,400.000000,250.000000,0.000000,"someone" \n "here"};
+item26[] = {"wait",2,250,300.000000,125.000000,400.000000,175.000000,0.000000,"wait"};
+item27[] = {"time_up",4,218,300.000000,-25.000000,400.000000,25.000000,0.000000,"time" \n "up"};
+item28[] = {"",7,210,346.000000,95.999992,354.000000,104.000000,0.000000,""};
+item29[] = {"",7,210,221.000000,96.000008,229.000000,103.999977,0.000000,""};
+item30[] = {"Time_Check",4,218,425.000000,125.000000,525.000000,175.000000,0.000000,"Time" \n "Check"};
+item31[] = {"",7,210,346.000000,-79.000000,354.000000,-71.000000,0.000000,""};
+item32[] = {"",7,210,221.000000,-79.000000,229.000000,-71.000000,0.000000,""};
+item33[] = {"too_long",4,4314,-425.000000,725.000000,-325.000000,775.000000,0.000000,"too long"};
+item34[] = {"",7,210,-229.000000,746.000000,-221.000000,754.000000,0.000000,""};
+item35[] = {"",7,210,-479.000000,746.000000,-471.000000,754.000000,0.000000,""};
+item36[] = {"Reset_Targeting",2,250,-525.000000,325.000000,-425.000000,375.000000,0.000000,"Reset" \n "Targeting"};
+item37[] = {"deleted",4,218,425.000000,-25.000000,525.000000,25.000000,0.000000,"deleted"};
+item38[] = {"",7,210,471.000000,-79.000000,479.000000,-71.000000,0.000000,""};
+item39[] = {"",7,210,471.000000,95.999977,479.000000,104.000023,0.000000,""};
+item40[] = {"",7,210,-104.000000,596.000000,-95.999992,604.000000,0.000000,""};
+item41[] = {"Target_Dead",4,218,-275.000000,500.000000,-175.000000,550.000000,3.000000,"Target Dead"};
+item42[] = {"",7,210,-479.000000,521.000000,-471.000000,529.000000,0.000000,""};
+item43[] = {"TimeCheck",4,218,-150.000000,275.000000,-50.000000,325.000000,2.000000,"TimeCheck"};
+item44[] = {"No_Agent",4,218,25.000000,450.000000,125.000000,500.000000,5.000000,"No Agent"};
+item45[] = {"",7,210,221.000015,546.000061,229.000000,553.999939,0.000000,""};
+item46[] = {"",7,210,-29.000042,545.999939,-20.999958,554.000061,0.000000,""};
+item47[] = {"Ready",4,218,-400.000000,-125.000000,-300.000000,-75.000000,0.000000,"Ready"};
+item48[] = {"Loiter",2,250,-400.000000,25.000000,-300.000000,75.000000,0.000000,"Loiter"};
+item49[] = {"Time_Check",4,218,-275.000000,50.000000,-175.000000,100.000000,0.000000,"Time" \n "Check"};
+item50[] = {"MoveCompleted_",4,218,-525.000000,50.000000,-425.000000,100.000000,3.000000,"MoveCompleted "};
+item51[] = {"Failed_Move",4,218,-525.000000,100.000000,-425.000000,150.000000,3.000000,"Failed Move"};
+item52[] = {"Not_moving",4,218,-525.000000,0.000000,-425.000000,50.000000,1.000000,"Not moving"};
+item53[] = {"",7,210,-604.000000,-29.000000,-596.000000,-21.000000,0.000000,""};
+item54[] = {"player_check",4,218,-275.000000,0.000000,-175.000000,50.000000,2.000000,"player" \n "check"};
+item55[] = {"True",8,218,-525.000000,-50.000000,-425.000000,0.000000,0.000000,"True"};
+item56[] = {"",7,210,-729.000000,-129.000000,-721.000000,-121.000008,0.000000,""};
+item57[] = {"InRange",4,218,-275.000000,400.000000,-175.000000,450.000000,1.000000,"InRange"};
+item58[] = {"Attacking_Wait",2,250,-400.000000,375.000000,-300.000000,425.000000,0.000000,"Attacking Wait"};
+item59[] = {"NotInRange",4,218,-275.000000,350.000000,-175.000000,400.000000,1.000000,"NotInRange"};
+item60[] = {"TimeCheck",4,218,-400.000000,275.000000,-300.000000,325.000000,0.000000,"TimeCheck"};
+item61[] = {"Has_Target",4,218,-150.000000,200.000000,-50.000000,250.000000,0.000000,"Has" \n "Target"};
+item62[] = {"Reset_MoveTo",2,250,-275.000000,200.000000,-175.000000,250.000000,0.000000,"Reset MoveTo"};
+item63[] = {"",7,210,-479.000000,-129.000000,-471.000000,-121.000000,0.000000,""};
+item64[] = {"isDedicated",4,218,-125.000000,-250.000000,-25.000000,-200.000000,0.000000,"isDedicated"};
+link0[] = {0,47};
+link1[] = {0,64};
+link2[] = {2,14};
+link3[] = {3,45};
+link4[] = {4,2};
+link5[] = {4,5};
+link6[] = {5,44};
+link7[] = {5,46};
+link8[] = {6,9};
+link9[] = {7,8};
+link10[] = {8,4};
+link11[] = {8,18};
+link12[] = {8,43};
+link13[] = {8,57};
+link14[] = {9,10};
+link15[] = {10,4};
+link16[] = {10,61};
+link17[] = {11,12};
+link18[] = {12,36};
+link19[] = {13,56};
+link20[] = {14,16};
+link21[] = {15,14};
+link22[] = {16,25};
+link23[] = {16,29};
+link24[] = {17,32};
+link25[] = {18,11};
+link26[] = {18,40};
+link27[] = {18,41};
+link28[] = {19,20};
+link29[] = {20,21};
+link30[] = {20,23};
+link31[] = {20,34};
+link32[] = {21,22};
+link33[] = {22,42};
+link34[] = {23,46};
+link35[] = {24,53};
+link36[] = {25,26};
+link37[] = {26,28};
+link38[] = {26,30};
+link39[] = {27,31};
+link40[] = {28,27};
+link41[] = {28,29};
+link42[] = {28,39};
+link43[] = {29,17};
+link44[] = {30,26};
+link45[] = {31,32};
+link46[] = {32,1};
+link47[] = {33,35};
+link48[] = {34,33};
+link49[] = {35,22};
+link50[] = {36,13};
+link51[] = {37,38};
+link52[] = {38,31};
+link53[] = {39,37};
+link54[] = {40,19};
+link55[] = {41,42};
+link56[] = {42,12};
+link57[] = {43,8};
+link58[] = {44,15};
+link59[] = {45,15};
+link60[] = {46,3};
+link61[] = {47,48};
+link62[] = {48,6};
+link63[] = {48,49};
+link64[] = {48,50};
+link65[] = {48,51};
+link66[] = {48,52};
+link67[] = {48,54};
+link68[] = {49,48};
+link69[] = {50,24};
+link70[] = {51,24};
+link71[] = {52,24};
+link72[] = {53,55};
+link73[] = {54,48};
+link74[] = {55,48};
+link75[] = {56,63};
+link76[] = {57,58};
+link77[] = {58,59};
+link78[] = {58,60};
+link79[] = {59,8};
+link80[] = {60,58};
+link81[] = {61,62};
+link82[] = {62,7};
+link83[] = {63,55};
+link84[] = {64,1};
+globals[] = {25.000000,1,0,0,0,640,480,1,193,6316128,1,-736.296082,268.705750,907.675354,265.884705,1425,910,1};
+window[] = {2,-1,-1,-1,-1,883,182,1390,182,3,1443};
+*//*%FSM*/
+class FSM
+{
+ fsmName = "DZE Bloodsucker Agent";
+ class States
+ {
+ /*%FSM*/
+ class init
+ {
+ name = "init";
+ init = /*%FSM*/"_agent = _this select 0;" \n
+ "_position = _agent modelToWorld [0,0,0];" \n
+ "" \n
+ "_secondHand = false;" \n
+ "" \n
+ "if (count _this > 1) then {" \n
+ " _secondHand = true;" \n
+ " diag_log (""Second Hand Bloodsucker Initialized: "" + str(_this));" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class isDedicated
+ {
+ priority = 0.000000;
+ to="End";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isDedicated"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Ready
+ {
+ priority = 0.000000;
+ to="Loiter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(!isNil 'dayz_clientPreload' && {dayz_clientPreload}) && !(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;" \n
+ "" \n
+ "_agent disableAI ""FSM"";" \n
+ "_agent setBehaviour ""CARELESS"";" \n
+ "_agent setSpeedMode ""FULL"";" \n
+ "" \n
+ "// hint ""Bloodsucker has spawned"";" \n
+ "" \n
+ "_isSomeone = true;" \n
+ "" \n
+ "_target = objNull;" \n
+ "_targetPos = [];" \n
+ "_entityTime = diag_tickTime;" \n
+ "" \n
+ "// Select skin" \n
+ "_skin = [""act_krovosos_new1"",""act_krovosos_3"",""act_krovosos_2""] call BIS_fnc_selectRandom;" \n
+ "_agent setVariable [""mutantSkin"",_skin, false];" \n
+ "" \n
+ "// Announce presence" \n
+ "[_agent,""bloodgrowl1"",0,false] call dayz_zombieSpeak;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class End
+ {
+ name = "End";
+ init = /*%FSM*/"if (!isDedicated) then {" \n
+ " if (!isNull _agent) then {" \n
+ " deleteVehicle _agent;" \n
+ " };" \n
+ "} else {" \n
+ " [_agent] call zombie_findOwner;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Chase
+ {
+ name = "Chase";
+ init = /*%FSM*/"_timeN = diag_tickTime;" \n
+ "" \n
+ "_target = _agent call mutant_findTarget;" \n
+ "_targetPos = getPosATL _target;" \n
+ "_isAlive = alive _agent;" \n
+ "_isTargetAlive = alive _target;" \n
+ "" \n
+ "//Move to location" \n
+ "_agent moveTo _targetPos;" \n
+ "" \n
+ "//Check if LOS" \n
+ "if ((_agroCheck % 8) == 0) then {" \n
+ " _agroCheck = 0;" \n
+ " _cantSee = [_target,_agent] call dayz_losCheck;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Nobody_Near
+ {
+ priority = 6.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isSomeone"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Not_Alive
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isAlive"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class No_Agent
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class No_Target
+ {
+ priority = 3.000000;
+ to="Reset_Targeting";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _target) && ((diag_tickTime - _timeN) > 5)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Target_Dead
+ {
+ priority = 3.000000;
+ to="Reset_Targeting";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isTargetAlive"/*%FSM*/;
+ action=/*%FSM*/"_timeN = diag_tickTime;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class cant_see
+ {
+ priority = 2.000000;
+ to="Finish_Move";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_cantSee"/*%FSM*/;
+ action=/*%FSM*/"// diag_log (""Mutant Cant See Target"");"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class TimeCheck
+ {
+ priority = 2.000000;
+ to="Chase";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _timeN) > 2" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/"_agroCheck= _agroCheck + 1;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class InRange
+ {
+ priority = 1.000000;
+ to="Attacking_Wait";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_agent distance _targetPos < 3.1"/*%FSM*/;
+ action=/*%FSM*/"_agent stop true;" \n
+ "" \n
+ "_myDest = [ _agent modelToWorld [0,0,0]];" \n
+ "" \n
+ "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];" \n
+ "" \n
+ "_agroCheck= 0;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Cleanup_
+ {
+ name = "Cleanup_";
+ init = /*%FSM*/"_waitStart = diag_tickTime;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class nobody_around
+ {
+ priority = 0.000000;
+ to="End";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isSomeone"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class someone_here
+ {
+ priority = 0.000000;
+ to="wait";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_isSomeone"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Finish_Move
+ {
+ name = "Finish_Move";
+ init = /*%FSM*/"_timeN = diag_tickTime;" \n
+ "" \n
+ "_isSomeone = false;" \n
+ "{" \n
+ " if (isPlayer _x && {_x distance _agent < 300}) exitWith {_isSomeone = true;};" \n
+ "} count playableUnits;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Nobody_Near
+ {
+ priority = 6.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isSomeone"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class finished
+ {
+ priority = 1.000000;
+ to="Reset_Targeting";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_agent distance _targetPos < 3"/*%FSM*/;
+ action=/*%FSM*/"//diag_log (""Finished"");"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class too_long
+ {
+ priority = 0.000000;
+ to="Reset_Targeting";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _timeN) > 20"/*%FSM*/;
+ action=/*%FSM*/"//diag_log (""Mutant Cant See Timeout"");"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Move
+ {
+ name = "Move";
+ init = /*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class True
+ {
+ priority = 0.000000;
+ to="Loiter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class wait
+ {
+ name = "wait";
+ init = /*%FSM*/"_isSomeone = false;" \n
+ "{" \n
+ " if (isPlayer _x && {_x distance _agent < 300}) exitWith {_isSomeone = true;};" \n
+ "} count playableUnits;" \n
+ "" \n
+ "_timeN = diag_tickTime;" \n
+ "" \n
+ "//diag_log (""Waiting until players are not near to delete bloodsucker, or timeout"");"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class time_up
+ {
+ priority = 0.000000;
+ to="End";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _waitStart) > 300"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class nobody_around
+ {
+ priority = 0.000000;
+ to="End";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isSomeone"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class deleted
+ {
+ priority = 0.000000;
+ to="End";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"isNull _agent;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Time_Check
+ {
+ priority = 0.000000;
+ to="wait";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _timeN) > 30"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Reset_Targeting
+ {
+ name = "Reset_Targeting";
+ init = /*%FSM*/"//Lets move" \n
+ "_myDest = [_agent,_position] call zombie_loiter;" \n
+ "" \n
+ "// Reset Targets" \n
+ "_agent setVariable [""localtargets"", [], false];" \n
+ "_agent setVariable [""remotetargets"", [], true];" \n
+ "_target = objNull;" \n
+ "" \n
+ "// diag_log (""Mutant Targets Reset"");" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class True
+ {
+ priority = 0.000000;
+ to="Loiter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Loiter
+ {
+ name = "Loiter";
+ init = /*%FSM*/"_isAlive = alive _agent;" \n
+ "_timeN = diag_tickTime;" \n
+ "" \n
+ "//Look for target" \n
+ "_target = _agent call mutant_findTarget;" \n
+ "" \n
+ "if (_myDest distance (getposATL _agent) > 3) then {" \n
+ " _agent moveTo _myDest;" \n
+ "};"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class Nobody_Near
+ {
+ priority = 6.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isSomeone"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class No_Agent
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Not_Alive
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!_isAlive"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Failed_Move
+ {
+ priority = 3.000000;
+ to="Move";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"moveToFailed _agent;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class MoveCompleted_
+ {
+ priority = 3.000000;
+ to="Move";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"moveToCompleted _agent;"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class player_check
+ {
+ priority = 2.000000;
+ to="Loiter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _entityTime) > 30"/*%FSM*/;
+ action=/*%FSM*/"_entityTime = diag_tickTime;" \n
+ "" \n
+ "_isSomeone = false;" \n
+ "{" \n
+ " if (isPlayer _x && {_x distance _agent < 300}) exitWith {_isSomeone = true;};" \n
+ "} count playableUnits;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Not_moving
+ {
+ priority = 1.000000;
+ to="Move";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(Speed _agent == 0)" \n
+ ""/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Time_Check
+ {
+ priority = 0.000000;
+ to="Loiter";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(diag_tickTime - _timeN) > 1"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Has_Target
+ {
+ priority = 0.000000;
+ to="Reset_MoveTo";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"!(isNull _target)"/*%FSM*/;
+ action=/*%FSM*/"// diag_log ""Bloodsucker found target"";"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Attacking_Wait
+ {
+ name = "Attacking_Wait";
+ init = /*%FSM*/"_targetPos = _target modelToWorld [0,-1,0];" \n
+ "" \n
+ "_timeN = diag_tickTime;" \n
+ ""/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class NotInRange
+ {
+ priority = 1.000000;
+ to="Chase";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"_agent distance _targetPos > 3.1"/*%FSM*/;
+ action=/*%FSM*/"_agent stop false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class TimeCheck
+ {
+ priority = 0.000000;
+ to="Attacking_Wait";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"((diag_tickTime - _timeN) > 1)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ /*%FSM*/
+ class Reset_MoveTo
+ {
+ name = "Reset_MoveTo";
+ init = /*%FSM*/"_agent moveTo (_agent modelToWorld [0,0,0]);"/*%FSM*/;
+ precondition = /*%FSM*/""/*%FSM*/;
+ class Links
+ {
+ /*%FSM*/
+ class UnitReady
+ {
+ priority = 5.000000;
+ to="Chase";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"unitReady _agent"/*%FSM*/;
+ action=/*%FSM*/"_myDest = [ _agent modelToWorld [0,0,0]];" \n
+ "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];" \n
+ "" \n
+ "//Lets see if we can get the AI to stop running away before heading to the player" \n
+ "_agent moveTo (_agent modelToWorld [0,0,0]);" \n
+ "" \n
+ "_agroCheck = 0;" \n
+ "_cantSee = false;"/*%FSM*/;
+ };
+ /*%FSM*/
+ };
+ };
+ /*%FSM*/
+ };
+ initState="init";
+ finalStates[] =
+ {
+ "End",
+ };
+};
+/*%FSM*/
\ No newline at end of file
diff --git a/SQF/dayz_server/compile/garage/init.sqf b/SQF/dayz_server/compile/garage/init.sqf
new file mode 100644
index 000000000..0ce53c169
--- /dev/null
+++ b/SQF/dayz_server/compile/garage/init.sqf
@@ -0,0 +1,54 @@
+server_queryVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_queryVehicle.sqf";
+server_spawnVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_spawnVehicle.sqf";
+server_storeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_storeVehicle.sqf";
+server_maintainGarage = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\server_maintainVehicles.sqf";
+
+"PVDZE_queryVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_queryVehicle};
+"PVDZE_spawnVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_spawnVehicle};
+"PVDZE_storeVehicle" addPublicVariableEventHandler {(_this select 1) spawn server_storeVehicle};
+"PVDZE_maintainGarage" addPublicVariableEventHandler {(_this select 1) spawn server_maintainGarage};
+
+// Thanks to icomrade/DayZ Epoch for this code: https://github.com/EpochModTeam/DayZ-Epoch/commit/8035df0ba0cd928b84085e288c5cb88260870a3e#diff-ad0636fc2328a27bd80bad9f46126307
+VG_RandomizeMyKey = {
+ _randomInput = toArray "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
+ _return = [];
+ for "_i" from 0 to (_this) do {
+ _return set [count _return, (_randomInput call BIS_fnc_selectRandom)];
+ };
+ _return;
+};
+vg_serverKey = toString (8 call VG_RandomizeMyKey);
+vg_alreadySpawned = [];
+
+VG_ClearTurrets = {
+ //By denvdmj (probably, I found it on the biki)
+ private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"];
+ _obj = _this;
+
+ _weaponArray = [];
+ _weaponArray set [count _weaponArray,[-1]];
+
+ _findRecurse = {
+ private ["_root", "_class", "_path", "_currentPath", "_thisThis"];
+ _root = (_this select 0);
+ _path = +(_this select 1);
+ _thisThis = _this select 2;
+ for "_i" from 0 to count _root -1 do {
+ _class = _root select _i;
+ if (isClass _class) then {
+ _currentPath = _path + [_i];
+ {_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons");
+ _class = _class >> "turrets";
+ if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;};
+ };
+ };
+ };
+
+ [configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse;
+
+ {
+ _turret = _x;
+ _mags = _obj magazinesTurret _turret;
+ {_obj removeMagazinesTurret[_x,_turret];} count _mags;
+ } forEach _weaponArray;
+};
diff --git a/SQF/dayz_server/compile/garage/server_maintainVehicles.sqf b/SQF/dayz_server/compile/garage/server_maintainVehicles.sqf
new file mode 100644
index 000000000..f70711f6d
--- /dev/null
+++ b/SQF/dayz_server/compile/garage/server_maintainVehicles.sqf
@@ -0,0 +1,9 @@
+private ["_player","_playerUID","_key","_message"];
+_player = _this select 0;
+_playerUID = if (count _this > 1) then {_this select 1} else {getPlayerUID _player};
+
+_key = format["CHILD:803:%1:",_playerUID];
+_key call server_hiveWrite;
+
+_message = format["GARAGE: %1 (%2) maintained vehicles linked to UID: %3 @%4 %5",if (alive _player) then {name _player} else {"DeadPlayer"},getPlayerUID _player,_playerUID,mapGridPosition _player,getPosATL _player];
+diag_log _message;
diff --git a/SQF/dayz_server/compile/garage/server_queryVehicle.sqf b/SQF/dayz_server/compile/garage/server_queryVehicle.sqf
new file mode 100644
index 000000000..9784acf9b
--- /dev/null
+++ b/SQF/dayz_server/compile/garage/server_queryVehicle.sqf
@@ -0,0 +1,12 @@
+private ["_player","_query","_result","_clientID","_playerUID"];
+
+_player = _this select 0;
+_clientID = owner _player;
+_playerUID = if (count _this > 1) then {_this select 1} else {getPlayerUID _player};
+
+_key = format["CHILD:800:%1:%2:",_playerUID,vg_sortColumn];
+_result = _key call server_hiveReadWrite;
+
+PVDZE_queryVehicleResult = _result;
+
+if (!isNull _player) then {_clientID publicVariableClient "PVDZE_queryVehicleResult";};
diff --git a/SQF/dayz_server/compile/garage/server_spawnVehicle.sqf b/SQF/dayz_server/compile/garage/server_spawnVehicle.sqf
new file mode 100644
index 000000000..df3919b7e
--- /dev/null
+++ b/SQF/dayz_server/compile/garage/server_spawnVehicle.sqf
@@ -0,0 +1,112 @@
+private ["_isAir","_VG_ObjID","_characterID","_class","_clientID","_clrinit","_clrinit2","_colour","_colour2","_dam","_damage","_dir","_fuel","_hitpoints","_id","_inventory","_key","_location","_message","_object","_oid","_outcome","_player","_result","_selection","_serverKey","_uid","_worldSpace"];
+
+_worldSpace = _this select 0;
+_player = _this select 1;
+_id = _this select 2;
+_dir = _worldSpace select 0;
+_location = _worldSpace select 1;
+_worldSpace = [_dir,_location];
+_uid = _worldSpace call dayz_objectUID2;
+_key = str formatText["CHILD:801:%1:%2:%3:",_id,_worldSpace,_uid];
+
+_result = _key call server_hiveReadWrite;
+_outcome = _result select 0;
+if (_outcome != "PASS") exitWith {diag_log("HIVE VIRTUAL GARAGE SPAWN VEHICLE FAILED TO EXECUTE: " + _key);};
+_class = _result select 1;
+_characterID = _result select 2;
+_inventory = _result select 3;
+_hitpoints = _result select 4;
+_fuel = _result select 5;
+_damage = _result select 6;
+_colour = _result select 7;
+_colour2 = _result select 8;
+_serverKey = _result select 9;
+_VG_ObjID = _result select 10;
+_clientID = owner _player;
+
+if (_VG_ObjID in vg_alreadySpawned) exitWith {
+ diag_log format["VG ERROR: Vehicle with VGObjID = %1 has already been spawned and will not be spawned again. PlayerUID: %2", _VG_ObjID, (getPlayerUID _player)];
+};
+
+_key = format["CHILD:388:%1:",_uid];
+
+#ifdef OBJECT_DEBUG
+diag_log ("HIVE: WRITE: "+ str(_key));
+#endif
+
+_result = _key call server_hiveReadWrite;
+_outcome = _result select 0;
+
+if (_outcome != "PASS") then {
+ diag_log("CUSTOM: failed to get id for : " + str(_uid));
+} else {
+ _VG_ObjID = (toString (18 call VG_RandomizeMyKey)); //new ID
+ vg_alreadySpawned set [(count vg_alreadySpawned), _VG_ObjID];
+ _oid = _result select 1;
+
+ #ifdef OBJECT_DEBUG
+ diag_log("CUSTOM: Selected " + str(_oid));
+ #endif
+
+ _object = _class createVehicle _location;
+ if (surfaceIsWater _location && {({_x != _object} count (_location nearEntities ["Ship",8])) == 0}) then {
+ _object setPos _location;
+ };
+
+ _object addEventHandler ["HandleDamage",{false}];
+
+ clearWeaponCargoGlobal _object;
+ clearMagazineCargoGlobal _object;
+ if (vg_clearAmmo && {vg_serverKey == _serverKey}) then {_object call VG_ClearTurrets;};
+
+ _object setFuel _fuel;
+ _object setDamage _damage;
+
+ [_inventory select 0,_inventory select 1,_inventory select 2,_object] call fn_addCargo;
+
+ _object setVariable ["ObjectID", _oid, true];
+ _object setVariable ["lastUpdate",diag_tickTime];
+ _object setVariable ["VGObjectID",_VG_ObjID, false];
+
+ if (_colour != "0") then {
+ _object setVariable ["Colour",_colour,true];
+ _clrinit = format ["#(argb,8,8,3)color(%1)",_colour];
+ _object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];";
+ };
+
+ if (_colour2 != "0") then {
+ _object setVariable ["Colour2",_colour2,true];
+ _clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2];
+ _object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];";
+ };
+
+ processInitCommands;
+
+ _characterID = str(_characterID);
+ _object setVariable ["CharacterID", _characterID, true];
+
+ if (_characterID != "0" && !(_object isKindOf "Bicycle")) then {_object setVehicleLock "LOCKED";};
+ _isAir = _object isKindOf "Air";
+
+ {
+ _selection = _x select 0;
+ _dam = _x select 1;
+ _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts});
+ [_object,_selection,_dam] call fnc_veh_setFixServer;
+ } forEach _hitpoints;
+
+ dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
+
+ _object call fnc_veh_ResetEH;
+ {if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vg_disableThermal;
+
+ PVDZE_veh_Init = _object;
+ publicVariable "PVDZE_veh_Init";
+
+ PVDZE_spawnVehicleResult = _characterID;
+
+ if (!isNull _player) then {_clientID publicVariableClient "PVDZE_spawnVehicleResult";};
+
+ _message = format["%1 (%2) retrieved %3 @%4 %5",if (alive _player) then {name _player} else {"DeadPlayer"},getPlayerUID _player,_class,mapGridPosition _player,getPosATL _player];
+ diag_log _message;
+};
diff --git a/SQF/dayz_server/compile/garage/server_storeVehicle.sqf b/SQF/dayz_server/compile/garage/server_storeVehicle.sqf
new file mode 100644
index 000000000..3e969e079
--- /dev/null
+++ b/SQF/dayz_server/compile/garage/server_storeVehicle.sqf
@@ -0,0 +1,92 @@
+private ["_damageVeh","_VGobjID","_array","_backPack","_backPackCount","_charID","_class","_clientID","_colour","_colour2","_damage","_displayName","_fnc_sanitizeInput","_fuel","_gearCount","_hit","_hitpoints","_index","_inventory","_inventoryCount","_key","_magazine","_magazineCount","_message","_name","_objectID","_objectUID","_player","_playerUID","_selection","_vehicle","_weapons","_weaponsCount","_woGear"];
+
+_vehicle = _this select 0;
+_player = _this select 1;
+_woGear = _this select 2;
+_clientID = owner _player;
+_playerUID = if (count _this > 3) then {_this select 3} else {getPlayerUID _player};
+
+_gearCount = {
+ private ["_counter"];
+ _counter = 0;
+ {_counter = _counter + _x;} count _this;
+ _counter;
+};
+
+_fnc_sanitizeInput = {
+ private ["_input","_badChars"];
+
+ _input = _this;
+ _input = toArray (_input);
+ _badChars = [60,62,38,123,125,91,93,59,58,39,96,126,44,46,47,63,124,92,34];
+
+ {
+ _input = _input - [_x];
+ } forEach _badChars;
+
+ _input = toString (_input);
+ _input
+};
+
+_class = typeOf _vehicle;
+_displayName = (getText(configFile >> "cfgVehicles" >> _class >> "displayName")) call _fnc_sanitizeInput;
+_name = if (alive _player) then {(name _player) call _fnc_sanitizeInput;} else {"unknown player";};
+
+_charID = _vehicle getVariable ["CharacterID","0"];
+_objectID = _vehicle getVariable ["ObjectID","0"];
+_objectUID = _vehicle getVariable ["ObjectUID","0"];
+_VGobjID = _vehicle getVariable ["VGObjectID","0"];
+if (_VGobjID == "0") then {
+ _VGobjID = (toString (18 call VG_RandomizeMyKey)); //normally spawned vehicle
+} else {
+ _index = vg_alreadySpawned find _VGobjID;
+ if (_index >= 0) then {
+ vg_alreadySpawned = vg_alreadySpawned - [_VGobjID];
+ } else {
+ diag_log format["VG Error: Could not find vehicle with VGobjUID = %1 in vg_alreadySpawned array (server_storeVehicle.sqf) - possible duplicate vehicle being stored. PlayerUID: %2", _VGobjID, (getPlayerUID _player)];
+ };
+};
+_damageVeh = damage _vehicle;
+_fuel = fuel _vehicle;
+_colour = _vehicle getVariable ["Colour","0"];
+_colour2 = _vehicle getVariable ["Colour2","0"];
+
+_array = [];
+_inventory = [[[],[]],[[],[]],[[],[]]];
+_inventoryCount = [0,0,0];
+
+if (isNil "_colour") then {_colour = "0";};
+if (isNil "_colour2") then {_colour2 = "0";};
+
+_hitpoints = _vehicle call vehicle_getHitpoints;
+
+{
+ _hit = [_vehicle,_x] call object_getHit;
+ _damage = _hit select 0;
+ _selection = getText (configFile >> "CfgVehicles" >> _class >> "HitPoints" >> _x >> "name");
+ if (_damage > 0) then {_array set [count _array,[_selection,_damage]]};
+} count _hitpoints;
+
+if (!_woGear) then {
+ _weapons = getWeaponCargo _vehicle;
+ _magazine = getMagazineCargo _vehicle;
+ _backPack = getBackpackCargo _vehicle;
+ _weaponsCount = (_weapons select 1) call _gearCount;
+ _magazineCount = (_magazine select 1) call _gearCount;
+ _backPackCount = (_backPack select 1) call _gearCount;
+ _inventory = [_weapons, _magazine, _backPack];
+ _inventoryCount = [_weaponsCount, _magazineCount, _backPackCount];
+};
+
+_key = str formatText["CHILD:802:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:",_playerUID,_name,_displayName,_class,_charID,_inventory,_array,_fuel,_damageVeh,_colour,_colour2,vg_serverKey,_VGobjID,_inventoryCount];
+_key call server_hiveWrite;
+
+PVDZE_storeVehicleResult = true;
+
+[_objectID,_objectUID,_vehicle] call server_deleteObjDirect;
+deleteVehicle _vehicle;
+
+if (!isNull _player) then {_clientID publicVariableClient "PVDZE_storeVehicleResult";};
+
+_message = format["GARAGE: %1 (%2) stored %3 @%4 %5",_name,_playerUID,_class,mapGridPosition _player,getPosATL _player];
+diag_log _message;
diff --git a/SQF/dayz_server/compile/server_playerDied.sqf b/SQF/dayz_server/compile/server_playerDied.sqf
index 8fc0896c4..edad31b5a 100644
--- a/SQF/dayz_server/compile/server_playerDied.sqf
+++ b/SQF/dayz_server/compile/server_playerDied.sqf
@@ -85,5 +85,4 @@ if (_playerName != "unknown" || {_sourceName != "unknown"}) then {
};
_newObject setDamage 1;
-_newObject setOwner 0;
-//dead_bodyCleanup set [count dead_bodyCleanup,_newObject];
+_newObject setOwner 0;
\ No newline at end of file
diff --git a/SQF/dayz_server/compile/server_playerSetup.sqf b/SQF/dayz_server/compile/server_playerSetup.sqf
index 9f19e3278..44789b63e 100644
--- a/SQF/dayz_server/compile/server_playerSetup.sqf
+++ b/SQF/dayz_server/compile/server_playerSetup.sqf
@@ -239,7 +239,7 @@ _playerObj setVariable ["lastTime",diag_ticktime];
//set server-side inventory variable to monitor player gear
if (count _inventory > 2) then {
- _playerObj setVariable["ServerMagArray",[_inventory select 1,_inventory select 2,_inventory select 0], false];
+ _playerObj setVariable["ServerMagArray",_inventory select 1, false];
};
//Record Player Login/LogOut
diff --git a/SQF/dayz_server/compile/server_playerSync.sqf b/SQF/dayz_server/compile/server_playerSync.sqf
index 90aeefb20..9bce701af 100644
--- a/SQF/dayz_server/compile/server_playerSync.sqf
+++ b/SQF/dayz_server/compile/server_playerSync.sqf
@@ -2,8 +2,7 @@
local _character = _this select 0;
local _magazines = _this select 1;
-local _dayz_onBack = _this select 2;
-local _weaponsPlayer = _this select 3;
+local _dayz_onBack = _character getVariable ["dayz_onBack",""];
local _characterID = _character getVariable ["characterID","0"];
local _playerUID = getPlayerUID _character;
local _charPos = getPosATL _character;
@@ -41,7 +40,7 @@ local _usec_Dead = _character getVariable ["USEC_isDead",false];
local _lastTime = _character getVariable ["lastTime",-1];
local _modelChk = _character getVariable ["model_CHK",""];
local _temp = round (_character getVariable ["temperature",100]);
-local _lastMagazines = _character getVariable ["ServerMagArray",[[],"",[]]];
+local _lastMagazines = _character getVariable ["ServerMagArray",[]];
//Get difference between current stats and stats at last sync
local _statsDiff = [_character,_playerUID] call server_getStatsDiff;
_humanity = _statsDiff select 0;
@@ -54,17 +53,12 @@ local _charPosLen = count _charPos;
local _magTemp = [];
if (!isNil "_magazines") then {
- _playerGear = [_weaponsPlayer,_magazines,_dayz_onBack];
- _character setVariable["ServerMagArray",[_magazines,_dayz_onBack,_weaponsPlayer], false];
+ _playerGear = [weapons _character,_magazines,_dayz_onBack];
+ _character setVariable["ServerMagArray",_magazines, false];
} else {
//check Magazines everytime they aren't sent by player_forceSave
- _magTemp = (_lastMagazines select 0);
- if (isNil "_dayz_onBack") then {
- _dayz_onBack = _lastMagazines select 1;
- };
- if (isNil "_weaponsPlayer") then {
- _weaponsPlayer = _lastMagazines select 2;
- };
+ _magTemp = _lastMagazines;
+
if (count _magTemp > 0) then {
_magazines = [(magazines _character),20] call array_reduceSize;
{
@@ -73,7 +67,7 @@ if (!isNil "_magazines") then {
_class = _x select 0;
};
if (_class in _magazines) then {
- local _MatchedCount = {_compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp;
+ local _MatchedCount = {local _compare = if (typeName _x == "ARRAY") then {_x select 0;} else {_x}; _compare == _class} count _magTemp;
local _CountedActual = {_x == _class} count _magazines;
if (_MatchedCount > _CountedActual) then {
_magTemp set [_forEachIndex, "0"];
@@ -81,16 +75,15 @@ if (!isNil "_magazines") then {
} else {
_magTemp set [_forEachIndex, "0"];
};
- } forEach (_lastMagazines select 0);
+ } forEach _lastMagazines;
_magazines = _magTemp - ["0"];
- _magazines = [_magazines,_dayz_onBack,_weaponsPlayer];
_character setVariable["ServerMagArray",_magazines, false];
- _playerGear = [_magazines select 2,_magazines select 0,_magazines select 1];
+ _playerGear = [weapons _character,_magazines,_dayz_onBack];
} else {
- _magazines = [_magTemp,_dayz_onBack,_weaponsPlayer];
+ _magazines = _magTemp;
};
_character setVariable["ServerMagArray",_magazines, false];
- _playerGear = [_magazines select 2,_magazines select 0,_magazines select 1];
+ _playerGear = [weapons _character,_magazines,_dayz_onBack];
};
//Check if update is requested
diff --git a/SQF/dayz_server/compile/server_publishVehicle3.sqf b/SQF/dayz_server/compile/server_publishVehicle3.sqf
index d876457bb..9c83ebcfe 100644
--- a/SQF/dayz_server/compile/server_publishVehicle3.sqf
+++ b/SQF/dayz_server/compile/server_publishVehicle3.sqf
@@ -46,7 +46,7 @@ _magazines = getMagazineCargo _object;
_backpacks = getBackpackCargo _object;
_inv = [_weapons,_magazines,_backpacks];
-if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then {
+if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then {
_coins = _object getVariable ["cashMoney",0];
};
@@ -107,7 +107,7 @@ if (_outcome != "PASS") then {
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["CharacterID", _characterID, true];
- if (Z_SingleCurrency && ZSC_VehicleMoneyStorage && {_coins > 0}) then {
+ if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && (_coins > 0)}) then {
_object setVariable ["cashMoney",_coins,true];
};
diff --git a/SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf b/SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf
new file mode 100644
index 000000000..0c0070fd1
--- /dev/null
+++ b/SQF/dayz_server/compile/server_publishVehicle3_vkc.sqf
@@ -0,0 +1,205 @@
+private ["_coins","_activatingPlayer","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected"
+,"_characterID","_result","_outcome","_oid","_objectID","_objectUID","_newobject","_weapons","_magazines","_backpacks"
+,"_clientKey","_exitReason","_playerUID","_isAir","_fuel","_selection","_dam","_hitpoints","_newHitpoints","_damage"
+,"_hit","_inv","_action","_clearTurrets","_message"];
+#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
+
+if (count _this < 6) exitWith {
+ diag_log "Server_PublishVehicle3 error: Wrong parameter format";
+ dze_waiting = "fail";
+ (owner (_this select 4)) publicVariableClient "dze_waiting";
+};
+
+_object = _this select 0;
+_worldspace = _this select 1;
+_class = _this select 2;
+_keySelected = _this select 3;
+_activatingPlayer = _this select 4;
+_clientKey = _this select 5;
+_action = if (count _this > 6) then {_this select 6} else {""};
+_playerUID = getPlayerUID _activatingPlayer;
+_characterID = _keySelected;
+
+_exitReason = [_this,"PublishVehicle3",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender;
+if (_exitReason != "") exitWith {
+ diag_log _exitReason;
+ dze_waiting = "fail";
+ (owner _activatingPlayer) publicVariableClient "dze_waiting";
+};
+
+if (!(isClass(configFile >> "CfgVehicles" >> _class)) || isNull _object) exitWith {
+ diag_log ("HIVE-PublishVehicle3 Error: Vehicle does not exist: "+ str(_class));
+ dze_waiting = "fail";
+ (owner _activatingPlayer) publicVariableClient "dze_waiting";
+};
+
+_objectID = _object getVariable ["ObjectID","0"];
+_objectUID = _object getVariable ["ObjectUID","0"];
+_location = [_object] call fnc_getPos;
+_fuel = fuel _object;
+_hitpoints = _object call vehicle_getHitpoints;
+_newHitpoints = [];
+_damage = damage _object;
+
+// add items from previous vehicle here
+_weapons = getWeaponCargo _object;
+_magazines = getMagazineCargo _object;
+_backpacks = getBackpackCargo _object;
+_inv = [_weapons,_magazines,_backpacks];
+
+if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then {
+ _coins = _object getVariable ["cashMoney",0];
+};
+
+{
+ _hit = [_object,_x] call object_getHit;
+ if ((_hit select 0) > 0) then {
+ _newHitpoints set [count _newHitpoints,[(_hit select 1),(_hit select 0)]];
+ } else {
+ _newHitpoints set [count _newHitpoints,[(_hit select 1),0]];
+ };
+} count _hitpoints;
+
+#ifdef OBJECT_DEBUG
+diag_log ("PUBLISH: Attempt " + str(_object));
+#endif
+
+_dir = _worldspace select 0;
+_uid = _worldspace call dayz_objectUID2;
+
+_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, _damage , _characterID, _worldspace, _inv, _newHitpoints, _fuel,_uid];
+#ifdef OBJECT_DEBUG
+diag_log ("HIVE: WRITE: "+ str(_key));
+#endif
+
+_key call server_hiveWrite;
+
+// GET DB ID
+_key = format["CHILD:388:%1:",_uid];
+#ifdef OBJECT_DEBUG
+diag_log ("HIVE: WRITE: "+ str(_key));
+#endif
+_result = _key call server_hiveReadWrite;
+_outcome = _result select 0;
+
+if (_outcome != "PASS") then {
+ diag_log("HIVE-pv3: failed to get id for : " + str(_uid));
+ _key = format["CHILD:310:%1:",_uid];
+ _key call server_hiveWrite;
+ dze_waiting = "fail";
+ (owner _activatingPlayer) publicVariableClient "dze_waiting";
+} else {
+ _oid = _result select 1;
+ #ifdef OBJECT_DEBUG
+ diag_log("CUSTOM: Selected " + str(_oid));
+ #endif
+
+ _colour = _object getVariable ["Colour","0"];
+ _colour2 = _object getVariable ["Colour2","0"];
+
+ deleteVehicle _object;
+ [_objectID,_objectUID,_object] call server_deleteObjDirect;
+
+ uiSleep 3;
+
+ _newobject = _class createVehicle [0,0,0];
+
+ // switch var to new vehicle at this point.
+ _object = _newobject;
+
+ _object setVariable ["ObjectID", _oid, true];
+ _object setVariable ["lastUpdate",diag_tickTime];
+ _object setVariable ["CharacterID", _characterID, true];
+
+ if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage && {_coins > 0}}) then {
+ _object setVariable ["cashMoney",_coins,true];
+ };
+
+ dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
+
+ clearWeaponCargoGlobal _object;
+ clearMagazineCargoGlobal _object;
+ clearBackpackCargoGlobal _object;
+
+ _object setDir _dir;
+ _object setPosATL _location;
+ _object setVectorUp surfaceNormal _location;
+ _object setDamage _damage;
+
+ if (_colour != "0") then {
+ _object setVariable ["Colour",_colour,true];
+ _clrinit = format ["#(argb,8,8,3)color(%1)",_colour];
+ _object setVehicleInit "this setObjectTexture [0,"+str _clrinit+"];";
+ };
+
+ if (_colour2 != "0") then {
+ _object setVariable ["Colour2",_colour2,true];
+ _clrinit2 = format ["#(argb,8,8,3)color(%1)",_colour2];
+ _object setVehicleInit "this setObjectTexture [1,"+str _clrinit2+"];";
+ };
+
+ processInitCommands;
+ [_weapons,_magazines,_backpacks,_object] call fn_addCargo;
+
+ _clearTurrets = {
+ //By denvdmj (probably, I found it on the biki)
+ private ["_weaponArray","_findRecurse","_class","_obj","_turret","_mags"];
+ _obj = _this;
+
+ _weaponArray = [];
+ _weaponArray set [count _weaponArray,[-1]];
+
+ _findRecurse = {
+ private ["_root", "_class", "_path", "_currentPath", "_thisThis"];
+ _root = (_this select 0);
+ _path = +(_this select 1);
+ _thisThis = _this select 2;
+ for "_i" from 0 to count _root -1 do {
+ _class = _root select _i;
+ if (isClass _class) then {
+ _currentPath = _path + [_i];
+ {_weaponArray set [count _weaponArray, _currentPath];} count getArray (_class >> "weapons");
+ _class = _class >> "turrets";
+ if (isClass _class) then {[_class, _currentPath, _thisThis] call _findRecurse;};
+ };
+ };
+ };
+
+ [configFile >> "CfgVehicles" >> typeOf (_obj) >> "turrets", [], _this] call _findRecurse;
+
+ {
+ _turret = _x;
+ _mags = _obj magazinesTurret _turret;
+ {_obj removeMagazinesTurret[_x,_turret];} count _mags;
+ } forEach _weaponArray;
+ };
+
+ _isAir = _object isKindOf "Air";
+ {
+ _selection = _x select 0;
+ _dam = [_x select 1,(_x select 1) min 0.8] select (!_isAir && {_selection in dayZ_explosiveParts});
+ _object setHit [_selection,_dam];
+ } count _newHitpoints;
+
+ _object setFuel _fuel;
+
+ [_object,"all",true] call server_updateObject;
+
+ _object call fnc_veh_ResetEH;
+ // for non JIP users this should make sure everyone has eventhandlers for vehicles.
+ PVDZE_veh_Init = _object;
+ publicVariable "PVDZE_veh_Init";
+
+ {if (_object isKindOf _x) exitWith {_object disableTIEquipment true;}} count vkc_disableThermal;
+ if (vkc_clearAmmo) then {_object call _clearTurrets;};
+
+ dze_waiting = "success";
+ (owner _activatingPlayer) publicVariableClient "dze_waiting";
+
+ if (_action == "") then {
+ _message = format["PUBLISH: %1(%2) upgraded %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str)];
+ } else {
+ _message = format["PUBLISH: %1(%2) %6 %3 with UID %4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,(_location call fa_coor2str),_action];
+ };
+ diag_log _message;
+};
diff --git a/SQF/dayz_server/init/server_functions.sqf b/SQF/dayz_server/init/server_functions.sqf
index 741f7d9ed..e87b4b23b 100644
--- a/SQF/dayz_server/init/server_functions.sqf
+++ b/SQF/dayz_server/init/server_functions.sqf
@@ -39,7 +39,11 @@ server_verifySender = compile preprocessFileLineNumbers "\z\addons\dayz_server\c
server_swapObject = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_swapObject.sqf"; //Used to downgrade and upgrade Epoch buildables
server_publishVeh = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle.sqf"; //Used to spawn random vehicles by server
server_publishVeh2 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle2.sqf"; //Used to purchase vehicles at traders
-server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades
+if (DZE_VehicleKey_Changer) then {
+ server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3_vkc.sqf"; //Used for car upgrades
+} else {
+ server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_publishVehicle3.sqf"; //Used for car upgrades
+};
server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";
@@ -54,6 +58,10 @@ spawn_mineveins = compile preprocessFileLineNumbers "\z\addons\dayz_server\compi
spawn_roadblocks = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_roadblocks.sqf";
spawn_vehicles = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\spawn_vehicles.sqf";
+if (DZE_Virtual_Garage) then {
+ call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\garage\init.sqf";
+};
+
fnc_veh_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\veh_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles)
server_medicalSync = {
diff --git a/SQF/dayz_server/system/safeZoneRelocate.sqf b/SQF/dayz_server/system/safeZoneRelocate.sqf
new file mode 100644
index 000000000..e3e7f0d99
--- /dev/null
+++ b/SQF/dayz_server/system/safeZoneRelocate.sqf
@@ -0,0 +1,39 @@
+/*
+ Safe Zone Relocate by salival (https://github.com/oiad)
+*/
+
+private ["_customPosition","_minDist","_maxDist","_maxDamage","_message","_nearVehicles","_objDist","_position","_safeZonePos","_safeZoneRadius","_useCustomPosition","_unlock"];
+
+_useCustomPosition = false; // Enable a custom position to move vehicles to (i.e a junk yard)
+_customPosition = [6942.64,15121.6,0]; // Position for vehicles to be moved to if _useCustomPosition = true;
+_minDist = 5; // Minimum distance from the custom position to move vehicles to
+_maxDist = 1000; // Maximum distance from the safe zone position to find a safe position or custom position for relocation, setting this too low can make vehicles spawn very close to other vehicles.
+_objDist = 15; // Minimum distance from the safe position for relocation to the center of the nearest object. Specifying quite a large distance here will slow the function and might often fail to find a suitable position.
+_unlock = false; // Unlock vehicle when moved from the safe zone?
+_maxDamage = 0.75; // Vehicles above or equal to this amount of damage will be deleted
+
+{
+ _safeZonePos = _x select 0;
+ _safeZoneRadius = _x select 1;
+ _nearVehicles = _safeZonePos nearEntities [["Air","LandVehicle","Ship"],_safeZoneRadius];
+ {
+ if (damage _x >= _maxDamage) then {
+ _message = format ["[SAFEZONE] %1 was deleted from the server for being too damaged before relocate: @%2 %3",typeOf _x,mapGridPosition _x,getPosATL _x];
+ diag_log _message;
+ [_x getVariable["ObjectID","0"],_x getVariable["ObjectUID","0"],_x] call server_deleteObjDirect;
+ deleteVehicle _x;
+ } else {
+ if (_useCustomPosition) then {
+ _position = [_customPosition,_minDist,_maxDist,_objDist,1,0,0,[]] call BIS_fnc_findSafePos;
+ } else {
+ _position = [_safeZonePos,(_safeZoneRadius + 50),_maxDist,_objDist,if (_x isKindOf "Ship") then {2} else {0},0,0,[],[_safeZonePos,_safeZonePos]] call BIS_fnc_findSafePos;
+ };
+ _x setPos _position;
+ [_x,"position"] call server_updateObject;
+ if (_unlock && {locked _x}) then {_x setVehicleLock "UNLOCKED"};
+
+ _message = format ["[SAFEZONE] %1 was moved out of a safe zone to: @%2 %3",typeOf _x,mapGridPosition _position,_position];
+ diag_log _message;
+ };
+ } forEach _nearVehicles;
+} forEach DZE_safeZonePosArray;
diff --git a/SQF/dayz_server/system/scheduler/sched_corpses.sqf b/SQF/dayz_server/system/scheduler/sched_corpses.sqf
index b40e7d698..a3e2d4c45 100644
--- a/SQF/dayz_server/system/scheduler/sched_corpses.sqf
+++ b/SQF/dayz_server/system/scheduler/sched_corpses.sqf
@@ -36,7 +36,7 @@ sched_corpses = {
_addFlies = 0;
{
if (local _x && {_x isKindOf "CAManBase"}) then {
- if (_x isKindOf "zZombie_Base") then {
+ if (_x isKindOf "zZombie_Base" || {typeOf _x == "z_bloodsucker"}) then {
_x call sched_co_deleteVehicle;
_delQtyZ = _delQtyZ + 1;
} else {
@@ -97,7 +97,7 @@ sched_corpses = {
if (_onoff == 1) then {
_sound = createSoundSource["Sound_Flies",getPosATL _x,[],0];
_sound attachTo [_x];
- _x setVariable ["sched_co_fliesSource", _sound];
+ _x setVariable ["sched_co_fliesSource", _sound,[false,true] select (DZE_Bury_Body || DZE_Butcher_Body)];
//diag_log "create sound";
};
// broadcast flies status for everyone periodically, to update visible swarm
diff --git a/SQF/dayz_server/system/scheduler/sched_init.sqf b/SQF/dayz_server/system/scheduler/sched_init.sqf
index 1ced93f40..6e4b4d6b2 100644
--- a/SQF/dayz_server/system/scheduler/sched_init.sqf
+++ b/SQF/dayz_server/system/scheduler/sched_init.sqf
@@ -1,4 +1,4 @@
-#define PATH "z\addons\dayz_server\system\scheduler\"
+#define PATH "\z\addons\dayz_server\system\scheduler\"
call compile preprocessFileLineNumbers (PATH+"sched_corpses.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_lootpiles.sqf");
@@ -6,8 +6,11 @@ call compile preprocessFileLineNumbers (PATH+"sched_sync.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_safetyVehicle.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_event.sqf");
call compile preprocessFileLineNumbers (PATH+"sched_traps.sqf");
+if (DZE_Bury_Body || DZE_Butcher_Body) then {
+ call compile preprocessFileLineNumbers (PATH+"sched_lootCrates.sqf");
+};
-[
+local _list = [
// period offset code <-> ctx init code ->ctx
[ 60, 0, sched_event, sched_event_init ],
[ 60, 224, sched_corpses ],
@@ -17,17 +20,12 @@ call compile preprocessFileLineNumbers (PATH+"sched_traps.sqf");
[ 120, 48, sched_safetyVehicle ],
[ 360, 480, sched_fps ],
[ 30, 60, sched_traps, sched_traps_init ]
-] execFSM ("z\addons\dayz_code\system\scheduler\scheduler.fsm");
+];
-//diag_log [ __FILE__, "Scheduler started"];
+if (DZE_Bury_Body || DZE_Butcher_Body) then {
+ _list set [count _list, [ 60, 240, sched_lootCrates ]];
+};
+_list execFSM ("\z\addons\dayz_code\system\scheduler\scheduler.fsm");
-
-
-/*
-// (see ViralZeds.hpp -> zombie_agent.fsm -> zombie_findOwner.sqf), called when a zombie becomes "local" to the server after the player disconnected
-zombie_findOwner = {
- (_this select 0) call fa_deleteVehicle;
-};
-*/
-
+//diag_log [ __FILE__, "Scheduler started"];
\ No newline at end of file
diff --git a/SQF/dayz_server/system/scheduler/sched_lootCrates.sqf b/SQF/dayz_server/system/scheduler/sched_lootCrates.sqf
new file mode 100644
index 000000000..09e1234ff
--- /dev/null
+++ b/SQF/dayz_server/system/scheduler/sched_lootCrates.sqf
@@ -0,0 +1,38 @@
+#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
+
+// Delete loot crates, graves and crosses after 25 minutes
+sched_lootCrates = {
+ private ["_delQtyCrate","_crateTime","_objects","_crates","_graves","_cross"];
+
+ _delQtyCrate = 0;
+ #define CENTER getMarkerPos "center"
+ #define RADIUS ((getMarkerSize "center") select 1)*2
+
+ _crates = CENTER nearObjects ["DZ_AmmoBoxSmallUS",RADIUS];
+ _graves = CENTER nearObjects ["Grave",RADIUS];
+ _cross = CENTER nearObjects ["GraveCross1",RADIUS];
+
+ _objects = _crates + _graves + _cross;
+
+ {
+ if (_x getVariable ["bury",false]) then {
+ _crateTime = _x getVariable ["sched_co_crateTime", -1];
+ if (_crateTime == -1) exitWith {
+ _crateTime = diag_tickTime;
+ _x setVariable ["sched_co_crateTime", _crateTime];
+ };
+ if (diag_tickTime - _crateTime > 25*60) then {
+ _x call sched_co_deleteVehicle;
+ _delQtyCrate = _delQtyCrate + 1;
+ };
+ };
+ } forEach _objects;
+
+#ifdef SERVER_DEBUG
+ if (_delQtyCrate> 0) then {
+ diag_log format ["%1: Deleted %2 bury/butcher objects.",__FILE__,_delQtyCrate];
+ };
+#endif
+
+ objNull
+};
\ No newline at end of file
diff --git a/SQF/dayz_server/system/server_monitor.sqf b/SQF/dayz_server/system/server_monitor.sqf
index 2fa703139..27342b672 100644
--- a/SQF/dayz_server/system/server_monitor.sqf
+++ b/SQF/dayz_server/system/server_monitor.sqf
@@ -102,7 +102,7 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
_damage = _x select 8;
_storageMoney = _x select 9;
- if ((_type isKindOf "AllVehicles")) then {
+ if ((_type isKindOf "AllVehicles") && !(_type isKindOf "StaticWeapon")) then {
_VehicleQueue set [_vQty,_x];
_vQty = _vQty + 1;
} else {
@@ -341,7 +341,7 @@ if ((playersNumber west + playersNumber civilian) == 0) exitWith {
// prevent immediate hive write when vehicle parts are set up
_object setVariable ["lastUpdate",diag_ticktime];
_object setVariable ["ObjectID", _idKey, true];
- if (Z_SingleCurrency && ZSC_VehicleMoneyStorage) then {
+ if (Z_SingleCurrency && {ZSC_VehicleMoneyStorage}) then {
_object setVariable ["cashMoney", _storageMoney, true];
};
@@ -466,4 +466,7 @@ if (_hiveLoaded) then {
//Update gear last after all dynamic vehicles are created to save random loot to database (low priority)
{[_x,"gear"] call server_updateObject} count _vehiclesToUpdate;
};
+ if (DZE_SafeZone_Relocate) then {
+ execVM "\z\addons\dayz_server\system\safeZoneRelocate.sqf";
+ };
};
diff --git a/SQF/dayz_server/traders/caribou.sqf b/SQF/dayz_server/traders/caribou.sqf
index a3ec74c17..b5c2e1281 100644
--- a/SQF/dayz_server/traders/caribou.sqf
+++ b/SQF/dayz_server/traders/caribou.sqf
@@ -45,7 +45,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Raven Rock
["Functionary1_EP1",[1386.9,6941.33,0],93],
diff --git a/SQF/dayz_server/traders/chernarus11.sqf b/SQF/dayz_server/traders/chernarus11.sqf
index dec75ad04..cf5d8991f 100644
--- a/SQF/dayz_server/traders/chernarus11.sqf
+++ b/SQF/dayz_server/traders/chernarus11.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Stary
["Functionary1_EP1",[6324.71,7787,0],64],
diff --git a/SQF/dayz_server/traders/chernarus17.sqf b/SQF/dayz_server/traders/chernarus17.sqf
index 207ade6b3..20c522a87 100644
--- a/SQF/dayz_server/traders/chernarus17.sqf
+++ b/SQF/dayz_server/traders/chernarus17.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Stary
["Functionary1_EP1",[6324.71,7787,0],64],
diff --git a/SQF/dayz_server/traders/cmr_ovaron.sqf b/SQF/dayz_server/traders/cmr_ovaron.sqf
index 8bfb90aee..7e1d397fd 100644
--- a/SQF/dayz_server/traders/cmr_ovaron.sqf
+++ b/SQF/dayz_server/traders/cmr_ovaron.sqf
@@ -48,7 +48,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Lissabon
["Functionary1_EP1",[4349.68,6725.49,0],179],
diff --git a/SQF/dayz_server/traders/fdf_isle1_a.sqf b/SQF/dayz_server/traders/fdf_isle1_a.sqf
index a97bb37f2..09d493495 100644
--- a/SQF/dayz_server/traders/fdf_isle1_a.sqf
+++ b/SQF/dayz_server/traders/fdf_isle1_a.sqf
@@ -44,7 +44,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Jesco
["Functionary1_EP1",[9662.23,10879.8,0],0],
diff --git a/SQF/dayz_server/traders/isladuala.sqf b/SQF/dayz_server/traders/isladuala.sqf
index 0a30b92f6..e5ed5fdd5 100644
--- a/SQF/dayz_server/traders/isladuala.sqf
+++ b/SQF/dayz_server/traders/isladuala.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Camara
["Functionary1_EP1",[2001.31,1196.58,0],342],
diff --git a/SQF/dayz_server/traders/lingor.sqf b/SQF/dayz_server/traders/lingor.sqf
index f406bdf5f..7d700eb35 100644
--- a/SQF/dayz_server/traders/lingor.sqf
+++ b/SQF/dayz_server/traders/lingor.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
["Functionary1_EP1",[3020.2061,5945.2783,0.23],0],
["Functionary1_EP1",[4140.2051,1505.2682,2.3],55],
diff --git a/SQF/dayz_server/traders/namalsk.sqf b/SQF/dayz_server/traders/namalsk.sqf
index e4c4da940..6caa36097 100644
--- a/SQF/dayz_server/traders/namalsk.sqf
+++ b/SQF/dayz_server/traders/namalsk.sqf
@@ -28,7 +28,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Sebjan
["Functionary1_EP1",[6215.8,9177.55,0],133],
diff --git a/SQF/dayz_server/traders/napf.sqf b/SQF/dayz_server/traders/napf.sqf
index ced24a451..a558b6eeb 100644
--- a/SQF/dayz_server/traders/napf.sqf
+++ b/SQF/dayz_server/traders/napf.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
["Functionary1_EP1",[12399.83,5054.3413,0.2],52],
["Functionary1_EP1",[15529.827,13236.555,2.38],164],
diff --git a/SQF/dayz_server/traders/panthera2.sqf b/SQF/dayz_server/traders/panthera2.sqf
index 40c4b4a50..a1b5788ab 100644
--- a/SQF/dayz_server/traders/panthera2.sqf
+++ b/SQF/dayz_server/traders/panthera2.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
["Functionary1_EP1",[4770.4067,7482.2651,-1.7],0],
["Functionary1_EP1",[4431.1997,1616.5604,1.9],-85],
diff --git a/SQF/dayz_server/traders/sauerland.sqf b/SQF/dayz_server/traders/sauerland.sqf
index bb73ad3e5..81d9a1c47 100644
--- a/SQF/dayz_server/traders/sauerland.sqf
+++ b/SQF/dayz_server/traders/sauerland.sqf
@@ -58,7 +58,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Seedorf
["Functionary1_EP1",[15488.6,17014.2,0],172],
diff --git a/SQF/dayz_server/traders/smd_sahrani_a2.sqf b/SQF/dayz_server/traders/smd_sahrani_a2.sqf
index 7a12542d1..76374556e 100644
--- a/SQF/dayz_server/traders/smd_sahrani_a2.sqf
+++ b/SQF/dayz_server/traders/smd_sahrani_a2.sqf
@@ -60,7 +60,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Corazol
["Functionary1_EP1",[12552.1,8355.03,0],29],
diff --git a/SQF/dayz_server/traders/takistan.sqf b/SQF/dayz_server/traders/takistan.sqf
index 572559586..f3fb3b54c 100644
--- a/SQF/dayz_server/traders/takistan.sqf
+++ b/SQF/dayz_server/traders/takistan.sqf
@@ -56,7 +56,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
//Nur
["Functionary1_EP1",[1964.39,12575,0],200],
diff --git a/SQF/dayz_server/traders/tavi.sqf b/SQF/dayz_server/traders/tavi.sqf
index e3552b297..8ce73806d 100644
--- a/SQF/dayz_server/traders/tavi.sqf
+++ b/SQF/dayz_server/traders/tavi.sqf
@@ -80,7 +80,7 @@
] call server_spawnTraders;
// Bankers
-if (Z_singleCurrency && Z_globalBanking && Z_globalBankingTraders) then {
+if (Z_singleCurrency && {Z_globalBanking && Z_globalBankingTraders}) then {
[
["Functionary1_EP1",[5461.0132,8762.3438,0.056497198],52],
["Functionary1_EP1",[11026.932,842.23804,0.18712912],138.57352],
diff --git a/SQF/dayz_sfx/CfgMusic.hpp b/SQF/dayz_sfx/CfgMusic.hpp
index e6338ee41..8c5c105c3 100644
--- a/SQF/dayz_sfx/CfgMusic.hpp
+++ b/SQF/dayz_sfx/CfgMusic.hpp
@@ -10,12 +10,6 @@ class CfgMusic
name = "DayZTrackDeath";
sound[] = {"\dayz_sfx\tracks\track_death_1.ogg", db+0, 1.0};
};
- class dayz_track_intro_1
- {
- name = "DayZTrackIntro";
- sound[] = {"\dayz_sfx\tracks\track_intro_1.ogg", db+0, 1.0};
- duration = ;
- };
class z_suspense_0
{
name = "";
diff --git a/SQF/dayz_sfx/CfgSounds.hpp b/SQF/dayz_sfx/CfgSounds.hpp
index fd3b516dc..fccdc2da7 100644
--- a/SQF/dayz_sfx/CfgSounds.hpp
+++ b/SQF/dayz_sfx/CfgSounds.hpp
@@ -9,11 +9,6 @@ class CfgSounds {
sound[] = {"\dayz_sfx\effects\chopwood.ogg", 0.1, 1, 50};
titles[] = {};
};
- class z_minestone_0 {
- name = "";
- sound[] = {"\dayz_sfx\effects\minestone.ogg", 0.1, 1, 50};
- titles[] = {};
- };
class heartbeat_1 {
name = "";
sound[] = {"\dayz_sfx\effects\heartbeat_1",0.8,1,30};
@@ -841,4 +836,69 @@ class CfgSounds {
sound[] = {"\dayz_sfx\effects\switch.ogg",0.5,1};
titles[] = {};
};
+ class z_bloodatt0_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\attack_0.ogg",0.177828,1};
+ titles[] = {};
+ };
+ class z_bloodatt1_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\attack_1.ogg",0.177828,1};
+ titles[] = {};
+ };
+ class z_bloodatt2_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\attack_2.ogg",0.177828,1};
+ titles[] = {};
+ };
+ class z_bloodatt3_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\attack_3.ogg",0.177828,1};
+ titles[] = {};
+ };
+ class z_bloodgrowl0_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\distant_growl_0.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodgrowl1_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\distant_growl_1.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodgrowl2_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\distant_growl_2.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodgrowl3_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\distant_growl_3.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodgrowl4_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\distant_growl_4.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodforest1_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_1.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodforest2_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_2.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodforest3_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_3.ogg",0.25118899,1};
+ titles[] = {};
+ };
+ class z_bloodforest4_0 {
+ name = "";
+ sound[] = {"\dayz_sfx\bloodsucker\forest_hidden_4.ogg",0.25118899,1};
+ titles[] = {};
+ };
};
diff --git a/SQF/dayz_sfx/bloodsucker/attack_0.ogg b/SQF/dayz_sfx/bloodsucker/attack_0.ogg
new file mode 100644
index 000000000..296c47745
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/attack_0.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/attack_1.ogg b/SQF/dayz_sfx/bloodsucker/attack_1.ogg
new file mode 100644
index 000000000..a8b6b8eca
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/attack_1.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/attack_2.ogg b/SQF/dayz_sfx/bloodsucker/attack_2.ogg
new file mode 100644
index 000000000..8e0dbb930
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/attack_2.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/attack_3.ogg b/SQF/dayz_sfx/bloodsucker/attack_3.ogg
new file mode 100644
index 000000000..06fd4163a
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/attack_3.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg
new file mode 100644
index 000000000..5e13b69f1
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/distant_growl_0.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg
new file mode 100644
index 000000000..b4ff7de31
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/distant_growl_1.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg
new file mode 100644
index 000000000..8f643dbc4
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/distant_growl_2.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg
new file mode 100644
index 000000000..903ce159e
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/distant_growl_3.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/distant_growl_4.ogg b/SQF/dayz_sfx/bloodsucker/distant_growl_4.ogg
new file mode 100644
index 000000000..0215d8ad9
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/distant_growl_4.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg
new file mode 100644
index 000000000..8a83653e5
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/forest_hidden_1.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_2.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_2.ogg
new file mode 100644
index 000000000..0215d8ad9
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/forest_hidden_2.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg
new file mode 100644
index 000000000..0bc0874ff
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/forest_hidden_3.ogg differ
diff --git a/SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg b/SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg
new file mode 100644
index 000000000..7f889a360
Binary files /dev/null and b/SQF/dayz_sfx/bloodsucker/forest_hidden_4.ogg differ
diff --git a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt
index 4e3c8ae05..d46db7f7b 100644
--- a/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt
+++ b/Server Files/DZE_Server_Config/BattlEye/createvehicle.txt
@@ -1,14 +1,14 @@
//new
-5 !(^DZ_|^z_|^pz_|^WeaponHolder|Box|dog|PZombie_VB|^Smoke|^Chem|^._40mm|_DZ$|^Trap) !=(SeaGull|SmallSecondary|HelicopterExplo(Small|Big)|Stash(Small|Medium)(|[1-4])) !=(CZ_VestPouch_EP1|R_M136_AT|R_MEEWS_HEAT|Wire_cat1) !TentStorage !=(JackDaniels|(Tin|Soda)Can|RoadFlare|WoodenArrowF|zZombie_Base|Parachute(West|C)|Grenade(_|HandTimed)(West|East)) !=(CMflareAmmo|Pipebomb) !=(WildBoar|Rabbit|Sheep|Sheep(01_EP1|02_EP1)|Goat|Goat(01_EP1|02_EP1)|Hen|Cow0[1234]|Cow01_EP1|Cock) !=Blood_Trail_DZ !^(Wooden|Metal)Fence !^WoodenGate_ !=(ShantyHouse(|Stage[2-7])|SurvivorWorkshop(|Stage2|[ABC]Stage[345])|WorkBench) !=explosive_bolt !"Land_" !=Sign_(arrow_down_large|sphere10cm)_EP1 !="MAP_c_fern" !="Grave" !"VaultStorage" !="LaserTargetW" !Fort_ !Nest !CMflare !="GyroGrenade" !="CraterLong" !="pook_camel_HE" !="Fin" !="Pastor" !_DZE[12]$ !"TallSafe"
+5 !(^DZ_|^z_|^pz_|^WeaponHolder|Box|dog|PZombie_VB|^Smoke|^Chem|^._40mm|_DZ$|^Trap) !=(SeaGull|SmallSecondary|HelicopterExplo(Small|Big)|Stash(Small|Medium)(|[1-4])) !=(CZ_VestPouch_EP1|R_M136_AT|R_MEEWS_HEAT|Wire_cat1) !TentStorage !=(JackDaniels|(Tin|Soda)Can|RoadFlare|WoodenArrowF|zZombie_Base|Parachute(West|C)|Grenade(_|HandTimed)(West|East)) !=(CMflareAmmo|Pipebomb) !=(WildBoar|Rabbit|Sheep|Sheep(01_EP1|02_EP1)|Goat|Goat(01_EP1|02_EP1)|Hen|Cow0[1234]|Cow01_EP1|Cock) !=Blood_Trail_DZ !^(Wooden|Metal)Fence !^WoodenGate_ !=(ShantyHouse(|Stage[2-7])|SurvivorWorkshop(|Stage2|[ABC]Stage[345])|WorkBench) !=explosive_bolt !"Land_" !=Sign_(arrow_down_large|sphere10cm)_EP1 !="MAP_c_fern" !="Grave" !"VaultStorage" !="LaserTargetW" !Fort_ !Nest !CMflare !="GyroGrenade" !="CraterLong" !="pook_camel_HE" !="Fin" !="Pastor" !_DZE[12]$ !"TallSafe" !=GraveCross1
5 SeaGull //set to its own line so we know which kick we have here with out looking in the logs
-1 ^DZ_ !=DZ_(British_ACU|Czech_Vest_Pouch|(TK_Assault_Pack|Patrol_Pack|Assault_Pack|ALICE_Pack|CivilBackpack|Backpack|LargeGunBag|GunBag)_EP1) !=DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)
-1 ^z_ !=z_((|new_)villager[1234]|(|new_)worker[1234]|teacher|hunter|suit[1-6]|soldier(|_pilot|_heavy)|policeman(|2)|doctor|priest) !=z_(citizen[1-4]|profiteer[1-4]|rocker[1-4]|lumberjack[1-4]|hunter[2345]|assistant|pilot|takistani[1-6]) !z_soldier_(usmc|fr|cdf|ru|gue|ins|tk|cz|un|ger|baf|pmc|acr) !=z_(dealer|gardener|mafiaboss|postman[1-4]|prisoner[1-3]|firefighter[1-5]|civilian([1-9]|1[0-5]))
+1 ^DZ_ !=DZ_(British_ACU|Czech_Vest_Pouch|(TK_Assault_Pack|Patrol_Pack|Assault_Pack|ALICE_Pack|CivilBackpack|Backpack|LargeGunBag|GunBag)_EP1) !=DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox) !DZ_AmmoBox
+1 ^z_ !=z_((|new_)villager[1234]|(|new_)worker[1234]|teacher|hunter|suit[1-6]|soldier(|_pilot|_heavy)|policeman(|2)|doctor|priest) !=z_(citizen[1-4]|profiteer[1-4]|rocker[1-4]|lumberjack[1-4]|hunter[2345]|assistant|pilot|takistani[1-6]) !z_soldier_(usmc|fr|cdf|ru|gue|ins|tk|cz|un|ger|baf|pmc|acr) !=z_(dealer|gardener|mafiaboss|postman[1-4]|prisoner[1-3]|firefighter[1-5]|civilian([1-9]|1[0-5])) !=z_bloodsucker
1 ^WeaponHolder !=WeaponHolder !WeaponHolder_part !=WeaponHolder_(Item(DomeTent|CamoNet|Crowbar|Fuelcan|Hatchet|Jerrycan|Tent)|Melee(BaseBallBat(|Nails)|BatBarbed|Machete)) !=WeaponHolder_Part(Engine|Fueltank|Generic|Glass|VRotor|Wheel) !=WeaponHolder_Item(WorkBench|MetalSheet|ConcreteBlock|RSJ|Pickaxe|Generator)
-1 Box !=(DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)|Item(Match|Tool)box|equip_pvc_box|DebugBoxPlayer_DZ|WeaponHolder_ItemLockbox) !=LockboxStorage(Locked|WinterLocked|2Locked|Winter2Locked)
+1 Box !=(DZ_((AmmoBox|ExplosiveBox)(RU|US)|MedBox|CardboardBox)|Item(Match|Tool)box|equip_pvc_box|DebugBoxPlayer_DZ|WeaponHolder_ItemLockbox) !=LockboxStorage(Locked|WinterLocked|2Locked|Winter2Locked) !DZ_AmmoBox
1 ^Smoke !=SmokeShell(|Red|Green|Yellow) !=SmokeLauncherAmmo
1 ^Chem !=Chem(Green|Red|Blue)
1 ^._40mm !=(G_40mm_HE|G_40mm_Smoke|F_40mm_White|F_40mm_Green)
-1 _DZ$ !=(BanditW?[12]|Camo1|Sniper1W?|Soldier1|SurvivorW?([123]|desert|pink|combat|urban|winter)|Blood_Trail)_DZ !=(Land_Fire|Sandbag1|Hedgehog|BearTrap|CamoNet|GrenadeHandTimedWest|flamable)_DZ !=(Priest|Doctor|Assistant|Worker[134]|Soldier_(Crew|TL|Sniper|Bodyguard_AA12)_PMC)_DZ !=((Functionary1|Haris_Press|Pilot|US_Soldier)_EP1|Reporter|MafiaBoss|Dealer)_DZ !=pz_(policeman|suit[12]|worker[123]|doctor|teacher|hunter|villager[123]|priest)_DZ !=(GUE_Soldier_(MG|Sniper|Crew|CO|2)|Apo_Rifleman_0[1-6])_DZ !=(UN_CDF_Soldier(_Guard)?_EP1|BAF_Soldier_(Officer|N)_MTP|Nac_Soldier|Tamika)_DZ !=GhillieFull_(Desert0[1-8]|Snow0[1-5]|Urban01|Wood(0[1-9]|1[1-6]))_DZ !=SG_GRU_(TL|Scout|Sniper|Spotter|Assaultman|Medic|Marksman|Operator|MG)(|_W|_D)_DZ !=(Firefighter([1-5]|_Officer[12])|Postman[1-4]|SchoolTeacher|Civilian([1-9]|1[0-4]))_DZ !=((Drake|Graves)_Light|GUE_Commander|Hunter|Gardener|RUS_(Soldier1|Commander))_DZ !=(RU_(Soldier(|_Officer|_Crew)|Policeman2?)|Ins_(Soldier_(2|GL|Crew)|Commander))_DZ !=(MVD_Soldier|CDF_Soldier|Prisoner[123]|Rocker[1-4]|BusinessMan|Rocket)_DZ !=(INS_(Lopotev|Soldier_(AR|CO)|Bardak|Worker2)|USMC_Soldier_(Officer|MG|Pilot))_DZ !=FR_(TL|R|Marksman|Assault_R|OHara|Rodriguez|Sapper)_DZ !=TK_(Special_Forces_MG|Soldier_Sniper|Commander|GUE_Soldier|CIV_Takistani0[1346]|INS_(Soldier(_AR)?|Warlord))_EP1_DZ !=gsc_(military_helmet_|military_head_)(|wdl|grey)_DZ !=gsc_(scientist[12](_head)?|cloth_loner_head)_DZ !=gsc_eco_stalker_(mask|head)_(camo|neutral|head|fred|duty)_DZ !=CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ !=CZ_(Special_Forces_GL_DES|Soldier_Sniper|Soldier_SL_DES)_EP1_DZ !=GER_Soldier(_TL)?_EP1(|_des|_wdl)_DZ !=(Plastic_Pole_EP1|Generator|Server_Rack|FuelPump|FireBarrel|GunRack|GunRack2|WoodCrate|WoodCrate2|WorkBench)_DZ !_Preview_DZ !=CamoWinter(1|2|1W|2W)_DZ !=HookerW(1-5)_DZ !=TK_INS_Soldier_EP(1-3)_DZ !=CinderGarageOpenTop(|Frame|Locked)_DZ !=CinderWall(Doorway|Door|DoorLocked|Window|Half)_DZ !=Wood(Ramp|Floor(|Stairs|Half|Quarter|4x)|TriangleFloor|Large(Wall(|Door|Win))|Small(Wall(|Third|Win|Door))|TriangleWall|GateFrame|Stairs(|Rails|Sans)|Ladder|Handrail|Pillar)_DZ !=MetalFloor(|_Half|_Quarter|4x)_DZ !=GlassFloor(|_Half|_Quarter)_DZ !=(DesertLarge|Desert|Winter|WinterLarge|Forest|ForestLarge)CamoNet_DZ !WoodenFence_ !MetalFence_
+1 _DZ$ !=(BanditW?[12]|Camo1|Sniper1W?|Soldier1|SurvivorW?([123]|desert|pink|combat|urban|winter)|Blood_Trail)_DZ !=(Land_Fire|Sandbag1|Hedgehog|BearTrap|CamoNet|GrenadeHandTimedWest|flamable)_DZ !=(Priest|Doctor|Assistant|Worker[134]|Soldier_(Crew|TL|Sniper|Bodyguard_AA12)_PMC)_DZ !=((Functionary1|Haris_Press|Pilot|US_Soldier)_EP1|Reporter|MafiaBoss|Dealer)_DZ !=pz_(policeman|suit[12]|worker[123]|doctor|teacher|hunter|villager[123]|priest)_DZ !=(GUE_Soldier_(MG|Sniper|Crew|CO|2)|Apo_Rifleman_0[1-6])_DZ !=(UN_CDF_Soldier(_Guard)?_EP1|BAF_Soldier_(Officer|N)_MTP|Nac_Soldier|Tamika)_DZ !=GhillieFull_(Desert0[1-8]|Snow0[1-5]|Urban01|Wood(0[1-9]|1[1-6]))_DZ !=SG_GRU_(TL|Scout|Sniper|Spotter|Assaultman|Medic|Marksman|Operator|MG)(|_W|_D)_DZ !=(Firefighter([1-5]|_Officer[12])|Postman[1-4]|SchoolTeacher|Civilian([1-9]|1[0-4]))_DZ !=((Drake|Graves)_Light|GUE_Commander|Hunter|Gardener|RUS_(Soldier1|Commander))_DZ !=(RU_(Soldier(|_Officer|_Crew)|Policeman2?)|Ins_(Soldier_(2|GL|Crew)|Commander))_DZ !=(MVD_Soldier|CDF_Soldier|Prisoner[123]|Rocker[1-4]|BusinessMan|Rocket)_DZ !=(INS_(Lopotev|Soldier_(AR|CO)|Bardak|Worker2)|USMC_Soldier_(Officer|MG|Pilot))_DZ !=FR_(TL|R|Marksman|Assault_R|OHara|Rodriguez|Sapper)_DZ !=TK_(Special_Forces_MG|Soldier_Sniper|Commander|GUE_Soldier|CIV_Takistani0[1346]|INS_(Soldier(_AR)?|Warlord))_EP1_DZ !=gsc_(military_helmet_|military_head_)(|wdl|grey)_DZ !=gsc_(scientist[12](_head)?|cloth_loner_head)_DZ !=gsc_eco_stalker_(mask|head)_(camo|neutral|head|fred|duty)_DZ !=CZ_(Soldier_(805|Crew|Officer|Recon|Spec([123]|_Demo)|Sniper|Light)(|_Wdl|_Dst)|Soldier805_DES)_ACR_DZ !=CZ_(Special_Forces_GL_DES|Soldier_Sniper|Soldier_SL_DES)_EP1_DZ !=GER_Soldier(_TL)?_EP1(|_des|_wdl)_DZ !=(Plastic_Pole_EP1|Generator|Server_Rack|FuelPump|FireBarrel|GunRack|GunRack2|WoodCrate|WoodCrate2|WorkBench)_DZ !_Preview_DZ !=CamoWinter(1|2|1W|2W)_DZ !=HookerW(1-5)_DZ !=TK_INS_Soldier_EP(1-3)_DZ !=CinderGarageOpenTop(|Frame|Locked)_DZ !=CinderWall(Doorway|Door|DoorLocked|Window|Half)_DZ !=Wood(Ramp|Floor(|Stairs|Half|Quarter|4x)|TriangleFloor|Large(Wall(|Door|Win))|Small(Wall(|Third|Win|Door))|TriangleWall|GateFrame|Stairs(|Rails|Sans)|Ladder|Handrail|Pillar)_DZ !=MetalFloor(|_Half|_Quarter|4x)_DZ !=GlassFloor(|_Half|_Quarter)_DZ !=(DesertLarge|Desert|Winter|WinterLarge|Forest|ForestLarge)CamoNet_DZ !WoodenFence_ !MetalFence_ !Helipad_
1 ^Trap Trap(_Cans|Tripwire(Flare|Grenade|Smoke)|BearTrap(Smoke|Flare))
1=(SmallSecondary|HelicopterExplo(Small|Big)) // log explosions (optional)
1=(PipeBomb|Grenade(_|HandTimed)(West|East)) // log grenades (optional)
diff --git a/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt b/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt
index 6b8afe5a6..1a2430279 100644
--- a/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt
+++ b/Server Files/DZE_Server_Config/BattlEye/publicvariable.txt
@@ -1,5 +1,5 @@
//new
-5 !=remEx(Field|FP) !=(PVCDZ_obj_GutBody|BIS_effects_gepv) !=PVDZ_(hlt_Bleed|obj_(Delete|Publish|RoadFlare|Destroy|Fire)|veh_Save|veh_SF) !=PVDZ_(plr_(Death|Login[12]|LoginRecord|Save|SwitchMove|Delete)|Server(_Simulation|StoreVar|_UpdateGroup)) !=PVDZ_(playerMedicalSync|groupInvite|send|sec_atp) !=PVDZ_objgather_(Delete|Knockdown) !=PVDZE_(obj_(Swap|Trade)|maintainArea|PingSend|veh_(Lock|Publish2|Upgrade)|handleSafeGear|plr_(DeathB|FriendRQ)) !=SK_changeCode
+5 !=remEx(Field|FP) !=(PVCDZ_obj_GutBody|BIS_effects_gepv) !=PVDZ_(hlt_Bleed|obj_(Delete|Publish|RoadFlare|Destroy|Fire)|veh_Save|veh_SF) !=PVDZ_(plr_(Death|Login[12]|LoginRecord|Save|SwitchMove|Delete)|Server(_Simulation|StoreVar|_UpdateGroup)) !=PVDZ_(playerMedicalSync|groupInvite|send|sec_atp) !=PVDZ_objgather_(Delete|Knockdown) !=PVDZE_(obj_(Swap|Trade)|maintainArea|PingSend|veh_(Lock|Publish2|Upgrade)|handleSafeGear|plr_(DeathB|FriendRQ)) !=SK_changeCode !=PVDZE_(query|store|spawn)Vehicle !=PVDZE_maintainGarage
1=BIS_effects_gepv|PVDZ_(hlt_Bleed|obj_Delete|obj_Destroy|obj_Publish|plr_Death|plr_LoginRecord|sec_atp|send)
1=PVDZ_veh_(Save|SF)
1=PVDZE_obj_Swap
diff --git a/Server Files/DZE_Server_Config/BattlEye/scripts.txt b/Server Files/DZE_Server_Config/BattlEye/scripts.txt
index fd094b5af..a20d157dc 100644
--- a/Server Files/DZE_Server_Config/BattlEye/scripts.txt
+++ b/Server Files/DZE_Server_Config/BattlEye/scripts.txt
@@ -1,90 +1,90 @@
//new2
-5 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction"
-5 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa"
-5 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"do {\n_animalbody addMagazine _rawfoodtype" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup"
-5 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa"
-5 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {"
-5 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;"
-5 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";"
-5 allowDammage
-5 allUnits !"} count allUnits;\nlbSort _playerList;" !"if (getPlayerUID _x == _this) exitWith {\n_player = _x;\n};\n} count allUnits;" !"owner _x publicVariableClient \"PVDZ_groupInvite\";\n};\n} count allUnits;" !=" select 1 != 0}) exitWith {\n_targeted = true;\n};\n};\n} count allUnits;\nif (_targeted) exitWith {localize \"str_player_fail_wear4\" "
-5 attachTo !"(_variation * 2)) - _variation)];\n_bolt attachTo [_hitObject,_val,_hitMemoryPt];" !"player playActionNow \"PutDown\";\nuiSleep 2;\n_flare attachTo [player,[0,0,0],\"granat2\"];" !"tchmove \"ainjpfalmstpsnonwrfldnon_carried_still\";\n_dragee attachto [_unit,[-0.2, 0.2, 0]];" !"_source setDropInterval 0.02;\n_point attachTo [_unit,_modelPos,_wound];" !" attachto [_v,[0,0,0],\"destructionEffect" !"publicVariable \"PVDZ_drg_RaDrag\";\n\n_dragee attachto [_unit,[0.1, 1.01, 0]];" !="_l1 attachTo [_lh,[0,0,0],\"light\"];" !"_objectHelper attachTo [player,_offset];" !"_object attachTo [player,_offset];\n\n_position = getPosATL _object;" !="_vehicle attachTo [_liftHeli,[0,0,-7]];" !="_obj attachTo [_axis];" !"_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];" !="_vehicle attachTo [_towTruck,[1.3,-2,2.3]];" !"localize \"STR_EPOCH_ACTIONS_ATTACHTOHELI\"," !=" (getDir _object);\n_objectHelper setPosATL _newPos;\n_object attachTo [_objectHelper];\n_x setobjecttexture [0,\"#(argb,8,8,3)color" !"rInput false; disableUserInput false;\nuiSleep .5;\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"DragPlayer" !="cts, 3];\nif (count _dropObjects > 0) exitWith {};\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"CarryPlaye"
-5 bankMoney !=" [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _bankCoins, true];\n};\ndayz_musicH = [] spawn player_music" !="]];\nctrlSetText [23002,format[\"%1 %2\",player getVariable [\"bankMoney\",0] call BIS_fnc_numberText,CurrencyName]];\n};\n\nATMDialogWi" !="ariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n}" !=" \nZSC_limitOnBank = true; \nZSC_bankObjects = [\"\"]; \nZSC_maxBankMoney = 500000; \nZSC_defaultStorageMultiplier = 200; \nZSC_MaxMone" !="Z_showBankUI) then {\nlocal _bankAmt = player getVariable [\"bankMoney\",0];\n_string = _string + format [\"%1
> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single"
-5 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\""
-5 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu"
-5 clearBackpackCargo
-5 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {"
+1 addAction !", \"\\z\\addons\\dayz_code\\" !=" = -1;\n};\nif (_s1 > 0) then {\ns_player_toggleSnap = player addaction [format[\"\" + \"Snap: %1\" +\"\",snapAc" !="-1;\n};\n\nif (_s1 > 0) then {\ns_player_toggleVector = player addaction [format[\"\" + localize \"STR_EPOCH_ACTIO" !"\"addAction\", " !"raddAction" !="_costs] call _fnc_actionTitle;\nSP_refuel_action = _vehicle addAction [_actionTitle,_folder + \"servicePointActions.sqf\",[\"refuel\""
+1 addBackpack !"addBackpackCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} count _objWpnTypes;" !"addBackpack _item;\n};\n};\nformat[localize \"str_c" !"case 3: {_holder addBackpackCargoGlobal [_item,_amount];};\n};\n\n\n" !"}) then {\n_newUnit addBackpack _newBackpackType;\n\nd" !"addBackpack _backpackType; \ndayz_myBackpack = unitBackpack player;\n\n\n\n_backpackWpnT" !"};\n} count _wpns;\n\nif (_bcpk != \"\") then {\nplayer addBackpack" !"1 == \"trade_backpacks\") then {\nDZE_myVehicle addBackpack" !"7 addBackpackCargoGlobal [_create,_qty];\n};\nif (surfaceIsWater" !"case 5: {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else" !="m (2 + 1)];\n};\n};\n\nif (_type == 5) exitWith {\n_container addBackpackCargoGlobal [_item, 1];\n};\n};\n} count ([_group, _count] cal" !="5) exitWith {\nif (isNull unitBackpack _unit) then {\n_unit addBackpack _item;\n};\n};\n};\n} foreach ([_group, _count] call dz_fn_loo" !="al [_itemOut,_countOut]};\nif (_type == 5) exitwith {_item addBackpackCargoGlobal [_itemOut,_countOut]}; \n};\n} else {\n_item addMa" !="forEachIndex]} forEach (_backPackMag select 0);};\n\n_crate addBackpackCargoGlobal [_backPack,1];\n};\n\n_sound = _corpse getVariable"
+1 addMagazine !raddMagazine !"\"addMagazine\", " !"if (isClass (configfile >> \"cfgmagazines\" >> (_item))) then {_unit addMagazine _item;};\n};\n};\n};\n};" !"_vehicle addMagazineTurret [_ammo,_turret];\nplayer removeMagazine" !"if (dayz_actionInProgress) exitWith {" !"addMagazine _x;\n};\n} foreach _items;\nformat[loc" !"addMagazine \"ItemAntibiotic\" + str(_remain" !"sumeDrop\") == 0) then\n{\nplayer addMagazine" !"ion) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon _item;\n};\ncase \"CfgMagazines\":\n{\nplayer addMagazine" !"addMagazine [\"12Rnd_Quiver_Wood\",_qty_quiv" !" >> \"containerEmpty\")" !"plant) select 1;\n{\n_item addMagazine" !"addMagazineCargoGlobal [_itemtodrop,1];\n\nformat[localize \"str_f" !"addMagazine _attachment;\n\n\n(findDisplay 10" !"addMagazine getText (configFile >> \"CfgMagazines\" >> _x >> _water" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazine" !"addMagazine _item;\n};\n};\n_idc = _idc" !"_newUnit addMagazine [_x select 0,_x select 1]" !"addMagazine _x } count MeleeMagazines;\n} e" !"_meleeNum < 1) then {\nplayer addMagazine" !"addMagazine _qtyRemaining;\n};\n};\ntrue" !"bag\";\n};\n};\n(_this select 0) addMagazine" !"addMagazine \"wholeBloodBagBNEG\";\n};\n};" !"_qty > 0) then {\n_firePlace addMagazine" !"ONEG\" }; \n};\ndayz_myBackpack addMagazine" !"addMagazine _x;\n_countmags = _countmags +1;\n};\n} count _gmag" !"E\"];\n_lootpile addMagazineCargoGlobal [\"TrapBear\", 1]" !"With\n{\nplayer addMagazine (_this select 1" !"lder addMagazineCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n};\n} co" !"soldItem\"];\n{\n_object addMagazine" !"systemChat localize \"STR_EPOCH_TRADE_" !"if (_silver_1oz > 0) then {\nif (_silver_1oz == 1) then {\nplayer addMagazine" !="Random;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_container addMagazineCargoGlobal [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_c" !="electRandom;\n} else {\n_item = \"ItemBloodbag\";\n};\n};\n_unit addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _i" !="];\n\ncall {\nif (_humanityBody >= DZE_Hero) exitwith {_body addMagazine \"ItemDogTagHero\";};\nif (_humanityBody <= DZE_Bandit) exitw" !="_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addMagazineCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSp" !"eep 3;\n_finished = true;\n};\n\nif (!_finished) then {\n_unit addMagazine _bagUsed;\n_msg = \"str_actions_medical_transfusion_interrup" !="art\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n};\n\nif (_bodyType in [\"Cock\",\"Hen\"]) then"
+1 addWeapon !raddWeapon !"\"addWeapon\", " !"if (isClass (configfile >> \"cfgweapons\" >> (_item))) then {_unit addWeapon _item;}\nelse" !",0]] call dayz_NutritionSystem;\n" !"Remove) == 1}) then {\nplayer addWeapon _create;" !"Display 0;\n\n\nif (_weaponInUse) then\n{\n_muz" !"failChance) then {\nswitch (_selection) do {\ncase \"CfgWeapons\":\n{\nplayer addWeapon" !"addWeapon _fixedItem;\nformat[localize \"str_f" !"_wepcounts = (getWeaponCargo _plant) select 1;\n{\n_item addWeapon" !"addWeapon _repair;\n} else {\n\n[_repair" !"player addWeapon dayz_onBack] select 0;\n};\n\n" !"player addWeapon _addWeapon;\n\nif (vehicle player != player) then {\n_display = find" !"};\n};\n\n\nswitch _type do {\ncase 1: {_holder addMagazineCargoGlobal [_item,_amount];};\ncase 2: {_holder addWeapon" !"l fn_chance) then {\nplayer removeWeapon _x;\nplayer addWeapon _rem" !"else {\n_body addWeapon dayz_onBack;\n};\n};\n\n\n_infect" !"\" >> _x)) then {\nplayer addWeapon _x;\n};\n} count _wpns;\n};" !"lder addWeaponCargoGlobal [_x,(_objWpnQty select _counter)];\n_counter = _counter + 1;\n} co" !"WpnQtys = [];\nif (count _backpackWpn > 0) then {\n_backpackWpnTypes = _backpackWpn sel" !"addWeapon (\"Item\"+str(_remain)+\"Matchbox" !"{\nswitch (_x select 0) do\n{\ncase 2:\n{\n(_this select 0) addWeapon" !"addWeaponCargoGlobal [_bcpkWpn, 1];\n};\n};\n};\n};" !"s;\n};\n\n\nplayer addWeapon \"Loot" !"With\n{\nplayer addWeapon (_this select 1" !"\") then {\n_newUnit addWeapon _secweapon;\n};\n\n" !"soldItem\"];\n{\n_object addWeapon" !"then {\nsystemChat format[localize \"STR_EPOCH_" !"DuplicateTool;\n} else {\nplayer addWeapon" !="al [_item, 1];\n};\n\nif (_type == 2) exitWith {\n_container addWeaponCargoGlobal [_item, 1];\n\n_magazines = getArray (configFile >" !=" addMagazine _item;\n};\n\nif (_type == 2) exitWith {\n_unit addWeapon _item;\n};\n\nif (_type == 5) exitWith {\nif (isNull unitBackp" !="ile >> \"CfgWeapons\" >> _x >> \"type\") == 256) then {\nplayer addWeapon _x;\n} else {\n_x call player_addDuplicateTool;\n};\n};\n} count" !="\n_vehicle = \"WeaponHolder\" createVehicle [0,0,0];\n_vehicle addWeaponCargoGlobal [_item, 1];\n\nif (_isWater) then { \n_fixWaterSpa" !="do {_vehicle addMagazineTurret [_ammo,_turret];};\n_vehicle addWeaponTurret [\"CMFlareLauncher\",_turret];\n} else {\n{_vehicle remov" !="ect 2];\n_cross setVariable [\"bury\",true,true];\n};\n\n{_crate addWeaponCargoGlobal [_x,1]} forEach weapons _corpse;\n{_crate addMaga" !="y do {\nif (_rawfoodtype == \"ItemMutantHeart\") then {\n_body addWeapon _rawfoodtype;\n} else {\n_body addMagazine _rawfoodtype;\n};\n}" !="eaponqty = (_newarray select 1) select _i;\ndayz_myBackpack addWeaponCargoGlobal [_weapon,_weaponqty];\n};\n};\n};\n} else {\nsystemCh" !="CK\",_keyName] call dayz_rollingMessages;};\n} else {\nplayer addWeapon _keyID;\nformat[localize \"STR_CL_VG_ADDED_INVENTORY\",_keyNam"
+1 allDead !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {"
+1 allGroups !"publicVariableServer \"PVDZ_Server_UpdateGroup\";\n};\n} count allGroups;"
+1 allMissionObjects !"[_x,2,0,false,false] spawn BIS_Effects_Burn;\n};\n} count allMissionObjects \"SpawnableWreck\";"
+1 allowDammage
+1 allUnits !"} count allUnits;\nlbSort _playerList;" !"if (getPlayerUID _x == _this) exitWith {\n_player = _x;\n};\n} count allUnits;" !"owner _x publicVariableClient \"PVDZ_groupInvite\";\n};\n} count allUnits;" !=" select 1 != 0}) exitWith {\n_targeted = true;\n};\n};\n} count allUnits;\nif (_targeted) exitWith {localize \"str_player_fail_wear4\" "
+1 attachTo !"(_variation * 2)) - _variation)];\n_bolt attachTo [_hitObject,_val,_hitMemoryPt];" !"player playActionNow \"PutDown\";\nuiSleep 2;\n_flare attachTo [player,[0,0,0],\"granat2\"];" !"tchmove \"ainjpfalmstpsnonwrfldnon_carried_still\";\n_dragee attachto [_unit,[-0.2, 0.2, 0]];" !"_source setDropInterval 0.02;\n_point attachTo [_unit,_modelPos,_wound];" !" attachto [_v,[0,0,0],\"destructionEffect" !"publicVariable \"PVDZ_drg_RaDrag\";\n\n_dragee attachto [_unit,[0.1, 1.01, 0]];" !="_l1 attachTo [_lh,[0,0,0],\"light\"];" !"_objectHelper attachTo [player,_offset];" !"_object attachTo [player,_offset];\n\n_position = getPosATL _object;" !="_vehicle attachTo [_liftHeli,[0,0,-7]];" !="_obj attachTo [_axis];" !"_objectSnapGizmo attachTo [_object,[_x select 0,_x select 1,_x select 2]];" !="_vehicle attachTo [_towTruck,[1.3,-2,2.3]];" !"localize \"STR_EPOCH_ACTIONS_ATTACHTOHELI\"," !=" (getDir _object);\n_objectHelper setPosATL _newPos;\n_object attachTo [_objectHelper];\n_x setobjecttexture [0,\"#(argb,8,8,3)color" !"rInput false; disableUserInput false;\nuiSleep .5;\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"DragPlayer" !="cts, 3];\nif (count _dropObjects > 0) exitWith {};\n\n\n_dragee attachto [_medic,[0.1, 1.01, 0]];\n\n\nPVDZ_send = [_dragee,\"CarryPlaye"
+1 bankMoney !=" [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _bankCoins, true];\n};\ndayz_musicH = [] spawn player_music" !="]];\nctrlSetText [23002,format[\"%1 %2\",player getVariable [\"bankMoney\",0] call BIS_fnc_numberText,CurrencyName]];\n};\n\nATMDialogWi" !="ariable [\"cashMoney\",0];\n_bankCoins = player getVariable [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n}" !=" \nZSC_limitOnBank = true; \nZSC_bankObjects = [\"\"]; \nZSC_maxBankMoney = 500000; \nZSC_defaultStorageMultiplier = 200; \nZSC_MaxMone" !="Z_showBankUI) then {\nlocal _bankAmt = player getVariable [\"bankMoney\",0];\n_string = _string + format [\"%1
> \"" !="wCurrencyUI) then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = for" !=" = [false, [], [], [], 0];\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="= [false, [], [], [], 0];\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\nif (Z_Single" !="(Z_SingleCurrency) then {\n_wealth = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_enoughMoney "
+1 clearMagazineCargo !="ddWeaponCargo\", \n\"addMagazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"ti" !="rclearMagazineCargo = 'clearMagazineCargo'" !="rclearMagazineCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearMagazineCargo.sqf')" !=", \"addWeaponCargo\", \"addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMark" !="rclearMagazineCargocode={diag_log(\"WARNING illegal RE rclearMagazineCargocode with args:\"+str(_this));};" !="eeSpace select 5;\n_normalWeaps = _freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_retur" !=" {\n_bpMags = (getMagazineCargo (unitbackpack player));\nclearMagazineCargoGlobal (unitbackpack player);\n\n{\n_count = ((_bpMags sel" !="o {\n\n_ok = false;\n_mags = getMagazineCargo _firePlace;\nclearMagazineCargoGlobal _firePlace;\n\n_fuel = [\"PartWoodPile\",\"ItemLog\",\""
+1 clearWeaponCargo !="Magazine\", \n\"addMagazineCargo\", \n\"clearMagazineCargo\",\n\"clearWeaponCargo\",\n\"endMission\",\n\"failMission\",\n\"titleCut\", \n\"titleText\"" !="rclearWeaponCargo = 'clearWeaponCargo'" !="rclearWeaponCargocode = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands + 'clearWeaponCargo.sqf')" !="addWPCur\", \"animate\", \"callVar\", \"clearMagazineCargo\", \"clearWeaponCargo\", \"createDiaryRecord\", \"createMarkerLocal\", \"createSimp" !="rclearWeaponCargocode={diag_log(\"WARNING illegal RE rclearWeaponCargocode with args:\"+str(_this));};" !="_freeSpace select 6;\n\nclearMagazineCargoGlobal _object;\nclearWeaponCargoGlobal _object;\n\n_returnVar = [];\n_returnMag = [];\n_retu" !="_newarray = [];\n_newarray = [_weparray] + [_qtyarray];\n\nclearWeaponCargoGlobal dayz_myBackpack;\n\n_cntarray = count _weparray;\n\nf"
+1 clearBackpackCargo
+1 closeDisplay !"'closeDisplay'" !"closeDisplay 0" !"closeDisplay 2" !"if (!isNil \"closeDisplay\") then {"
1 compile !"ca\\communityconfiguration" !"ca\\Data\\" !"ca\\missions" !"ca\\modules" !"ca\\ui\\" !"ca\\Warfare2\\" !"scriptName \"Functions\\systems\\fn_inv" !"scriptName \"MP\\data\\script" !"code = compile preprocessFileLineNumbers (BIS_PathMPscriptCommands" !"t = missionConfigFile >> \"onMinimapScript" !="_this call (call compile GetText (configFile >> \"CfgAmmo\" >> _amm >> \"muzzleEffect\"));" !"z\\addons\\dayz_code\\" !"_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};\n_pos set [3" !"{ _x set [1, compile (_x select 1)]; }" !"silver_1oz_b);\n\n{ \nif (!isNil {call compile" !"Var = compile format[\"epoch_death_board_record_" !="RandomSentenceFunc\") then \n{\nBIS_selectRandomSentenceFunc = compile (preprocessFileLineNumbers \"ca\\characters_e\\data\\scripts\\sel"
-5 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r"
-5 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda"
-5 createDisplay
-5 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember"
-5 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];"
-5 createVehicleLocal !="_object = (_x select 1) createVehicleLocal [0,0,0];" !="_plant = _x createVehicleLocal (getMarkerPos \"center\");" !="_point = \"Logic\" createVehicleLocal getPosATL _unit;" !"_object = _type createVehicleLocal [0,0,0];" !" = \"#lightpoint\" createVehicleLocal " !" = \"#particlesource\" createVehicleLocal " !="_para = \"ParachuteWest\" createVehicleLocal [0,0,0];" !="_sign = \"Sign_arrow_down_large_EP1\" createVehicleLocal [0,0,0];" !"_obj = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" !="_objectSnapGizmo = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];"
-5 ctrlAddEventHandler
-5 ctrlSetPosition !="_control ctrlSetPosition [_posX, _posY];" !"3,_h]};\n_control ctrlsetposition _pos;" !="_control ctrlSetPosition [0, (_y + _deltaY)];" !="_disp_ctrl ctrlSetPosition [_posX, _posY];" !="_control ctrlSetPosition _grpPos;" !="_group ctrlSetPosition _pos;" !="((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel;" !="_delayControl ctrlSetPosition [0, _pos];" !="_icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65];"
-5 cutText !"_layer cuttext [\"\",\"plain\"];\n};\nmissionnamespace" !"\n\n\n3100 cuttext [\"\",\"plain\"];" !"} else {\n16 cutText [\"\",\"PLAIN\"];" !"exitWith {\n1 cutText [localize \"" !"progress_monitor.sqf\";\n0 cutText ['','BLACK',0]" !="8 cutText [\"\",\"PLAIN\"];"
-5 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {"
-5 displayAddEventHandler !"bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler [\"keydown\",\"_this call bis_fnc_halo_keydown;\"];"
-5 displaySetEventHandler
+1 createAgent !="_agent = if (_type == \"Pastor\") then {createAgent [_type, _Pos, [], 0, \"NONE\"]} else {createAgent [_type, _Pos, [], 0, \"FORM\"]};" !="_dog = createAgent [_type, _Pos, [], 0, \"NONE\"];" !="\n\n\n_type = _unitTypes call BIS_fnc_selectRandom;\n_agent = createAgent [_type, _position, [], 0, \"CAN_COLLIDE\"];\n_agent setDir (r"
+1 createDialog !="_region = createDialog \"RscDisplaySpawnSelecter\";" !="_gender = createDialog 'RscDisplayGenderSelect';" !="_dialog = createDialog \"bloodTest\";" !"createDialog 'horde_journal_" !"Z_ResetContainer = true;\ncreateDialog \"AdvancedTrading\";" !"createDialog \"DoorManagement\";\ncall DoorNearbyHumans;" !="createDialog \"ComboLockUI\";" !"createdialog \"PlotManagement\";\ncall PlotNearbyHumans;" !"_ok = createDialog \"KeypadUI\";" !"EpochDeathBoardLoad = {\ncreatedialog \"EpochDeathBoardDialog\";" !="if(DZE_doorManagement) then {createdialog \"DoorAccess\";} else {createdialog \"ComboLockUI\";};" !"\ndisableSerialization;\ncreateDialog \"DZ_GroupDialog\";" !"createDialog _dialog;\n\nwaitUntil {!dialog};\n\nif (keypadCancel) exitWith {" !=";\n};\n\nZSC_CurrentStorage setVariable[\"isBusy\",true,true];\ncreateDialog \"BankDialog\";\ncall BankDialogUpdateAmounts;\n\nwaitUntil {!" !="ANKING_NOT_AVAIL\",_typeOf] call dayz_rollingMessages;\n};\n\ncreateDialog \"atmDialog\";\ncall AtmDialogUpdateAmounts;\n\nwaitUntil {!di" !="!_isBusy) then {\nplayer setVariable[\"isBusy\",true,true]; \ncreateDialog \"GivePlayerDialog\";\n_display = uiNamespace getVariable[\"z" !="ked\",\"VaultStorage2\",\"TallSafe\",\"TallSafeLocked\"]) then {\ncreateDialog \"SafeKeyPad\";\n} else {\ncreateDialog \"KeypadUI\";\n};\n};\n\nda" !";\n\nif (count rv_vehicleList > 1) then {\nrv_isOk = false;\n\ncreateDialog \"remoteVehicle\";\n\n_display = uiNamespace getVariable[\"rv_" !="urrencyName]} else {[_amount,true] call z_calcCurrency};\n\ncreateDialog \"vkc\";\n{ctrlShow [_x,false]} count [4803,4850,4851];\n\ncal" !="\"_vgDisplCtl\"];\ndisableSerialization;\n\nvg_hasRun = false;\ncreateDialog \"virtualGarage\";\n\n{ctrlShow [_x,false]} count [2803,2830,"
+1 createDisplay
+1 createMarker !"\"createMarkerLocal\"," !"rcreateMarkerLocal" !"if (isnil 'BIS_GITA_fnc_createMarkers' || false) then {" !"_marker = createMarkerLocal [format[\"groupMember" !">> \"CfgVehicles\" >> _vehicle >> \"displayName\");\n_marker = createMarkerLocal [\"vehicleMarker\" + (str _i),[_position select 0,_pos"
+1 createUnit !="_newUnit = _group createUnit [_class,respawn_west_original,[],0,\"NONE\"];" !="BIS_MPF_logic = BIS_MPF_dummygroup createUnit [\"Logic\", [1000,10,0], [], 0, \"NONE\"];"
+1 createVehicleLocal !="_object = (_x select 1) createVehicleLocal [0,0,0];" !="_plant = _x createVehicleLocal (getMarkerPos \"center\");" !="_point = \"Logic\" createVehicleLocal getPosATL _unit;" !"_object = _type createVehicleLocal [0,0,0];" !" = \"#lightpoint\" createVehicleLocal " !" = \"#particlesource\" createVehicleLocal " !="_para = \"ParachuteWest\" createVehicleLocal [0,0,0];" !="_sign = \"Sign_arrow_down_large_EP1\" createVehicleLocal [0,0,0];" !"_obj = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];" !="_objectSnapGizmo = \"Sign_sphere10cm_EP1\" createVehicleLocal [0,0,0];"
+1 ctrlAddEventHandler
+1 ctrlSetPosition !="_control ctrlSetPosition [_posX, _posY];" !"3,_h]};\n_control ctrlsetposition _pos;" !="_control ctrlSetPosition [0, (_y + _deltaY)];" !="_disp_ctrl ctrlSetPosition [_posX, _posY];" !="_control ctrlSetPosition _grpPos;" !="_group ctrlSetPosition _pos;" !="((uiNamespace getVariable 'DAYZ_GUI_waiting') displayCtrl 1400) ctrlSetPosition _sandLevel;" !="_delayControl ctrlSetPosition [0, _pos];" !="_icon ctrlSetPosition [(_screen select 0),(_screen select 1),.99,.65];"
+1 cutText !"_layer cuttext [\"\",\"plain\"];\n};\nmissionnamespace" !"\n\n\n3100 cuttext [\"\",\"plain\"];" !"} else {\n16 cutText [\"\",\"PLAIN\"];" !"exitWith {\n1 cutText [localize \"" !"progress_monitor.sqf\";\n0 cutText ['','BLACK',0]" !="8 cutText [\"\",\"PLAIN\"];"
+1 deleteMarker !"} count allDead;\n\n\nif (dayz_oldBodyCount > _bodyCount) then {" !"ocateMarkerTime = 60; \n\n_i = 0;\nfor \"_i\" from 0 to 60 do {deleteMarkerLocal (\"vehicleMarker\"+ (str _i));};\n\nif (count _keyIDS < "
+1 displayAddEventHandler !"bis_fnc_halo_keydown_eh = (finddisplay 46) displayaddeventhandler [\"keydown\",\"_this call bis_fnc_halo_keydown;\"];"
+1 displaySetEventHandler
1 DZE_doorManagementAdmins !="\n\n\n\n\n\n\n\n\n\n\n\nDZE_doorManagementMustBeClose = false; \nDZE_doorManagementAdmins = []; \nDZE_doorManagementAllowManualCode = true; \nD" !="true; };\n} count _doorFriends;\n\n\n\n\nif(_playerUID in DZE_DoorManagementAdmins) then { _isDoorAdmin = true; };\n};\n\n\n\n[ _isOwner\n, " !="ove select 0) == _ownerPUID && (!(dayz_playerUID in DZE_doorManagementAdmins) && !(dayz_playerUID == _ownerPUID))) exitWith {sys"
1 DZE_PlotManagementAdmins !=" = true; \n\n\nDZE_plotManagementMustBeClose = false; \nDZE_PlotManagementAdmins = []; \nDZE_MaxPlotFriends = 10; \nDZE_maintainCurren" !="true; };\n} count _plotFriends;\n\n\n\n\nif(_playerUID in DZE_PlotManagementAdmins) then { _isPlotAdmin = true; };\n};\n\n\n\nif(_targetTyp" !="lot = DZE_requireplot;\n_isAdmin = dayz_playerUID in DZE_PlotManagementAdmins;\n\nif (!canbuild) exitWith {dayz_actionInProgress = "
-5 enableEnvironment
-5 endMission !"rendMission" !"clearWeaponCargo\",\n\"endMission\"," !"enablesimulation\", \"endMission\"," !"lize \"str_player_login_timeout\", \"PLAIN DOWN\"];\nuiSleep 5;\nendMission" !"\npublicVariableServer \"PVDZ_sec_atp\";\nendMission \"LOSER\";\n};\n" !"Terminate\",\"BACK\"];\ncamDestroy _camera;\n\nendMission" !"endMission \"END1\";\n\n\ndayz_authed = true"
+1 enableEnvironment
+1 endMission !"rendMission" !"clearWeaponCargo\",\n\"endMission\"," !"enablesimulation\", \"endMission\"," !"lize \"str_player_login_timeout\", \"PLAIN DOWN\"];\nuiSleep 5;\nendMission" !"\npublicVariableServer \"PVDZ_sec_atp\";\nendMission \"LOSER\";\n};\n" !"Terminate\",\"BACK\"];\ncamDestroy _camera;\n\nendMission" !"endMission \"END1\";\n\n\ndayz_authed = true"
1 entities !"nearEntities" !="\n if (isnil 'BIS_fnc_sceneCreateSoundEntities' || false) then {\n BIS_fnc_sceneCreateSoundEntities = {\n i" !="_loginCompleted = true;\n\n\ndayz_currentGlobalZombies = count entities \"zZombie_Base\";\n\n{\ncall compile preprocessFileLineNumbers (" !="haracterID)) then {\n_plotPoles = _plotPoles +1;\n};\n} count (entities \"Plastic_Pole_EP1_DZ\");\n};\n} else {\n_plotcheck = [player, f" !="VDZ_sec_atp\";\n};\n};\n\nif (isNull _grp) then { _grp = group ((entities 'FunctionsManager') select 0); };\nif (!isNull _grp) then {\n"
1 execVM !"rexecVM" !"\"execVM\", " !="[] execVM \"initJIPcompatible.sqf\";" !="_script = [] execVM (BIS_MP_Path + BIS_PATH_SQF + \"JIPWaitFor.sqf\");" !"execVM \"\\ca\\Data\\" !"execVM '\\ca\\Data\\" !"execVM \"\\ca\\missions" !"execVM 'ca\\modules\\" !"execVM \"ca\\modules\\" !"'\\ca\\ui\\" !"\"\\ca\\ui\\" !"scriptName \"MP\\data\\script" !"_handle\"];\n_handle = [_display] execVM _script;\n}" !"execVM '\\z\\addons\\dayz_code\\" !"execVM 'z\\addons\\dayz_code\\" !"execVM \"z\\addons\\dayz_code\\" !"execVM \"\\z\\addons\\dayz_code\\" !"execVM (\"\\z\\addons\\dayz_code\\" !="dayz_rulesHandle = execVM \"rules.sqf\";" !"execvm '\\ASC\\" !"\\usec_ch53\\scripts\\" !"execVM (_actionDir + \"warn.sqf" !="_this execVM \"\\GNT_C185\\scr\\C185_Exhaust.sqf\";[_this select 0] execvm \"\\GNT_C185\\scr\\G_CheckEngine.sqf\";"
-5 failMission !"rfailMission" !"failMission\",\n\"titleCut\"," !"fadeSound\", \"failMission\"," !"if (_debug == 1) then {\ndiag_log (\"End Mission\");\n};\n\nfailMission"
-5 forceEnd
-5 globalMoney !="\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _b" !="rency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVariable[([\"cash" !="13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_numberText,Cu" !="Messages};\n\n_myMoney = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_myMoney = _myMoney + _his" !="xitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney = false;\n\n_m" !="able [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n};\n\n\n[_model, _charID, _humanity, _zombieKills, _head" !="then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = format [\"Humanity: > \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo"
-5 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);"
-5 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];"
-5 loadFile
-5 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks"
-1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="ets,false];\n};\n};\n};\n};\n};\n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o"
-1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get"
-1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nlocal _vehicle = vehicle player;" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa"
-5 onMapSingleClick
-5 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x"
-5 positionCameraToWorld
-5 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"With {};\n\n_old = player;\n_old removeAllEventHandlers \"FiredN" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers"
-5 selectPlayer !"addSwitchableUnit dayz_originalPlayer;\nsetPlayable dayz_originalPlayer;\nselectPlayer dayz_originalPlayer;" !"addSwitchableUnit _newUnit;\nsetPlayable _newUnit;\nselectPlayer _newUnit;"
-5 serverCommand !="_character = if (serverCommandAvailable \"#kick\") then { call sched_tg_follow } else { player };" !"serverCommand (\"#vote kick \" + _selectedName);"
-5 setAperture !"select 1);\n\nif(_NVOn == \"ON\") exitwith\n{\nsetaperture -1" !"+_inc;\n\n_NVOn = (_NV select 0);\n\nif(_NVOn == \"ON\") then {\n\nsetAperture"
-5 setCamUseTI
-5 setDamage !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;"
-5 setDammage
-5 setDate !rsetDate !"\"setDate\", " !"\n\n\nif (!isDedicated) then {\n\"dayzSetDate\" addPublicVariableEventHandler {" !"if (_x != _newdate select _forEachIndex) exitWith {\nsetDate _newdate" !"plr_Login1]; \nPVDZ_send = [player,\"dayzSetDate\",[player]];\npublicVariableServer" !="!isNil \"dayzSetDate\"" !"diag_log ['Date & time received:', dayzSetDate];\nsetDate dayzSetDate;\ndiag"
-5 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];"
-5 setMarkerAlpha
-5 setMarkerBrush
-5 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";"
-5 setMarkerDir
-5 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal"
-5 setMarkerShape
-5 setMarkerSize
-5 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";"
-5 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";"
-5 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve"
-5 setTerrainGrid
-5 setUnitRecoilCoefficient
-5 setVehicle !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};"
-5 setViewDistance
-5 sideLogic !"publicVariable \"BIS_MPF_logic\";"
-5 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera"
+1 failMission !"rfailMission" !"failMission\",\n\"titleCut\"," !"fadeSound\", \"failMission\"," !"if (_debug == 1) then {\ndiag_log (\"End Mission\");\n};\n\nfailMission"
+1 forceEnd
+1 globalMoney !="\"cashMoney\", _characterCoins, true];\nplayer setVariable [\"globalMoney\", _globalCoins, true];\nplayer setVariable [\"bankMoney\", _b" !="rency) then {\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\nplayer setVariable[([\"cash" !="13001,format [\"%1 %2\",[player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0]] call BIS_fnc_numberText,Cu" !="Messages};\n\n_myMoney = player getVariable [([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_myMoney = _myMoney + _his" !="xitWith {}; \n\n_wealth = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n\n_enoughMoney = false;\n\n_m" !="able [\"bankMoney\",0];\n_globalCoins = player getVariable [\"globalMoney\",0];\n};\n\n\n[_model, _charID, _humanity, _zombieKills, _head" !="then {\nlocal _cashAmt = player getVariable[([\"cashMoney\",\"globalMoney\"] select Z_persistentMoney),0];\n_string = format [\"="
+1 groupIcon
+1 HelicopterExplo !"(isNull _who) then {\nif (_ammo != \"\" && _ammo isKindOf \"HelicopterExplo" !"_v = thisTrigger getVariable [\"obj\", objNull];\n" !"_v = thisTrigger getVariable [\"\"obj\"\", objNull];\n" !"\n\n\nremoveallweapons _v;\n\nif (local _v) then {_expl=\"HelicopterExplo"
+1 hideObject !"rhideObject" !"\"hideObject\"" !"(_x select 0) nearestObject (_x select 1);\n_object hideObject" !"_object2 = _ghost2 createVehicleLocal [0,0,0];\nhideObject _object;"
+1 hint !", \"_postFix\"" !rhint !rtaskHint !"\"hint\", " !"\"hintC\", " !"\"taskHint\"," !"_controlHintButton ctrlSettext \"Objectives\";" !"hint (localize \"strwf" !"'BIS_fnc_hints'" !sched_planthint !"call ui_initDisplay;\nhintSilent \"\"" !"hintSilent localize \"str_player_low" !=" select 1;\n_filter = [\"private\",\"dynamic_text\",\"ai_killfeed\",\"hintWithImage\",\"hintNoImage\"]; \n\nif (typeName _message == \"TEXT\") " !="vars select 7) \n] spawn BIS_fnc_dynamicText;\n};\nif (_type == \"hintWithImage\") exitWith {hint parseText format[\"Humanity: > \"CfgVehicles\" >>" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityChange.sqf\"\nprivate [\"_change\",\"_humanity\"];\n\n\n\n\n_change = _this;\n\n_humanity " !"layer]];\npublicVariableServer \"PVDZ_send\";\n\n\n20 call player_humanityChange;\n\nformat[localize \"str_actions_medical_gave_wipes\",(n" !=" [\"_msg\",\"_bagUsed\",\"_bloodResult\",\"_bloodAmount\",\"_unit\",\"_humanityAwarded\",\"_timer\",\"_i\",\"_isClose\",\"_duration\",\"_rhVal\",\"_blo" !="#line 1 \"z\\addons\\dayz_code\\compile\\player_humanityMorph.sqf\"\ncloseDialog 0;\nlocal _charID = _this select 1;\nlocal _model = _thi" !="ody_Value} else {DZE_Butcher_Body_Value};\n_gain call player_humanityChange;\n\ndayz_actionInProgress = false;\n" !="l fn_dynamicTool;\n\ncall {\nif (_isZombie) exitWith {\n\nlocal _humanity = player getVariable [\"humanity\",0];\nplayer setVariable [\"h"
+1 lbCurSel !"_selectedUserIndex = lbCurSel _lbUsersControl;" !="profileNamespace setVariable ['statusUI',(lbCurSel (_this select 0))];" !="profileNamespace setVariable ['streamerMode',(lbCurSel (_this select 0))];" !"_index = lbCurSel _lbcontrol;\n_selectedItem" !"_selected = lbCurSel _list;\n_classname = _list lnbData [_selected, 2];" !="_friendName = _userList lbText (lbCurSel _userList);" !")] call Z_" !"(lbCurSel 7421) call Z_fillCategoryList" !"] call Door" !"] call Plot" !"[(lbCurSel 12001)] " !="[(lbCurSel 21000), ((ctrlParent (_this select 0)) displayCtrl 21001)] spawn EpochDeathBoardClick;" !"((ctrlParent (_this select 0)) closeDisplay 2);" !="_uid = _playerList lbData (lbCurSel _playerList);" !"_myGroup lbData (lbCurSel _myGroup);" !="vkc_charID = (vkc_keyList select 0) select (lbCurSel 4802);vkc_keyName = (vkc_keyList select 1) select (lbCurSel 4802);" !="2800) displayCtrl 2802);\n\n_vehicle = vg_vehicleList select (lbCurSel _control);\n_typeOf = typeOf _vehicle;\n_isLimitArray = typeN" !="Dialog 0;\n_vehicle = (call compile format[\"%1\",lbData[2802,(lbCurSel 2802)]]);\n\nif (vg_removeKey && {_vehicle select 3 != 0} && "
+1 lbSet !"_lbUsersControl lbSetColor [_x, [1,0,0,1]];" !"\n_control lbSetColor [_x, _color];\n};" !"_weaponsLBSetFocus" !="(_this select 0) displayCtrl _idc lbSetCurSel (profileNamespace getVariable [_var,_default]);" !="(_display displayCtrl 105) lbSetColor [_i, [0.06, 0.05, 0.03, 1]];" !" [7421," !"lbSetPicture [7422, _index" !"lbSetPicture [7402, _index" !"lbSetPicture [7401, _index" !="_userList lbSetData [(lbSize _userList) -1,_friendUID];" !" [TraderDialogItemList, _index, " !"_myGroup lbSetData [_index,getPlayerUID _x];" !"ive DZE_myVehicle} && {DZE_myVehicle == _x}) then {\n_control lbSetColor [(lbSize _control)-1,[0, 1, 0, 1]];\n};\n} count rv_vehicl" !="bAdd ((vkc_keyList select 1) select _forEachIndex);\n_control lbSetPicture [_index,getText(configFile >> \"CfgWeapons\" >> ((vkc_ke" !=" 1) >> \"displayName\");\n_control lbAdd _displayName;\n_control lbSetData [(lbSize _control)-1,str(_x)];\nvg_vehicleList set [count "
+1 loadFile
+1 menu !",\"MenuSelected\",\"Draw\",\"VideoStop" !"_menu = _parent displayCtrl (1600 + _i);\n_menu ctrlShow " !"BIS_fnc_commsMenu" !"BIS_fnc_kbMenu" !"call gear_ui_offMenu;" !"dayz_inflame_showMenu" !"\"showCommandingMenu\", " !"rshowCommandingMenu" !"menu_" !"use action menu to " !"\"_menu\",\"_menu1\"" !"fn_gearMenuChecks" !"fn_pauseMenuChecks"
+1 nearEntities !="exit = true;\n} else {\n_nearestObjects = (position player) nearEntities [[\"Air\", \"Car\", \"Motorcycle\", \"Tank\", \"Ship\"], 26];\nif (c" !="jects \"SpawnableWreck\";\n{deleteVehicle _x} count (_setPos nearEntities [\"zZombie_Base\",30]);\nplayer setDir _setDir;\n\nif (dayz_pa" !="((!surfaceIsWater _Pos) AND {(0 == {alive _x} count (_Pos nearEntities [ AllPlayers, 200 ]))}) then {\n_agent = if (_type == \"Pas" !="z, _elevation] ];\n};\n};\n};\n};\n} count ((getPosATL player) nearEntities [\"zZombie_Base\", 30]);\n};\n\n\n_buriedZeds\n};\n" !="call dz_fn_array_any);\n};\n\n_vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !="z_spawnZombies = {alive _x AND local _x} count (_position nearEntities [\"zZombie_Base\",_radius]);\ndayz_CurrentNearByZombies = {a" !="{\nr_player_infected = true;\n\n};\n};\n};\n} count (_mylastPos nearEntities [\"CAManBase\",12]);\nif (dayz_temperatur < ((50 / 100) * (d" !=" < dayz_maxGlobalZeds}) then {\n_zombiesNum = count (_bPos nearEntities [\"zZombie_Base\",(((sizeOf _type) * 2) + 10)]);\nif (_zombi" !="te;\n};\n};\n\n\n_nearByPlayer = ({isPlayer _x} count (_objPos nearEntities [\"CAManBase\",30])) > 0;\nif (!_nearByPlayer) then {\n_posit" !="_entityTime = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer" !="_timeN = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} " !="_waitStart = diag_tickTime;\n\n_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer " !="lt = false;\n_pos = [player] call FNC_GetPos;\n_list = _pos nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n\nif (!i" !="[\"localtargets\",_localtargets,false];\n};\n};\n} count (_pos nearEntities [\"zZombie_Base\",50]);\n} else {\nwhile {alive _projectile} " !="this select 2;\n_pos = _this select 3;\n\n_listTalk = _pos nearEntities [\"zZombie_Base\",_distance];\n\n{\n_distance = _distance max " !="_list = (getposATL _agent) nearEntities [[\"CAManBase\",\"AllVehicles\"],300];\n_isSomeone = ({isPlayer _x} count _list) > 0;\n\n_timeN" !=";};\n\n_playerNear = {isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n\n\n_pos = getPosATL player;\nif ({isPlayer _x} count (_pos nearEntities [\"CAManBase\",40]) > 1) then {\n[_unit,\"hit\",0,false] call " !="[];\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _item) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear && (_isMine or _o" !="hicle _player] call FNC_getPos;\n\n\n_findNearestPole = _pos nearEntities [\"Plastic_Pole_EP1_DZ\", _distance];\n\n_IsNearPlot = count " !="layerNear = {isPlayer _x} count ((getPosATL cursortarget) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {\ndayz_" !="etPos;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S" !="yerNear = {isPlayer _x} count (([player] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {locali" !="ag_tickTime);\n_playerCheck = ({isPlayer _x} count (player nearEntities [\"AllVehicles\",5]) > 1);\n_zedCheck = ((count (player near" !="(_this select 1) && isServer && (({isPlayer _x} count (_z nearEntities ['CAManBase',150])) == 0)) exitWith { _z call sched_co_de" !=" do {\nuiSleep 5;\n};\nhideBody _body;\n\n\n\n\n\n\n_inRange = _pos nearEntities [\"CAManBase\",100];\n{\nif ((isPlayer _x) && {_x != player})" !=" {\n_PlayerNear = {isPlayer _x} count ((getPosATL _holder) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {locali" !="yerNear = {isPlayer _x} count (([_plant] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 12]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_ammo = \"RunOver\";\n};\n} count (([_unit] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],3]);\n};\n};\n};\n\n_end = false" !="{\n_liftHeli = _x;\n_found = true;\n};\n};\n};\n} count (player nearEntities [DZE_HeliAllowTowFrom,15]);\n};\n\nlocal _attached = _cursor" !="z_fn_array_any);\n};\n\nlocal _vehClose = (getPosATL player) nearEntities [[\"Car\",\"Tank\",\"Helicopter\",\"Plane\",\"StaticWeapon\",\"Ship\"" !=" = false;\n\nif (!isNull _this) then {\n_nearPlayers = _this nearEntities [\"CAManBase\", 12];\n_playerNear = ({isPlayer _x} count _ne" !="ePeople = if (DZE_doorManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !"\n\n_PlayerNear = {isPlayer _x} count ((getPosATL _vehicle) nearEntities [\"CAManBase\", 12]) > 1;\nif (_PlayerNear) exitWith {" !="layerNear = {isPlayer _x} count (([_obj] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !"arestVehicle),_x];\n};\n} count (([player] call fnc_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],30]);\n\nif (count _findNeare" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif (!(_object isKindOf \"ATV_Base_EP1\")" !="ePeople = if (DZE_plotManagementMustBeClose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer " !="lot\"];\n\nlbClear 7002;\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n_thePlot = _plots select 0;\n_" !="_area_preview = 1;\n\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestO" !="_PlotPole select 0;\n_target = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n\n_buildables = DZE_" !=" == \"\") exitWith {};\n\n_plots = ([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15];\n\n_thePlot = _plots select 0;\n" !="here100cm_EP1\"; \n\n\n_thePlot = (([player] call FNC_getPos) nearEntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_center = getPosASL" !"arPlayers = {(isPlayer _x && _x != player)} count (player nearEntities [\"CAManBase\",8]);\n\nif ((_object isKindOf \"C130J_US_EP1\" o" !="RANGE = 1500;};CA_ZOMBIE_COUNT = count ((position player) nearEntities ['zZombie_Base',CA_GPS_RANGE]); CA_MAN_COUNT = count ((po" !"ayerNear = {isPlayer _x} count (([_body] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="\n_x setVariable [\"myDest\",_pos,true];\n};\n};\n} count (_pos nearEntities [\"Zed_Base\",_distance]);\n" !=" then {deleteVehicle _x}; \n} forEach ((getPosATL _refObj) nearEntities [\"Zed_Base\",100]);\n\nif (_attacked) then {\nif (r_player_un" !="erNear = {isPlayer _x} count (([_corpse] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {dayz_a" !="ss = false;}; \nif ({isPlayer _x} count ((getPosATL _body) nearEntities [\"CAManBase\", 12]) > 1) exitWith {dayz_actionInProgress =" !="{isPlayer _x} count (([vkc_cursorTarget] call FNC_GetPos) nearEntities [\"CAManBase\", 10]) > 1;\nif (_playerNear) exitWith {call _" !="esult = nil;\n\n_localVehicles = ([player] call FNC_getPos) nearEntities [[\"Air\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n_heliPa" !="ation;\n\nif (surfaceIsWater _location && {count (_location nearEntities [\"Ship\",8]) > 0}) then {\ndeleteVehicle _sign;\nlocalize \"S"
+1 nearestObject !="licVariableEventHandler {_pos = (_this select 1); _obj = nearestObjects [_pos, DZE_isWreckBuilding, 5]; if (count _obj > 0) then" !=" 0;\n_whatIwant = _this select 1;\n_ret = false;\n\n_flame = nearestObjects [_fireplace, [\"flamable_DZ\"], 1];\n_flame = if (count _fl" !="Whitelisted = [];\n_pointsNearby = [];\n_findWhitelisted = nearestObjects [_pos,_whitelist,(_radius + DZE_snapExtraRange)]-[_objec" !=".sqf\"\n\n\n\n\n\nprivate \"_object\";\n\n{\n_object = (_x select 0) nearestObject (_x select 1);\n_object hideObject true;\n_object setVariab" !="\ncall dayz_meleeMagazineCheck;\n{player reveal _x} count (nearestObjects [_position,[\"AllVehicles\",\"WeaponHolder\",\"Land_A_tent\",\"" !="ks.sqf\"\nsetMousePosition [0.5, 0.5];\n\nprivate [\"_exit\",\"_nearestObjects\",\"_rID\",\"_display\",\"_cTarget\",\"_dis\",\"_friendlyTo\",\"_las" !="eenMsg = localize 'str_player_setup_completed';\n_torev4l=nearestObjects [_setPos, Dayz_plants + DayZ_GearedObjects + [\"AllVehicl" !=") then {\n_pPos = [player] call FNC_GetPos;\n_fireplaces = nearestObjects [_pPos, [\"flamable_DZ\",\"Land_Fire\",\"Land_Campfire\"], 8];" !=" \n\n)\nmax 0;\n\nif (_scaleLight < 0.9) then {\n\n_nearFlare = nearestObject [getPosATL (vehicle player),\"RoadFlare\"];\nif (!isNull _ne" !=" call _check}) exitWith { \n_inside = true;\n};\n} forEach (nearestObjects [_unit, [\"Building\"], 50]);\n};\n\n\n_inside\n" !="= _this select 0;\n_ammo = _this select 1;\n\n_projectile = nearestObject [_unit, _ammo];\n_pos = getPosATL _projectile;\n\nif (_ammo " !="\n};\nif (\"workshop\" in _needNear) then {\n_isNear = count (nearestObjects [player, DZE_Workshops, _distance]);\nif(_isNear == 0) th" !="ingPlayer = player;\n_dir = round(random 360);\n_helipad = nearestObjects [player, [\"HeliHCivil\",\"HeliHempty\"], 100];\n\n\nif (count " !="1\",\"land_smd_water_pump\"];\n\n_canFill = call {\n\nif (count nearestObjects [_posATL,_wells,4] > 0) exitwith {[true,false]};\nif (toL" !="d) exitWith {\n_nearWaterHole = [true,_pond];\n};\n} count (nearestObjects [_x, [], 1]);\n\nif (_nearWaterHole select 0) exitWith {};" !="bj select 4;\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_endPos = getPosATL _projectile;\n_doWait =" !="_plantOutput select _index;\n_countOut = 1;\n};\n};\n} count nearestObjects [([player] call FNC_getPos), [], 10];\n\nif (count _findNe" !=" !r_player_unconscious && !_onLadder);\n\n_nearByObjects = nearestObjects [player,_objects,_range];\n\nif (count _nearByObjects == 0" !="= \"workshop\") exitwith {\n_distance = 3;\n_isNear = count (nearestObjects [_pos, DZE_Workshops, _distance]);\nif (_isNear == 0) the" !="earestPole) then {_pos} else {_nearestPole};\nif ((count (nearestObjects [_center,_buildables,_distance])) >= DZE_BuildingLimit) " !="_ammo in [\"Dragged\",\"RunOver\"])}) then {\n_vehicleArray = nearestObjects [([vehicle _unit] call fnc_getPos),[\"Air\",\"LandVehicle\"," !="n _rocks) exitWith { _findNearestRock = _x; };\n} foreach nearestObjects [getPosATL player, [], 8];\n\n\nif (!isNull _findNearestRoc" !="modeltoWorld [0,0,0]};\n_holder = objNull;\n\n\n_nearByPile= nearestObjects [_pos, [\"WeaponHolder\",\"WeaponHolderBase\"],2];\n\nif (coun" !="r);\nlocal _uid = getPlayerUID player;\nlocal _nearLight = nearestObject [player,\"LitObject\"];\nlocal _canPickLight = false;\nlocal " !="p = {\nlocal _doors = [];\nif (r_drag_sqf) then {\n_doors = nearestObjects [player, DayZ_DropDrageeObjects, 3]; \nif (count _doors >" !"With {};\nif (!_unconscious) exitWith {};\n\n_dropObjects = nearestObjects [player, DayZ_DropDrageeObjects, 3];\nif (count _dropObje" !"Name) in dayz_trees}) exitWith {\n\n_tree = _x;\n};\n} count nearestObjects [getPosATL player, [], 20];\n\nif (!isNull _tree) then {\n\n" !="ntities [\"Plastic_Pole_EP1_DZ\",15]) select 0;\n_objects = nearestObjects [_target, DZE_maintainClasses, DZE_maintainRange];\n\n_obj" !="E_LockableStorage + [\"DZ_storage_base\"];\n_count = count (nearestObjects [_target,_buildables,_range]);\n\n_colour = \"#ffffff\";\n\nif" !="e;\n_num = ceil (random (player distance _x));\n};\n} count nearestObjects [player, [], 50];\n\nfor \"_i\" from 1 to 10 do {\nif (!_ispo" !="j select 4;\n\n_projectile = _obj select 6;\n\n_projectile = nearestObject [_unit,_ammo];\n_vUp = vectorUp _projectile;\n_endPos = get" !="player;\nif (_vehicle != player) then {\n_servicePoints = (nearestObjects [getPosATL _vehicle,DZE_SP_Classes,DZE_SP_MaxDistance]) " !="ir\",\"LandVehicle\",\"Ship\"],Z_VehicleDistance];\n_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {playe" !="ts;\n_isNearPlot = (_plotCheck select 1) > 0;\n\n_heliPad = nearestObjects [if (_isNearPlot) then {_plotCheck select 2} else {playe" !="ocalize \"STR_CL_VG_HELIPAD_REMOVED\",typeOf _x];\n} count (nearestObjects [_plotCheck select 2,vg_heliPads,Z_VehicleDistance]);\n} "
+1 nearObjects !="ratorRunning\",false]))} count (([player] call FNC_getPos) nearObjects [\"Generator_DZ\",30]);\nif (_findNearestGen > 0) then {\ns_pl" !="lders = dayz_currentWeaponHolders - 1;\n} count (_worldPos nearObjects [\"ReammoBox\", 1]);\n\nif (_lootChance > random 1 && {dayz_cu" !="rgets == 0) then {\nprivate \"_objects\";\n\n_objects = _agent nearObjects [\"GrenadeHand\", 300]; \n{\nif (!(_x in _targets)) then {\nif " !="er] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pPos nearObjects _distance);\nif(_isNear == 0) then {\n_abort = true;\n_reason" !="s select 0;\n_sign = _this select 1;\n_near = count (player nearObjects [_class,50]);\n\n[_class,_sign,_near] spawn {\n_class = _this" !="with {\n_distance = 3;\n_isNear = {inflamed _x} count (_pos nearObjects _distance);\nif (_isNear == 0) then {\n_abort = true;\n_reaso" !=" (_nearWaterHole select 0) exitWith {};\n} forEach (player nearObjects [\"waterHoleProxy\",50]);\n\n_nearWaterHole" !="yer] call FNC_GetPos;\n_isNear = {inflamed _x} count (_pos nearObjects 3);\nif (_isNear == 0) exitWith {dayz_actionInProgress = fa" !="unt _zeds;\n\n\ndayz_currentWeaponHolders = count (_position nearObjects [\"ReammoBox\",_radius]);\n\n\nif (DZE_Bloodsuckers) then {\nloc"
+1 onMapSingleClick
+1 playableUnits !"for [{_y=0},{_y < count(playableUnits)},{_y=_y+1}] do {" !"typeName player == \"OBJECT\" && {(player in playableUnits" !"AND {((alive _x) AND {((vehicle _x) distance _obj < 150)})}} count playableUnits)}) then {" !="_local = { _unit distance _x < _dis; } count playableUnits <= 1;" !"ManagementMustBeClose) then { player nearEntities [\"CAManBase\", 10] } else { playableUnits };" !=" = false;\n};\n};\n};\nif (!_isOk) exitWith {false};\n} count playableUnits;\n\n_isOk\n" !="lose) then {player nearEntities [\"CAManBase\", 12]} else {playableUnits};\n\n{\nif (isPlayer _x) then {\n_friendUID = getPlayerUID _x"
+1 positionCameraToWorld
+1 removeAllEventHandlers !"_WarnFuel = false;\n};\n\n};\n\n_vehicle removeAllEventHandlers \"IncomingMissile" !"leep _wait;} else {sleep (_wait * 4);};\n};\n\n_vehicle removeAllEventHandlers \"Dammaged" !"lse\"];\n{\n(findDisplay 12) displayCtrl 51 ctrlRemoveAllEventHandlers" !"select 1,0] nearestObject (_x select 2);\n_building removeAllEventHandlers" !"\n\n\n\nif (_this isKindOf \"AllVehicles\") then {\n\n_this removeAllEventHandlers" !"\npublicVariableServer \"PVDZ_veh_Save\";\n};\n};\n\n\n_unit removeAllEventHandlers" !="r == _model) exitWith {};\n\nlocal _old = player;\n_old removeAllEventHandlers \"FiredNear\";\n_old removeAllEventHandlers \"HandleDama"
+1 selectPlayer !"addSwitchableUnit dayz_originalPlayer;\nsetPlayable dayz_originalPlayer;\nselectPlayer dayz_originalPlayer;" !"addSwitchableUnit _newUnit;\nsetPlayable _newUnit;\nselectPlayer _newUnit;"
+1 serverCommand !="_character = if (serverCommandAvailable \"#kick\") then { call sched_tg_follow } else { player };" !"serverCommand (\"#vote kick \" + _selectedName);"
+1 setAperture !"select 1);\n\nif(_NVOn == \"ON\") exitwith\n{\nsetaperture -1" !"+_inc;\n\n_NVOn = (_NV select 0);\n\nif(_NVOn == \"ON\") then {\n\nsetAperture"
+1 setCamUseTI
+1 setDamage !"if (_entity isKindOf \"Animal\") then {\n_entity setDamage 1;" !"player setDamage 1;\n};\n\nif (dayz_onBack != \"\") then {\nif (dayz_onBack in w" !"if (_ent isKindOf \"Animal\" || _ent isKindOf \"zZombie_base\") then {\n_ent setDamage 1;" !="Server \"PVDZ_veh_Save\";\n\nif (_allRepaired) then {\n_vehicle setDamage 0;\n_vehicle setVelocity [0,0,1];\n[format[localize \"STR_CL_S"
+1 setDammage
+1 setDate !rsetDate !"\"setDate\", " !"\n\n\nif (!isDedicated) then {\n\"dayzSetDate\" addPublicVariableEventHandler {" !"if (_x != _newdate select _forEachIndex) exitWith {\nsetDate _newdate" !"plr_Login1]; \nPVDZ_send = [player,\"dayzSetDate\",[player]];\npublicVariableServer" !="!isNil \"dayzSetDate\"" !"diag_log ['Date & time received:', dayzSetDate];\nsetDate dayzSetDate;\ndiag"
+1 SetEventHandler !"\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n};" !"inGameUISetEventHandler [\"Action\",\"false\"];" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n_pos set [3,_h" !="];\n};\n\n_menu ctrlSetText format[_type,_name];\n_menu ctrlSetEventHandler [\"ButtonClick\",_compile];\n_i = _i + 1;\n};\n\nlocal _isKey "
+1 setMarkerAlpha
+1 setMarkerBrush
+1 setMarkerColor !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !"eLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0"
+1 setMarkerDir
+1 setMarkerPos !"\"setMarkerPosLocal\"," !"rsetMarkerPosLocal"
+1 setMarkerShape !"tr _i),[_position select 0,_position select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker s"
+1 setMarkerSize !"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\","
+1 setMarkerText !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !"rOrange\";\n_marker setMarkerSizeLocal [1.0, 1.0];\n_marker setMarkerTextLocal format [\"%1\",_name];\nsystemChat format[localize \"STR"
+1 setMarkerType !",if (_vehicle == _x) then {name _x} else {_vehicle call dayz_getCrew}];\n_marker setMarkerColorLocal \"ColorGreen\";" !" select 1]];\n_marker setMarkerShapeLocal \"ICON\";\n_marker setMarkerTypeLocal \"DOT\";\n_marker setMarkerColorLocal \"ColorOrange\";\n_m"
+1 setPosASL !="_unit setPosAsl [(_position select 0), (_position select 1), (LHA_height+1)];" !="_flame setPosASL [_pos select 0,_pos select 1,(_pos select 2)+0.2];" !="_fire setPosASL _location;" !"_objectHelper setPosASL _position;\n} else {" !"_b0x1337 setPosASL (getPosASL player);\n} else {" !"_obj setPosASL [_center select 0, _a, _b];" !"_objectSnapGizmo setPosASL " !"_para setposasl [\n" !"_thingy setPosASL (ATLToASL _pos);\n} else {" !="> \"fixWaterPos\");\nif (_fixWaterSpawn == 1) then {\n_vehicle setPosASL (_pos);\n} else {\n_vehicle setPos (_pos);\n}; \n} else {\n_ve"
+1 setTerrainGrid
+1 setUnitRecoilCoefficient
+1 setVehicle !"if(_status) then {\n_vehicle setVehicleLock \"LOCKED\";\n} else {\n_vehicle setVehicleLock \"UNLOCKED\";\n};" !="stentMoney),(_wealth - _amount),true];};\n\nvkc_cursorTarget setVehicleLock \"LOCKED\";\nplayer playActionNow \"Medic\";\n\n_position = ["
+1 setViewDistance
+1 sideLogic !"publicVariable \"BIS_MPF_logic\";"
+1 switchCamera !"\"switchCamera\", " !"rswitchCamera" !"player switchCamera _currentCamera;\nif (_currentWpn !=" !"< 150) && random 1 > 0.5) then {\n_killer switchcamera"
1 systemChat !="systemChat format[localize \"str_missing_to_do_this\", _x];" !"systemChat (localize " !"systemChat format[localize \"STR_EPOCH_" !"systemChat localize \"STR_EPOCH_" !"case \"system\": {systemChat _message;};" !"systemchat localize \"STR_CRAFTING_NEEDED_ITEMS\";" !"systemChat format[localize \"STR_CL_" !"systemChat localize \"STR_CL_" !=") then {\nif (player getVariable[\"radiostate\",true]) then {\nsystemChat (\"[RADIO] \" + _message);\nplaySound \"Radio_Message_Sound\";\n" !"systemChat localize \"str_cursorTargetNotFound\""
-5 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed"
-5 toString !"_animCheck = toString ([(_animStateArray select 0),(_animStateArray select 1)" !="_skinToModel = toString (_finalArray);" !="{_textArrayTemp = _textArrayTemp + [tostring [_x]]} foreach _line;" !="_cmpt = toString _cmpt;" !="_objName = toLower(toString(_objName));" !"if (toString _hayArr != _needle) then {" !="_type = toString _typeA;" !="_anim4 = toString _anim4;" !"{(count _stance>17)}) then {toString [_stance select 17]}" !"BIS_fnc_timeToString" !"02, if (typeName _name == \"ARRAY\") then {toString _name} else {_name}];" !="s = true;\n\n_array = toArray (animationState player);\n_str = toString [_array select 5,_array select 6,_array select 7];\n_anim = " !=" _input - [_x];\n} forEach _badChars;\n\n_input = parseNumber (toString (_input));\n_input\n};\n\nBankDialogUpdateAmounts = {\nprivate ["
-5 worldTo !="_relPos = _building worldToModel _point;" !"_w2m = _x worldToModel (getPosATL player);\n_bb = (boundingbox _x) select 1;" !="_h = _offset + ((_o worldToModel (getPosATL _o)) select 2);" !"_pos set [2,(_pos select 2) + 1.5];\n_screen = worldToScreen _pos;\n_text = composeText [image" !="\n_pos = _this select 1; \n_offset = 1; \n\n_relPos = _building worldToModel _pos;\n_boundingBox = boundingBox _building;\n\n_min = _bo"
+1 title !"titleCut [\"\", \"BLACK " !"\"titleCut\", " !"\"titleText\"" !="rtitleCut = 'titleCut'" !"rtitleCutc" !="rtitleText = 'titleText'" !"rtitleTextc" !"(_missionTextListPath >> \"titles\")" !"(_display displayCtrl _titleIDC) ctrlShow false;" !"titleText [format[localize \"str_return_lobby\", _x" !",\"_titleText\"" !"localize 'STR_UI_GENDER_TITLE';\n_timeNem" !="scriptName \"MP\\data\\scriptCommands\\titleText.sqf\";" !_fillTradeTitle !_bldTxtStringTitle !"localize \"str_halo_altitude_speed" !"play displayCtrl 8801 ctrlSetText(format[localize \"STR_CL_RV_TITLE\",_keyDisplay]);\n\n_control = ((findDisplay 8800) displayCtrl 8" !="f\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nprivate [\"_folder\",\"_actionTitleFormat\",\"_actionCostsFormat\",\"_message\",\"_messageShown\",\"_last"
+1 toString !"_animCheck = toString ([(_animStateArray select 0),(_animStateArray select 1)" !="_skinToModel = toString (_finalArray);" !="{_textArrayTemp = _textArrayTemp + [tostring [_x]]} foreach _line;" !="_cmpt = toString _cmpt;" !="_objName = toLower(toString(_objName));" !"if (toString _hayArr != _needle) then {" !="_type = toString _typeA;" !="_anim4 = toString _anim4;" !"{(count _stance>17)}) then {toString [_stance select 17]}" !"BIS_fnc_timeToString" !"02, if (typeName _name == \"ARRAY\") then {toString _name} else {_name}];" !="s = true;\n\n_array = toArray (animationState player);\n_str = toString [_array select 5,_array select 6,_array select 7];\n_anim = " !=" _input - [_x];\n} forEach _badChars;\n\n_input = parseNumber (toString (_input));\n_input\n};\n\nBankDialogUpdateAmounts = {\nprivate ["
+1 worldTo !="_relPos = _building worldToModel _point;" !"_w2m = _x worldToModel (getPosATL player);\n_bb = (boundingbox _x) select 1;" !="_h = _offset + ((_o worldToModel (getPosATL _o)) select 2);" !"_pos set [2,(_pos select 2) + 1.5];\n_screen = worldToScreen _pos;\n_text = composeText [image" !="\n_pos = _this select 1; \n_offset = 1; \n\n_relPos = _building worldToModel _pos;\n_boundingBox = boundingBox _building;\n\n_min = _bo"
//The best use of this file is filtering commonly used scripting commands, because they are always the same when compiled and executed. See: https://community.bistudio.com/wiki/Category:Scripting_Commands_ArmA2
diff --git a/Server Files/DZE_Server_Config/HiveExt.ini b/Server Files/DZE_Server_Config/HiveExt.ini
index 59681b3df..64e5c70b0 100644
--- a/Server Files/DZE_Server_Config/HiveExt.ini
+++ b/Server Files/DZE_Server_Config/HiveExt.ini
@@ -72,6 +72,18 @@ Password = ChangeMe
;Do not use double quotation marks, only use single quotation marks [']
;MaintenanceObjects = 'Land_DZE_GarageWoodDoorLocked','Land_DZE_LargeWoodDoorLocked','Land_DZE_WoodDoorLocked','CinderWallDoorLocked_DZ','CinderWallDoorSmallLocked_DZ','Plastic_Pole_EP1_DZ'
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Virtual Garage Addition ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Table name for the virtual garage data to be stored in, default table is 'garage'
+;VGTable = garage
+; Days for a stored vehicle to be cleaned up after, if set to -1 this feature is disabled. Default 35 days
+;CleanupVehStoredDays = 35
+; Log object cleanup DELETE statements (per object), including virtual garage. Default is false
+;LogObjectCleanup = false
+
+
;If using OFFICIAL hive, the settings in this section have no effect, it will manage objects on its own
[ObjectDB]
;Setting this to true separates the Object fetches from the Character fetches
diff --git a/Server Files/SQL/epoch.sql b/Server Files/SQL/epoch.sql
index b1951a9c5..2091cc94c 100644
--- a/Server Files/SQL/epoch.sql
+++ b/Server Files/SQL/epoch.sql
@@ -1,9 +1,8 @@
/*
- DayZ Epoch 1.0.7
+ DayZ Epoch 1.0.7.1
ONLY RUN THIS FILE IF CREATING A NEW DATABASE.
- EXISTING 1051 DATABASES SHOULD USE 1.0.6_UPDATES.SQL INSTEAD AND THEN RUN 1.0.6.2_UPDATES.SQL.
- EXISTING 1061 DATABASES SHOULD USE 1.0.6.2_UPDATES.SQL INSTEAD.
+ EXISTING 1.0.7 DATABASES SHOULD USE update epoch 1.0.7 to 1.0.7.1.sql INSTEAD.
*/
SET FOREIGN_KEY_CHECKS=0;
@@ -108,6 +107,36 @@ CREATE TABLE IF NOT EXISTS `Player_LOGIN` (
-- Records of player_login
-- ----------------------------
+-- ----------------------------
+-- Table structure for `garage`
+-- ----------------------------
+
+CREATE TABLE IF NOT EXISTS `garage` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `PlayerUID` varchar(20) NOT NULL DEFAULT '0',
+ `Name` varchar(50) NOT NULL DEFAULT '',
+ `DisplayName` varchar(50) NOT NULL DEFAULT '',
+ `Classname` varchar(50) DEFAULT NULL,
+ `Datestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `DateStored` varchar(10) NOT NULL DEFAULT 'old',
+ `DateMaintained` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `CharacterID` bigint(20) unsigned NOT NULL DEFAULT '0',
+ `StorageCounts` varchar(30) NOT NULL DEFAULT '[0,0,0]',
+ `Inventory` mediumtext,
+ `Hitpoints` mediumtext,
+ `Fuel` double(13,5) NOT NULL DEFAULT '1.00000',
+ `Damage` double(13,5) NOT NULL DEFAULT '0.00000',
+ `Colour` varchar(50) NOT NULL,
+ `Colour2` varchar(50) NOT NULL,
+ `serverKey` varchar(10) NOT NULL DEFAULT 'old',
+ `ObjUID` varchar(20) NOT NULL DEFAULT 'old',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of garage
+-- ----------------------------
+
/*
THIS PROCEDURE IS REQUIRED FOR 1062 AND RETURNS THE OBJECT ID MUCH MORE EFFICENTLY THAN THE METHOD IN 1061 SQF
*/
diff --git a/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql b/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql
index c21c3ee04..9379f0aa7 100644
--- a/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql
+++ b/Server Files/SQL/update epoch 1.0.7 to 1.0.7.1.sql
@@ -2,3 +2,25 @@ UPDATE character_data SET Backpack = REPLACE(Backpack, '"Skin_gsc_cloth_loner_he
UPDATE character_data SET Inventory = REPLACE(Inventory, '"Skin_gsc_cloth_loner_head_DZ"', '"Skin_Survivor2_DZ"') WHERE INSTR(Inventory, '"Skin_gsc_cloth_loner_head_DZ"') > 0;
UPDATE object_data SET Inventory = REPLACE(Inventory, '"Skin_gsc_cloth_loner_head_DZ"', '"Skin_Survivor2_DZ"') WHERE INSTR(Inventory, '"Skin_gsc_cloth_loner_head_DZ"') > 0;
UPDATE character_data SET Model = "Survivor2_DZ" WHERE Model = "gsc_cloth_loner_head_DZ";
+
+CREATE TABLE IF NOT EXISTS `garage` (
+ `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
+ `PlayerUID` varchar(20) NOT NULL DEFAULT '0',
+ `Name` varchar(50) NOT NULL DEFAULT '',
+ `DisplayName` varchar(50) NOT NULL DEFAULT '',
+ `Classname` varchar(50) DEFAULT NULL,
+ `Datestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+ `DateStored` varchar(10) NOT NULL DEFAULT 'old',
+ `DateMaintained` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `CharacterID` bigint(20) unsigned NOT NULL DEFAULT '0',
+ `StorageCounts` varchar(30) NOT NULL DEFAULT '[0,0,0]',
+ `Inventory` mediumtext,
+ `Hitpoints` mediumtext,
+ `Fuel` double(13,5) NOT NULL DEFAULT '1.00000',
+ `Damage` double(13,5) NOT NULL DEFAULT '0.00000',
+ `Colour` varchar(50) NOT NULL,
+ `Colour2` varchar(50) NOT NULL,
+ `serverKey` varchar(10) NOT NULL DEFAULT 'old',
+ `ObjUID` varchar(20) NOT NULL DEFAULT 'old',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
\ No newline at end of file