Merge pull request #1008 from EpochModTeam/experimental

Release 1.3.2
This commit is contained in:
vbawol 2019-11-02 09:26:30 -05:00 committed by GitHub
commit 38f8539d60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
165 changed files with 26816 additions and 9407 deletions

View File

@ -16,3 +16,32 @@ http://www.bistudio.com/community/licenses/arma-public-license-share-alike
Credits:
=====
https://github.com/EpochModTeam/Epoch/blob/release/CREDITS.md
Instructions:
=====
- Server Install: https://epochmod.com/forum/topic/44751-dec2017-arma-3-epochmod-server-installation-and-setup/
- If your wanted Map is currently not supported, use the "epoch._ChangeMe.pbo" and rename it to "epoch.MapName.pbo" to use a fallback config
FAQ:
=====
Starting a FAQ here. Can get expanded later
- How to increase / reduce the Loot?
- There are 3 files, where you can adjust the Loot:
- @epochhive\epochconfig.hpp
- lootmultiplier -> (description is in the config)
- missionfile\epoch_config\CfgBuildingLootPos.hpp -> (description is in the config)
- EpochLootChance
- GroundSpawnChance
- MinGroundContainers
- MaxGroundContainers
- @epochhove\addons\epoch_server_settings\configs\CfgMainTable.h -> Change the Loot for each Container / Buildingtype
- lootMin
- lootMax
- I have added an item to the loot, but it will not spawn (rpt log say "have no price")
- You also have to add new items to CfgPricing.hpp and CfgItemSort.hpp within your mission file
- I am running a 3rd parties script, but some functions are not working (e.g. Infistar)
- We have disabled some commands by default for better security.
- Check CfgDisabledCommands.hpp within your missionfile, if there are needed functions disabled (if so, remove it)
- Want to add a function to the DynaMenu / E-Pad
- For the DynaMenu, check missioonfile\epoch_config\Configs\CfgActionMenu\EXAMPLE.hpp
- For E-Pad, check the "FullExample" in missioonfile\epoch_config\CfgEPad.hpp

View File

@ -69,6 +69,7 @@ adminMenu_cryptoCfg[] = {2500,1000,500,100,50,-1000};
//You can find the Key Codes here: https://community.bistudio.com/wiki/DIK_KeyCodes#F1..15
adminMenu_menuKey = 0x3B;
adminMenu_infrontTeleport = 0x06;
adminMenu_JumpUp = 0x05;
/*
AH CONFIG README

View File

@ -5,14 +5,17 @@ forceRestartTime = 14400; // 4 hour restarts
StaticDateTime[] = {}; // {0,0,0,8,0} would forces the server to start at 8am each time it is started while allowing the year, month and day to stay real time. Any values left at 0 will result in no change.
timeDifference = 0; // Server uses real time this will allow you to offset just the hour.
timeMultiplier = 4; // Sets a time multiplier for in-game time. The command range is now capped at 0.1 - 120 to avoid performance problems.
lootMultiplier = 0.5; // 1 = max loot bias. This controls how much loot can payout per Epoch loot container.
// Loot (Check CfgBuildingLootPos.hpp in mission file for more settings)
lootMultiplier = 1; // 1 = normal loot multiplier. This controls how much loot can payout per loot container.
UseLootHelper = "true"; // GroundLoot will get a visible sphere for better loot identification
// Events
WeatherChances[] = {
0.5, // Sun
0.3, // Mid
0.1, // Rain
0.1 // Rain+
0.7, // Sun
0.2, // Mid
0.05, // Rain
0.05 // Rain+
};
events[] = {
{
@ -26,6 +29,8 @@ forceRestartTime = 14400; // 4 hour restarts
},
// { 1800, "PaydayEvent", 0, 2},
// { 1200, "MessageServer", 0, 2},
{ 120, "FastNights", 0 , 2, -1, {48,4} ,{"VR"}}, // TimeMulti Nighttime = 48 / TimeMulti Daytime = 4
{ 1200, "HeliCrash", 0 , 2, -1, {} ,{"VR"}},
{ 2700, "AirDrop", 0 , 2, -1, {} ,{"VR"}},
{ 2400, "EarthQuake", 0 , 2, -1, {} ,{"VR"}},
{ 2700, "Satellite", 0 , 2, -1, {} ,{"VR"}},
@ -68,6 +73,8 @@ forceRestartTime = 14400; // 4 hour restarts
"" // "NVG_EPOCH" or "radiation_mask_epoch"
};
UseCustomTextures = "false"; // if true, Vehicles and Building parts textures will be saved and loaded to the DB (Paintshop)
// vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance.
immuneIfStartInBase = "true"; // Protect vehicles from damage in bases until first unlocked after restart
ReservedVehSlots = 50; // Reserved Vehicle Slots (only needed, if you manually spawn in additional Vehicles - AdminTool / Blackmarket...)
@ -84,6 +91,8 @@ forceRestartTime = 14400; // 4 hour restarts
{"200Rnd_40mm_G_belt",{0}}
};
disableVehicleTIE = "true";
ReplaceCarService = "true"; // Replace all "Land_CarService_F" with "paintshop" on the Map on Server Start
PaintShopIcons = "false"; // Create MapIcons for PaintShops
// BaseBuilding
StorageSlotsLimit = 1500; // Max storage slots allowed. Warning! Higher the number lower performance.
@ -144,10 +153,26 @@ forceRestartTime = 14400; // 4 hour restarts
// Traders
taxRate = 0.1; // controls the price increase for purchases
/*
starterTraderItems[] = { // Starter Items for fresh spawned trader first array is classnames second is quantity.
{"ItemSodaBurst","meatballs_epoch","MortarBucket","CinderBlocks","VehicleRepair","CircuitParts","ItemCorrugated","PartPlankPack","ItemRock","ItemRope","ItemStick"},
{5,5,5,5,5,5,5,5,5,5,5}
};
*/
starterTraderItems[] = { // Starter Items for fresh spawned trader (old / above variant is also still working!)
{"ItemSodaBurst",5},
{"meatballs_epoch",5},
{"MortarBucket",5},
{"CinderBlocks",5},
{"VehicleRepair",5},
{"CircuitParts",5},
{"ItemCorrugated",5},
{"PartPlankPack",5},
{"ItemRock",5},
{"ItemRope",5},
{"ItemStick",5}
};
NPCSlotsLimit = 30; // Max number of traders static or dynamic. Warning! Higher the number lower performance.
forceStaticTraders = "true"; // disables traders moving from work to home
TraderGodMode = "false"; // If true, Trader can not be killed by Players
@ -182,13 +207,15 @@ forceRestartTime = 14400; // 4 hour restarts
DEBUG_VEH = "false"; // DEBUG ONLY used to debug spawing of vehicles
// Hive Related
vehicleLockTime = "1800"; // Controls how many seconds it takes to allow another person/group to unlock vehicle.
vehicleLockTime = "1800"; // Controls how many seconds it takes to allow another person/group to unlock vehicle (outside your own PlotPole Range).
vehicleLockTimeHome = "259200"; // Controls how many seconds it takes to allow another person/group to unlock vehicle (inside your own PlotPole Range).
expiresBuilding = "604800"; // expiration date in seconds for buildings
expiresPlayer = "2592000"; // expiration date in seconds for players
expiresBank = "7776000"; // expiration date in seconds for players bank
expiresVehicle = "604800"; // expiration date in seconds for vehicles
expiresAIdata = "604800"; // expiration date in seconds for NPC Trader inventory
expiresCommunityStats = "7776000"; // expiration date in seconds for players community stats
expiresPlayerTopStats = "604800"; // expiration date in seconds for players listed in TopStats - remove inactive players from TopStats, but will get in again on next login
// Admin Features
hiveAdminCmdExec = "false"; // true = enables extra (To Be Released) feature to allow execution of code via hive.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
5 "" !="H_MM_(Buzzard_Gasmask|Helmet)_01" !="V_MM_Vest_01" !="(V|H)_(F|)[0-9]{1,3}_EPOCH" !="(clown|pkin|wolf|radiation|hockey|plague|ghostface|skull|witch|thor|iron)_mask_epoch" !="Item(Map|GPS|Compass|Watch|GeigerCounter_EPOCH)|Power_Sword" !="EpochRadio[0-9]" !="B_UavTerminal" !="(U|G|bipod|acc|muzzle|optic)_[0-9A-Z_]{1,100}" !="(NVG|Defib|Heal|Repair|Elcan(_reflex|))_EPOCH" !="(Binocular|Rangefinder|Hatchet|CrudeHatchet|WoodClub|Melee(Sledge|Maul|Rod|Sword)|ChainSaw|MultiGun|Rollins_F|Plunger)" !="(ruger_pistol|speargun|1911_pistol|akm|m14|M14Grn|m16|m16Red|m107|m107Tan|m249|m249Tan|m4a3|sr25|l85a2|l85a2_(pink|ugl))_epoch" !="SMG_(01|02|05)_F" !="hgun_(PDW2000|ACPC2|Rook40|P07|Pistol_heavy_0[1-2]|Pistol_Signal)_F" !="LMG_(Mk200|Zafir)_F" !="srifle_(EBR|GM6|LRR|DMR_01)_(camo_|)F" !="arifle_(Katiba|Katiba_C|Katiba_GL|SDAR|TRG21|TRG20|TRG21_GL|Mk20|Mk20C|Mk20C_plain|Mk20_GL|Mk20_plain|Mk20_GL_plain)_F" !="arifle_(MXC|MX|MX_GL|MXM|MXM_Black|MX_GL_Black|MX_Black|MXC_Black|MX_SW|MX_SW_Black)_F" !="srifle_DMR_0[2-7](_(camo|sniper|khaki|tan|multicam|woodland|spotter|blk|hex|olive)_|_)F" !="MMG_0[1-2]_(hex|tan|camo|black|sand)_F" !"CUP_((h|s)gun|(s|a)rifle|(l|s)mg)_" !"CUP_(optic|muzzle|acc|bipod)_" !"CUP_(Mxx|SVD)_camo" !"a2_(ak47s_gold|AK107|bizon|dmr|fnfal|G36_C|Mg36|leeenfield|m110|mk16|mk17|svd|VSS_vintorez|aks74un)" !="SMG_03(|_TR|C|C_TR)_(black|camo|khaki|hex)"
5 "" !="H_MM_(Buzzard_Gasmask|Helmet)_01" !="V_MM_Vest_01" !="(V|H)_(F|)[0-9]{1,3}_EPOCH" !="(clown|pkin|wolf|radiation|hockey|plague|ghostface|skull|witch|thor|iron)_mask_epoch" !="Item(Map|GPS|Compass|Watch|GeigerCounter_EPOCH)|Power_Sword" !="EpochRadio[0-9]" !="B_UavTerminal" !="(U|G|bipod|acc|muzzle|optic)_[0-9A-Z_]{1,100}" !="(NVG|Defib|Heal|Repair|Elcan(_reflex|))_EPOCH" !="(Binocular|Rangefinder|Hatchet|CrudeHatchet|WoodClub|Melee(Sledge|Maul|Rod|Sword)|ChainSaw|MultiGun|Rollins_F|Plunger)" !="(ruger_pistol|speargun|1911_pistol|akm|m14|M14Grn|m16|m16Red|m107|m107Tan|m249|m249Tan|m4a3|sr25|l85a2|l85a2_(pink|ugl))_epoch" !="SMG_(01|02|05)_F" !="hgun_(PDW2000|ACPC2|Rook40|P07|Pistol_heavy_0[1-2]|Pistol_Signal)_F" !="LMG_(Mk200|Zafir)_F" !="srifle_(EBR|GM6|LRR|DMR_01)_(camo_|)F" !="arifle_(Katiba|Katiba_C|Katiba_GL|SDAR|TRG21|TRG20|TRG21_GL|Mk20|Mk20C|Mk20C_plain|Mk20_GL|Mk20_plain|Mk20_GL_plain)_F" !="arifle_(MXC|MX|MX_GL|MXM|MXM_Black|MX_GL_Black|MX_Black|MXC_Black|MX_SW|MX_SW_Black|ARX_ghex)_F" !="srifle_DMR_0[2-7](_(camo|sniper|khaki|tan|multicam|woodland|spotter|blk|hex|olive)_|_)F" !="MMG_0[1-2]_(hex|tan|camo|black|sand)_F" !"CUP_((h|s)gun|(s|a)rifle|(l|s)mg)_" !"CUP_(optic|muzzle|acc|bipod)_" !"CUP_(Mxx|SVD)_camo" !"a2_(ak47s_gold|AK107|bizon|dmr|fnfal|G36_C|Mg36|leeenfield|m110|mk16|mk17|svd|VSS_vintorez|aks74un)" !="SMG_03(|_TR|C|C_TR)_(black|camo|khaki|hex)" !="pvcrifle_01_F" !="nl_(Shotgun|auto_xbow)" !="hgun_Pistol_tranq_01"

View File

@ -1,3 +1,3 @@
5 "" !="Construct_f" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="(SatchelCharge|DemoCharge|ClaymoreDirectionalMine)_Remote_Ammo" !="Epoch_(Sapper|Sapper(B|G)|Cloak)_F" !="EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" !"B_Bergen_(mcamo|dgtl|hex|tna)" !"B_AssaultPack_(khk|dgtl|rgr|sgg|cbr|mcamo|ocamo|blk|tna_F)" !"B_Kitbag_(rgr|mcamo|sgg|cbr)" !"B_TacticalPack_(rgr|mcamo|ocamo|blk|oli)" !"B_FieldPack_(khk|ocamo|oucamo|cbr|blk|oli|ghex)" !"B_Carryall_(ocamo|oucamo|mcamo|khk|cbr|oli|ghex)" !"B_Viper(Light|)Harness_(oli|blk|ghex|hex|khk|oli)" !="B_Parachute" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo"
5 "_EPOCH" !="BarrelBomb(2|)_EPOCH_Remote_Ammo" !="I_(Soldier[1-3]|Soldier)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf)_EPOCH" !="(ToolRack|Shoebox|Bunk|Rabbit|Cabinet|toilet|KitchenSink)_EPOCH" !="(Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH" !=".+_(SIM|Ghost)_EPOCH" !="smallbackpack_(red|green|teal|pink)_epoch" !="(FirePlace|FirePlaceOn|Jack|Freezer|Tarp|Bobber)_EPOCH" !="Br82nd_(StorageBoxLarge|StorageBox|StorageBoxSmall|WeaponsBox)_(SIM|Ghost)_EPOCH" !"(Patrol_Pack|TK_RPG_Backpack|CZ_VestPouch|civil_assault_pack|S_Gunbag|ALICE_Pack|US_Backpack|CZ_Backpack|L_Gunbag)_Epoch"
5 "_EPOCH" !="BarrelBomb(2|)_EPOCH_Remote_Ammo" !="I_(Soldier[1-3]|Soldier)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf)_EPOCH" !="(ToolRack|Shoebox|Bunk|Rabbit|Cabinet|toilet|KitchenSink)_EPOCH" !="(Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH" !=".+_(SIM|Ghost)_EPOCH" !="smallbackpack_(red|green|teal|pink)_epoch" !="(FirePlace|FirePlaceOn|Jack|Freezer|Tarp|Bobber)_EPOCH" !="Br82nd_(StorageBoxLarge|StorageBox|StorageBoxSmall|WeaponsBox)_(SIM|Ghost)_EPOCH" !"(Patrol_Pack|TK_RPG_Backpack|CZ_VestPouch|civil_assault_pack|Assault_Pack|S_Gunbag|ALICE_Pack|US_Backpack|CZ_Backpack|L_Gunbag)_Epoch"
5 SeaGull

View File

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

View File

@ -4,17 +4,17 @@
5 setWeaponReloadingTime !="_unit setWeaponReloadingTime [_unit,_weapon,1];" !="_unit setWeaponReloadingTime [_unit,_weapon,1];" !="player fire [_muzzle, _muzzle, _item];\nplayer setWeaponReloadingTime [player, _muzzle, 0];"
5 allMissionObjects !="[\"Epoch_Plotpoles\",allmissionobjects 'PlotPole_EPOCH']" !="allMissionObjects \"Timeline_F\"" !="_allplots append (allmissionobjects _x)"
5 showCommandingMenu !="showCommandingMenu '';" !="showCommandingMenu '#USER:"
5 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" !="_this select 0 setvelocity (_this select 1)" !="_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];" !="_smokeg setVelocity _Gvel;"
5 setvelocity !="setVelocityTarget" !="_bolt setPosATL _pos;\n_bolt setVelocity [0, 0, -10];" !="EPOCH_target setvelocitytransformation" !="_currentTarget setVelocity [0,0,-0.01];" !="_head setVelocity [\n(sin _dir * _speed), \n(cos _dir * _speed)" !="_vel = velocity this; _dir = getDir player; this setVelocity[(_vel select 0)+(sin _dir * 2),(_vel select 1)+(cos _dir * 2),(_vel select 2)];" !="_head setVelocity [random 2,random 2,10];" !="_bobber setVelocity [0,-1,-10];" !="_x setvelocity [0,0,0.1];" !="_veh setVelocity [0,0,0];" !="_this select 0 setvelocity (_this select 1)" !="_zombie setVelocityTransformation [_aslPos,_aslPos,_unitV,_unitV,_unitvDir,_vDir,_unitvUp,_unitvUp,2];" !="_smokeg setVelocity _Gvel;" !="player setVelocity _skn_velo;"
5 assignAs !"assignAsCargo" !="_unit assignAsGunner _axeCopter;" !="_driver assignAsDriver _axeCopter;" !="axeVIP assignAsDriver vehicle axeVIP;"
5 assignAsCargo !="_x assignAsCargo axeGeneralsBoat;" !="axeVIP assignAsCargo vehicle player;" !="axeVIP assignAsCargo vehicle axeVIP;"
5 allowDamage !="_unit allowDamage false;" !="_unit allowDamage true;" !="player allowDamage true;" !="vehicle player allowDamage true;" !="player allowDamage false;" !="_target allowDamage true;" !="_cargo allowDamage false;" !="if (_god) then {_vehicle allowdamage"
5 addWeaponCargo !="_acceptHolder addWeaponCargo [_wWeapon, 1] ;" !="CBA_fnc_addWeaponCargo" !="\\fnc_addWeaponCargo" !="\"addWeaponCargo" !="cba_fAddWeaponCargo"
5 onMapSingleClick !="onMapSingleClick '';" !="\"onmapsingleclick\""
5 addMagazine !"addMagazineCargo" !="player addMagazine [_item,_count];" !="player addMagazine \"sledge_swing\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine \"stick_swing\";" !="_wh addMagazineAmmoCargo[_item, 1, _count];" !="CBA_fnc_addMagazine" !="\\fnc_addMagazine" !="\"addMagazine" !="vehicle player addMagazineTurret" !="vehicle player addMagazineTurret" !="EPOCH_fnc_addMagazineOverflow" !="_vehicle addMagazineTurret [_ammotype, _turret, _ammocount]"
5 addMagazine !"addMagazineCargo" !="player addMagazine [_item,_count];" !="player addMagazine \"sledge_swing\";" !="player addMagazine \"Hatchet_swing\";" !="player addMagazine \"stick_swing\";" !="_wh addMagazineAmmoCargo[_item, 1, _count];" !="CBA_fnc_addMagazine" !="\\fnc_addMagazine" !="\"addMagazine" !="vehicle player addMagazineTurret" !="vehicle player addMagazineTurret" !="EPOCH_fnc_addMagazineOverflow" !="_vehicle addMagazineTurret [_ammotype, _turret, _ammocount]" !="_container addMagazineAmmoCargo _x;"
5 addMagazineCargo !="_dogHolder addMagazineCargo [\"RabbitCarcass_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"Pelt_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"Venom_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"SnakeCarcass_EPOCH\", 1]" !="_dogHolder addMagazineCargo [\"ChickenCarcass_EPOCH\", 1]" !="_acceptHolder addMagazineCargo [_wAmmo, 1] ;" !="CBA_fnc_addMagazineCargo" !="\\fnc_addMagazineCargo" !="\"addMagazineCargo" !="cba_fAddMagazineCargo"
5 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" !="CBA_fnc_addItem" !="\\fnc_addItem" !="\"addItem" !="fnc_addItemCargo" !="wH = _nearByHolder select 0;\n};\nif !(isNull _wh) then {\n_wh addItemCargoGlobal [_item,1];\n};\n};\n};\n\n_fnc_findItemInContainers = " !="player addItem 'ItemRope';"
5 addBackPack !="fnc_addBackpackCargo"
5 addMissionEventHandler !="CBA_clientID = [0, 2] select isMultiplayer;\naddMissionEventHandler [\"PlayerConnected\", {\nparams [\"_id\", \"_uid\", \"_name\"" !="addMissionEventHandler [\"EachFrame\", {call cba_common_fnc_onFrame}];" !="addMissionEventHandler [\"HandleDisconnect\"," !="addMissionEventHandler [\"Loaded\"," !="addMissionEventHandler ['Draw3D',_var + \"call Epoch_gui3DCooldownEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dModelPosEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dWorldPosEH;\"];" !="addMissionEventHandler [\n\"ended\",\n{\n\nBIS_fnc_missionHandlers_end = _this;" !="private _ehId = addMissionEventHandler [_event select [2], _code];" !="addMissionEventHandler [\"PlayerViewChanged\", {if (cameraView isEqualTo \"GROUP\") then {vehicle player switchCamera \"Internal\";};}];" !="addMissionEventHandler [\"EachFrame\",\n{\n\nmissionNamespace setVariable [\"BIS_"
5 addItem !="{player addItemToVest _x} forEach _vestItems;" !="player addItem _item;" !="_plyr addItemToVest _missionItem;" !="axeVIP addItemToVest _item;" !="_plyr addItemToVest _missionItem;" !="EPOCH_fnc_addItemOverflow" !="CBA_fnc_addItem" !="\\fnc_addItem" !="\"addItem" !="fnc_addItemCargo" !="wH = _nearByHolder select 0;\n};\nif !(isNull _wh) then {\n_wh addItemCargoGlobal [_item,1];\n};\n};\n};\n\n_fnc_findItemInContainers = " !="player addItem 'ItemRope';" !="_container addItemCargoGlobal [_type,_cnt];"
5 addBackPack !="fnc_addBackpackCargo" !="_newPlyr addBackpack _bpack;"
5 addMissionEventHandler !="CBA_clientID = [0, 2] select isMultiplayer;\naddMissionEventHandler [\"PlayerConnected\", {\nparams [\"_id\", \"_uid\", \"_name\"" !="addMissionEventHandler [\"EachFrame\", {call cba_common_fnc_onFrame}];" !="addMissionEventHandler [\"HandleDisconnect\"," !="addMissionEventHandler [\"Loaded\"," !="addMissionEventHandler ['Draw3D',_var + \"call Epoch_gui3DCooldownEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dModelPosEH;\"];" !="addMissionEventHandler ['Draw3D',_var + \"call epoch_gui3dWorldPosEH;\"];" !="addMissionEventHandler [\n\"ended\",\n{\n\nBIS_fnc_missionHandlers_end = _this;" !="private _ehId = addMissionEventHandler [_event select [2], _code];" !="addMissionEventHandler [\"PlayerViewChanged\", {if (cameraView isEqualTo \"GROUP\") then {vehicle player switchCamera \"Internal\";};}];" !="addMissionEventHandler [\"EachFrame\",\n{\n;\n\n\nmissionNamespace setVariable [\"BIS_"
5 removeMissionEventHandler !="removeMissionEventHandler [\"Draw3D\", _id];" !="removeMissionEventHandler [_event select [2], _x select 1];"
5 removeAllWeapons !="removeAllWeapons axeGeneral;"
5 setViewDistance !="setViewDistance 1600"
@ -23,7 +23,7 @@
5 createVehicleLocal !="\"Sign_Arrow_Direction_Yellow_F\" createVehicleLocal" !="\"#particlesource\" createVehicleLocal" !="\"#lightpoint\" createVehicleLocal" !="\"BloodSplat\" createVehicleLocal" !="[\"lightning1_F\", \"lightning2_F\"] call BIS_fnc_selectRandom;\n_lighting = _class createVehicleLocal" !="SLX_XEH_DUMMY createVehicleLocal [0, 0, 0];" !="CBA_eventHandlers = \"Logic\" createVehicleLocal [0, 0];"
5 createUnit !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit [\"I_officer_F\", axeGeneralPos, [], 1, \"CAN_COLLIDE\"];" !="bis_functions_mainscope = _grpLogic createunit [\"Logic\",[9,9,9],[],0,\"none\"];" !="_unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, \"FORM\"];" !="_driver = (group player) createUnit[\"I_UAV_AI\", position axeUAV, [], 0, \"CAN_COLLIDE\"];"
5 createAgent !="bis_revive_ratioLethal = createAgent [\"Logic\", [10,10,0], [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent [\"Epoch_Sapper_F\", getPos _cage2, [], 0, \"FORM\"];" !="_unit = createAgent[_unitClass, position player, [], _zRange, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 0, \"CAN_COLLIDE\"];" !="_axeSapper = createAgent [\"Epoch_Sapper_F\", _pos, [], 12, \"FORM\"];" !="_nestMate = createAgent [\"Epoch_Sapper_F\", _garrPos, [], 0, \"FORM\"];"
5 createDialog !="createDialog 'server_info_picture'" !="createdialog 'epoch_tablet_gui'" !="createdialog 'Epoch_CamDialog'" !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" !="createDialog \"Epoch_myTempGroup\";" !="createDialog (if ((Epoch_my_tempGroupUID == \"\") && (Epoch_my_tempGroup isEqualTo [])) then {\"EPOCH_createTempGrp\"} else {\"Epoch_myTempGroup\"});" !="createDialog \"tempGroupRequests\";" !="createdialog 'EPOCH_SimpleInput';"
5 createDialog !="createDialog 'server_info_picture'" !="createdialog 'epoch_tablet_gui'" !="createdialog 'Epoch_CamDialog'" !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" !="createDialog \"Epoch_myTempGroup\";" !="createDialog (if ((Epoch_my_tempGroupUID == \"\") && (Epoch_my_tempGroup isEqualTo [])) then {\"EPOCH_createTempGrp\"} else {\"Epoch_myTempGroup\"});" !="createDialog \"tempGroupRequests\";" !="createdialog 'EPOCH_SimpleInput';" !="createdialog 'PlayerStatsDialog'" !="'ServerStatsDialog'"
5 createDisplay !="createDisplay \"rmx_dynamenu\";" !="createDisplay \"rmx_moveDynamicHUD\";" !="_parent createdisplay _displayClass;" !="finddisplay 151 createdisplay 'RscDisplayOptionsLayout'" !="_display createdisplay \"RscDisplayDLCPreview\";"
5 deleteMarker !="deleteMarkerLocal _mName;"
5 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent" !="_mName setMarkerShapeLocal _mShape;" !="_mName setMarkerTypeLocal _mType;" !="(_x select 0) setMarkerPosLocal (position player);" !="_zoomMarker setMarkerSizeLocal"
@ -44,4 +44,6 @@
5 drawLine3D !="{\nfor [{_i = 1}, {_i < count _x}, {_i = _i + 1}] do {\ndrawLine3D [_x select (_i - 1), _x select _i, ((BIS_tracedShooter getVari" !="drawLine3D [ASLToAGL (getposasl _SnapObj1),ASLToAGL (getposasl _SnapObj2), [1,0,0,1]];"
5 ctrlCreate !="_parent ctrlcreate [\"RscMessageBox\",2351];" !="_c = _dsp ctrlCreate [\"rmx_drag_RscActivePicture\", call epoch_getIDC];" !="_c = _dsp ctrlCreate [\"rmx_t1\", call epoch_getIDC];" !="ctrlCreate [\"RscProgress\",_idc + 1];" !="ctrlCreate [\"rmx_rscControlsGroup\"" !="_ListGroup = _display ctrlCreate [\"RscControlsGroupNoHScrollbars\"" !="ctrlCreate [_x,call _getIDC];" !="_mainGrp = _display ctrlCreate [\"Epoch_main_config_group\",_value];" !="ctrlCreate !="_prevButton = _display ctrlCreate [\"RscButtonMenu\", 90110, _dbg];" [\"RscControlsGroupNoScrollbars\",call epoch_getIDC];" !="ctrlCreate [\"rmx_rscPicture\",(66600 + _e)];" !="ctrlCreate [\"RscStructuredText\",call epoch_getIDC];" !="_bar = _display ctrlCreate [\"RscCustomProgress\"" !="_group = _dsp ctrlCreate [\"rmx_rscControlsGroup\", call Epoch_getIDC]" !="_control = _display ctrlCreate [\"RscControlsGroupNoScrollbars\", 5678910];"
5 deleteVehicleCrew !="fn_deleteVehicleCrew.sqf" !="\"BIS_fnc_deleteVehicleCrew\""
5 selectPlayer !="selectPlayer _playerObject;"
5 selectPlayer !="selectPlayer _playerObject;"
5 playSound3D !="playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange];" !="playSound3D ['a3\sounds_f\air\heli_attack_02\alarm.wss', player, false,getposasl _object, 1, 1, 300];" !="playSound3D [\"a3\Sounds_F\environment\animals\Goats\Goat_\" + selectRandom"
5 setUnitLoadout !="Epoch_SetUnitLoadout" !="_newPlyr setunitloadout _loadout;"

View File

@ -602,6 +602,7 @@ class FSM
itemno = 27;
init = /*%FSM<STATEINIT""">*/"_ply = player;" \n
"_group = group player;" \n
"_goggles = goggles _playerObject;" \n
"" \n
"selectPlayer _playerObject;" \n
"" \n
@ -896,7 +897,12 @@ class FSM
{
name = "Setup_EH_s_and_H";
itemno = 50;
init = /*%FSM<STATEINIT""">*/"{" \n
init = /*%FSM<STATEINIT""">*/"" \n
"if (!_newChar || !(_goggles isEqualTo """")) then {" \n
" removeGoggles player;" \n
" player addGoggles _goggles" \n
"};" \n
"{" \n
" player addEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n
"} forEach ([""CfgEpochClient"", ""addEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);" \n
"" \n
@ -1076,7 +1082,7 @@ class FSM
"if (_playerCheck) then {" \n
" _PlayerPosCheck = !((_playerObject getVariable [""FinalDest"",[]]) isequalto []);" \n
" if (_PlayerPosCheck) then {" \n
" _playerCheckMass = ((_loadabs toFixed 2) isEqualTo ((loadabs _playerObject) toFixed 2));" \n
" _playerCheckMass = ((abs(_loadabs - (loadabs _playerObject))) < 1);" \n
" if (_playerCheckMass) then {" \n
" _state = true;" \n
" };" \n
@ -1289,7 +1295,12 @@ class FSM
{
name = "Open_Gender_Selection";
itemno = 78;
init = /*%FSM<STATEINIT""">*/"createdialog ""SelectGender"";"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"_forcegender = [""CfgEpochClient"", ""ForceGender"", """"] call EPOCH_fnc_returnConfigEntryV2;" \n
"switch (tolower _forcegender) do {" \n
" case ""male"": {EPOCH_PlayerIsMale = true;};" \n
" case ""female"": {EPOCH_PlayerIsMale = false;};" \n
" default {createdialog ""SelectGender"";}" \n
"};"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{

View File

@ -13,5 +13,10 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
*/
if !(isNull _this) then{
if (!isnil "HALV_senddeftele") exitwith {
if (isnull (finddisplay 7777)) then {
[] execVM "addons\halv_spawn\opendialog.sqf";
};
};
[player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_teleportPlayer",2];
};

View File

@ -0,0 +1,33 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Fill Player Stats Dialog
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_PlayerStatsDialog.sqf
*/
private ["_display","_UsedStats","_ctrlNo","_txt","_value"];
disableSerialization;
_display = findDisplay -1200;
if (isnull _display) exitwith {};
_UsedStats = ["CfgEpochClient", "PlayerStatsDialogEntries", []] call EPOCH_fnc_returnConfigEntryV2;
_ctrlNo = 1100;
{
_ctrl = _display displayCtrl _ctrlNo;
_txt = '';
{
_x params ["_stattype","_entrytext",["_calc","%1"]];
_value = missionNamespace getVariable [format ['EPOCH_total%1',_stattype],0];
_value = format [_calc,_value];
_value = call compile _value;
_txt = _txt + format ['<t color=''#ffff00''> %1:</t> %2 <br />',_entrytext,_value];
} foreach _x;
_ctrl ctrlSetStructuredText parseText _txt;
_ctrlNo = _ctrlNo + 1;
} foreach _UsedStats;

View File

@ -0,0 +1,207 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Fill Server Stats Dialog
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_ServerStatsDialog.sqf
*/
private [
"_display","_UsedStats","_Stat1Pos","_MainDistX","_MainDistY","_SubDistX1","_SubDistX2","_SubDistY1","_SubDistY2","_MainWidth","_SubWidth1","_SubWidth2","_SubWidth3",
"_MainHeight","_SubHeight","_ZeroX","_ZeroY","_c","_posX","_posY","_ListedStats","_ctrl","_SubPosY","_ImIn","_SubPosX"
];
disableSerialization;
_display = findDisplay -1200;
if (isnull _display) exitwith {};
_UsedStats = ["CfgEpochClient", "TopStatsDialogEntries", []] call EPOCH_fnc_returnConfigEntryV2;
_Stat1Pos = [
0.0720312 * safezoneW + safezoneX,
0.071 * safezoneH + safezoneY,
0.134062 * safezoneW,
0.033 * safezoneH
];
_MainDistX = 0.216406-0.0720312;
_MainDistY = 0.489-0.071;
_SubDistX1 = 0.0926562-0.0720312;
_SubDistX2 = 0.175156-0.0926562;
_SubDistY1 = 0.115-0.071;
_SubDistY2 = 0.148-0.115-0.002;
_MainWidth = 0.134062;
_SubWidth1 = 0.0154688;
_SubWidth2 = 0.0773437;
_SubWidth3 = 0.0309375;
_MainHeight = 0.033;
_SubHeight = 0.022;
_ZeroX = 0.0720312;
_ZeroY = 0.071;
_c = 1;
_posX = _ZeroX;
_posY = _ZeroY;
_ListedStats = [];
{
_x params ["_stattype","_entrytext",["_calc","%1"]];
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_posY * safezoneH + safezoneY,
_MainWidth * safezoneW,
_MainHeight * safezoneH
];
_ctrl ctrlSetText _entrytext;
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlsetTextColor [1,1,0,1];
_ctrl ctrlCommit 0;
_ctrl ctrlSetPosition [
_posX * safezoneW + safezoneX,
_posY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.02;
_SubPosY = _posY+_SubDistY1;
_ImIn = false;
{
_x params ["_value","_UID","_name"];
_SubPosX = _posX;
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY,
_SubWidth1 * safezoneW,
_SubHeight * safezoneH
];
_ctrl ctrlCommit 0;
_ctrl ctrlSetText str (_foreachindex + 1);
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlSetPosition [
_SubPosX * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.02;
_SubPosX = _SubPosX + _SubDistX1;
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY,
_SubWidth2 * safezoneW,
_SubHeight * safezoneH
];
_ctrl ctrlCommit 0;
_ctrl ctrlSetText _name;
if ((_x select 1) isequalto (getplayeruid player)) then {
_ctrl ctrlsetTextColor [0,1,0,1];
_ImIn = true;
};
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlSetPosition [
_SubPosX * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.02;
_SubPosX = _SubPosX + _SubDistX2;
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY,
_SubWidth3 * safezoneW,
_SubHeight * safezoneH
];
_value = format [_calc,_value];
_value = call compile _value;
if (_value isEqualType "") then {
_ctrl ctrlSetText _value;
}
else {
_ctrl ctrlSetText str _value;
};
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlCommit 0;
_ctrl ctrlSetPosition [
_SubPosX * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.015;
waituntil {ctrlCommitted _ctrl};
_SubPosY = _SubPosY+_SubDistY2;
} foreach (EPOCH_Topstats select _foreachindex);
if (!_ImIn) then {
_SubPosX = _posX;
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY,
_SubWidth1 * safezoneW,
_SubHeight * safezoneH
];
_ctrl ctrlCommit 0;
_ctrl ctrlSetText '#';
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlSetPosition [
_SubPosX * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.02;
_SubPosX = _SubPosX + _SubDistX1;
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY,
_SubWidth2 * safezoneW,
_SubHeight * safezoneH
];
_ctrl ctrlCommit 0;
_txt = name player;
_ctrl ctrlSetText _txt;
_ctrl ctrlsetTextColor [0,1,0,1];
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlSetPosition [
_SubPosX * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.02;
_SubPosX = _SubPosX + _SubDistX2;
_ctrl = _display ctrlCreate['RscText', -1];
_ctrl ctrlSetPosition [
-_MainWidth * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY,
_SubWidth3 * safezoneW,
_SubHeight * safezoneH
];
_value = missionNamespace getVariable [format ['Epoch_total%1',_stattype],0];
_value = format [_calc,_value];
_value = call compile _value;
if (_value isEqualType "") then {
_ctrl ctrlSetText _value;
}
else {
_ctrl ctrlSetText str _value;
};
_ctrl ctrlsetbackgroundcolor [0.02,0,0.03,0.6];
_ctrl ctrlCommit 0;
_ctrl ctrlSetPosition [
_SubPosX * safezoneW + safezoneX,
_SubPosY * safezoneH + safezoneY
];
_ctrl ctrlCommit 0.02;
waituntil {ctrlCommitted _ctrl};
_SubPosY = _SubPosY+_SubDistY2;
};
_c = _c + 1;
if (_c > 6) then {
_posX = _ZeroX;
_posY = _posY+_MainDistY;
_c = 1;
}
else {
_posX = _posX+_MainDistX;
};
} foreach _UsedStats;

View File

@ -13,16 +13,20 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_interact.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_storSlot","_vehSlot"];
private ["_storSlot","_vehSlot","_buildSlot"];
//[[[end]]]
0 call EPOCH_refeshUI;
if (!isNull _this) then {
_vehSlot = _this getVariable ["VEHICLE_SLOT", "ABORT"];
if (_vehSlot != "ABORT") then {
if !(_vehSlot isEqualTo "ABORT") then {
EPOCH_arr_interactedObjs pushBackUnique _this;
};
_storSlot = _this getVariable["STORAGE_SLOT", "ABORT"];
if (_storSlot != "ABORT") then {
if !(_storSlot isEqualTo "ABORT") then {
EPOCH_arr_interactedObjs pushBackUnique _this;
};
_buildSlot = _this getVariable["BUILD_SLOT", "ABORT"];
if !(_buildSlot isEqualTo "ABORT") then {
EPOCH_arr_interactedObjs pushBackUnique _this;
};
};

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_aiskill","_arrSkills","_arrUnits","_arrVals","_bomb","_config","_currentLimit","_disableAI","_driver","_grp","_index","_jammers","_loop","_minAISkill","_missionConfig","_nonJammer","_nonTrader","_nonTraderAIRange","_playerSpawnArray","_playerSpawnArrayKeyFinal","_pos","_restricted","_sapperHndl","_sapperNum","_spawnLimit","_targetPos","_unit","_units"];
private ["_aiskill","_arrSkills","_arrUnits","_arrVals","_bomb","_config","_currentLimit","_disableAI","_driver","_grp","_index","_jammers","_loop","_minspawndist","_maxspawndist","_minAISkill","_missionConfig","_nonJammer","_nonTrader","_nonTraderAIRange","_playerSpawnArray","_playerSpawnArrayKeyFinal","_pos","_restricted","_sapperHndl","_sapperNum","_spawnLimit","_targetPos","_unit","_units"];
//[[[end]]]
params ["_unitClass",["_trgt",player],["_doVariable",false],["_unitCount",1],["_extraData",[]] ];
@ -159,14 +159,16 @@ switch _unitClass do {
};
case "I_Soldier_EPOCH": {
_extraData params [["_pos",[]],["_copter",objnull]];
_missionConfig = getMissionConfig "CfgEpochSoldier";
_minspawndist = getNumber (_missionConfig >> "minspawndist");
_maxspawndist = getNumber (_missionConfig >> "maxspawndist");
if (_pos isEqualTo []) then {
_pos = [_targetPos,80,150,1,true] call EPOCH_fnc_findSafePos;
_pos = [_targetPos,_minspawndist,_maxspawndist,1,true] call EPOCH_fnc_findSafePos;
};
_pos set [2,0];
_grp = createGroup [RESISTANCE, true];
_grp setBehaviour "COMBAT";
_grp setCombatMode "RED";
_missionConfig = getMissionConfig "CfgEpochSoldier";
_minAISkill = getNumber (_missionConfig >> "minAISkill");
_arrUnits = getArray (_missionConfig >> "unitTypes");
_arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"];

View File

@ -25,7 +25,7 @@
private ["_jammed","_jammer"];
//[[[end]]]
_jammer = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
_jammer = (nearestObjects[cameraon, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {cameraon distance _x < (getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))};
_jammed = false;
if !(_jammer isEqualTo[]) then {
{

View File

@ -27,7 +27,7 @@ private ["_buildingJammerRange","_maintainCount","_rnd"];
if !(isNil "EPOCH_maintainLockout") exitWith {["Already Maintaining a base.", 5] call Epoch_message;};
if (EPOCH_playerCrypto > 0) then {
_buildingJammerRange = getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _this) >> "buildingJammerRange");;
_buildingJammerRange = getnumber (getmissionconfig "CfgEpochClient" >> "CfgJammers" >> (typeof _this) >> "buildingJammerRange");
if (_buildingJammerRange == 0) then { _buildingJammerRange = 75; };
_maintainCount = {(damage _x) > 0} count nearestObjects[_this, ["Constructions_static_F","Constructions_foundation_F","Buildable_Storage","Constructions_lockedstatic_F"], _buildingJammerRange];

View File

@ -36,7 +36,7 @@ _isSnap = false;
_playerEnergyKeyFinal = "EPOCH_playerEnergy";
if !(isNil "_playerEnergyKey") then {_playerEnergyKeyFinal = _playerEnergyKey};
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,[]];
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0];
if (_playerEnergy <= 0) exitWith {
["Need Energy", 5] call Epoch_message;
@ -110,7 +110,7 @@ if (isText(_simulClassConfig)) then {
EPOCH_Z_OFFSET = _offset select 2;
_lastCheckTime = diag_tickTime;
while {EPOCH_target == _currentTarget} do {
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,[]];
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0];
if (_playerEnergy <= 0) exitWith { EPOCH_target = objNull; };
_rejectMove = false;
if ((diag_tickTime - _lastCheckTime) > 10) then {

View File

@ -39,7 +39,7 @@ if (_item == "") exitWith{ EPOCH_target = objNull; };
_playerEnergyKeyFinal = "EPOCH_playerEnergy";
if !(isNil "_playerEnergyKey") then {_playerEnergyKeyFinal = _playerEnergyKey};
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,[]];
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0];
if (_playerEnergy <= 0) exitWith{
["Need Energy", 5] call Epoch_message;
@ -52,6 +52,7 @@ EPOCH_simulSwap_Lock = true;
_objType = typeOf _object;
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_class = getText(_cfgBaseBuilding >> _objType >> "GhostPreview");
_EnablePhysicsOnBuild = ["CfgEpochClient", "EnablePhysicsOnBuild", true] call EPOCH_fnc_returnConfigEntryV2;
if (_class != "") then {
_energyCost = getNumber(_cfgBaseBuilding >> _objType >> "energyCost");
@ -404,7 +405,7 @@ if (_class != "") then {
// remove item here
if (([player, _item] call BIS_fnc_invRemove) == 1) then {
if (_stabilityCheck && !isTouchingGround _currentTarget) then {
if (_stabilityCheck && !isTouchingGround _currentTarget && _EnablePhysicsOnBuild) then {
_offsetZPos = [_currentPos select 0, _currentPos select 1, (_currentPos select 2) - 0.5];
if !(terrainIntersect[_currentPos, _offsetZPos]) then {

View File

@ -115,14 +115,14 @@ if (_object isKindOf "Constructions_static_F" || {(typeof _object) in (call EPOC
_upgradeto = _upgrade select 0;
if (_upgradeto in _doors) then {
_countdoors = count (nearestobjects [_nearestJammer,_doors,_buildingJammerRange]);
_countdoors = count ((nearestobjects [_nearestJammer,_doors,_buildingJammerRange]) - [_object]);
if (_countdoors >= _maxdoors) then {
_canUpgrade = false;
_missingParts = format["Can not upgrade to locked Door / Stairs! Max %1 allowed per Base!", _maxdoors];
};
};
if (_upgradeto in _gates) then {
_countgates = count (nearestobjects [_nearestJammer,_gates,_buildingJammerRange]);
_countgates = count ((nearestobjects [_nearestJammer,_gates,_buildingJammerRange]) - [_object]);
if (_countgates >= _maxgates) then {
_canUpgrade = false;
_missingParts = format["Can not upgrade to Gate! Max %1 allowed per Base!", _maxgates];

View File

@ -0,0 +1,84 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
HandleDamage Eventhandler for A3 Epoch
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_HandleDamage.sqf
*/
params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"];
if !(_source isEqualTo _unit) then {
if ((missionnamespace getvariable ["EPOCH_HandleDamageTimeOut",diag_ticktime]) > diag_ticktime) exitwith {}; // prevent multiple actions here
EPOCH_HandleDamageTimeOut = diag_ticktime + 0.1;
switch _projectile do {
case "B_EnergyPack": {
if (_source distance _unit > 10) exitwith {};
if !(missionnamespace getvariable ["EPOCH_OldRevive",false]) then {
_attachments = handgunItems _source;
if ("Heal_EPOCH" in _attachments) exitwith {
if (lifeState _unit == "INCAPACITATED") exitwith {
EPOCH_HandleDamageTimeOut = diag_ticktime + 1;
_unit setUnconscious false;
_unit playMoveNow 'AmovPercMstpSnonWnonDnon';
};
_highestDMG = 0;
_currentHIT = -1;
_currentDMG = 0;
{
_currentDMG = _x;
if (_currentDMG > _highestDMG) then{
_highestDMG = _currentDMG;
_currentHIT = _forEachIndex;
};
}forEach((getAllHitPointsDamage _unit) param[2,[]]);
if (_highestDMG > 0) then {
_newDMG = 0;
[_unit,[[_currentHIT,_newDMG]]] call EPOCH_client_repairVehicle;
} else {
if ((damage _unit) > 0) then {
[_unit,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
};
if ("Defib_EPOCH" in _attachments) exitwith {
if !(alive _unit) then {
EPOCH_HandleDamageTimeOut = diag_ticktime + 1;
[_unit,_source,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2];
};
};
};
};
case "shell_12g_bb";
case "bbag_pvc";
case "xbow_tranq";
case "tranq_dart": {
if !(lifeState _unit == "INCAPACITATED") then {
EPOCH_HandleDamageTimeOut = diag_ticktime + 1;
_unit setUnconscious true;
(["CfgEpochClient", "UnconsciousTime", [60,180]] call EPOCH_fnc_returnConfigEntryV2) params [["_mintime",60],["_maxtime",180]];
EPOCH_UnconsciousTime = diag_ticktime + _mintime + (random (_maxtime - _mintime));
["You are Knocked out for a while...",5] call Epoch_Message;
};
};
case "B_Swing";
case "B_Stick";
case "B_Hatchet": {
if !(lifeState _unit == "INCAPACITATED") then {
if ((random 100) < (["CfgEpochClient", "UnconsciousChance", 30] call EPOCH_fnc_returnConfigEntryV2)) then {
EPOCH_HandleDamageTimeOut = diag_ticktime + 1;
_unit setUnconscious true;
(["CfgEpochClient", "UnconsciousTime", [60,180]] call EPOCH_fnc_returnConfigEntryV2) params [["_mintime",60],["_maxtime",180]];
EPOCH_UnconsciousTime = diag_ticktime + _mintime + (random (_maxtime - _mintime));
["You are Knocked out for a while...",5] call Epoch_Message;
};
};
};
};
};
_damage

View File

@ -13,9 +13,21 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/event_handlers/EPOCH_InventoryOpened.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_stored","_savecontainer","_blocked","_containerlocked","_seclocked"];
private ["_InvTarget","_stored","_savecontainer","_blocked","_containerlocked","_seclocked"];
//[[[end]]]
params ["_unit","_container","_sec"];
_InvTarget = ObjNull;
{
if (_x isKindOf "MAN" && {player distance _x < 2} && {lifeState _x == "INCAPACITATED"} && {!(_x in [_container,_sec])}) exitwith {
_InvTarget = _x;
};
} foreach [cursortarget,cursorobject];
if (!isnull _InvTarget) exitwith {
player action ["Gear",_InvTarget];
true
};
setMousePosition[0.5, 0.5];
call EPOCH_showStats;
_this spawn EPOCH_initUI;

View File

@ -26,7 +26,7 @@
_toServer - BOOLEAN: (OPTIONAL): false by default
*/
params [ ["_statType",""], ["_adjust",0], ["_toServer",false] ];
params [ ["_statType",""], ["_adjust",0], ["_toServer",false], ["_isTotal",false]];
if(_statType isEqualTo "")exitWith{
diag_log "EPOCHDebug: updatePlayerStats -2- stat type not defined";
@ -38,8 +38,11 @@ if(_adjust isEqualTo 0)exitWith{
private _statVarName = format["EPOCH_total%1",_statType];
private _currentStat = missionNameSpace getVariable[_statVarName,0];
private _newStat = _currentStat + _adjust;
if (_isTotal) then {
_newStat = _adjust;
};
missionNameSpace setVariable[_statVarName,_newStat];
if(_toServer)then{
[player, objNull, _statType, _adjust, false, Epoch_personalToken] remoteExec ["EPOCH_fnc_updatePlayerStats",2];
[player, ObjNull, _statType, _adjust, false, Epoch_personalToken, _isTotal] remoteExec ["EPOCH_fnc_updatePlayerStats",2];
};

View File

@ -0,0 +1,33 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Workaround for delayed positioning for Server side placed items
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_SetFinalDir.sqf
usage:
_array = [];
{
_array pushback [_x,[vectordir _x, VectorUp _x]];
} foreach _objs;
_array remoteExec ["EPOCH_fnc_SetFinalDir",_player];
*/
uisleep 1; // Give some time for init Server Side
{
_x params ["_obj","_dir"];
if (_dir isEqualType []) then {
_obj setVectorDirAndUp _dir;
}
else {
_obj setdir _dir;
};
} foreach _this;

View File

@ -34,7 +34,7 @@ _tapDiag = _playerDeathScreen;
_playerAliveTimeKeyFinal = "EPOCH_playerAliveTime";
if !(isNil "_playerAliveTimeKey") then {_playerAliveTimeKeyFinal = _playerAliveTimeKey};
_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKeyFinal,[]];
_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKeyFinal,0];
_doRevenge = ((getNumber(_config >> "playerDisableRevenge") isEqualTo 0) && _playerAliveTime >= _playerRevengeMinAliveTime);

View File

@ -41,6 +41,7 @@ switch true do {
_attachments = handgunItems player;
_heal = false;
if (_cursorTarget isKindOf "Man") then {
if !(missionnamespace getvariable ["EPOCH_OldRevive",false]) exitwith {};
if ("Heal_EPOCH" in _attachments) then {
_heal = true;
};
@ -74,6 +75,9 @@ switch true do {
}forEach((getAllHitPointsDamage _cursorTarget) param[2,[]]);
if (_highestDMG > 0) then {
_newDMG = ((_highestDMG - 0.5) max 0);
if (_cursorTarget iskindof "MAN") then {
_newDMG = ((_highestDMG - 1) max 0);
};
["Partially healed / repaired",5] call epoch_message;
if (local _cursorTarget) then {
[_cursorTarget,[[_currentHIT,_newDMG]]] call EPOCH_client_repairVehicle;

View File

@ -280,7 +280,7 @@ if (_dikCode in (actionKeys "TacticalView")) then {
_handled = true;
};
if (_dikCode in (actionKeys "NightVision")) then {
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,[]];
_playerEnergy = missionNamespace getVariable [_playerEnergyKeyFinal,0];
if (_playerEnergy == 0) then {
["Night Vision Goggles: Need Energy", 5] call Epoch_message;
_handled = true;

View File

@ -0,0 +1 @@
[player,GetUnitLoadout Player,missionNamespace getVariable [_playerRandomVarKey, -1]] call (missionnamespace getvariable ["Epoch_SetUnitLoadout",{}]);

View File

@ -0,0 +1,87 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Change PlayerLoadout
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/inventory/EPOCH_SetUnitLoadout.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_type","_loadabs"];
//[[[end]]]
params ["_newPlyr","_loadout",["_key",-1000]];
_tmpkey = (missionNamespace getVariable _playerRandomVarKey);
if (isnil "_tmpkey") exitwith {};
if !(_key isEqualTo (missionNamespace getVariable _playerRandomVarKey)) exitwith {};
// _loadout params ["_primaryarr","_secondaryarr","_handgunarr","_uniformarr","_vestarr","_bpackarr","_HeadGear","_Glasses","_Rangefinderarr","_LinedItemsarr"];
_loadout = +_loadout;
_loadout params ["","","","_uniformarr","_vestarr","_bpackarr","","","",""];
_loadout set [3,[]];
_loadout set [4,[]];
_loadout set [5,[]];
_newPlyr setunitloadout _loadout;
_uniformarr params [["_uniform",""],["_uniformitems",[]]];
_vestarr params [["_vest",""],["_vestitems",[]]];
_bpackarr params [["_bpack",""],["_bpackitems",[]]];
if !(_uniform isequalto "") then {
_newPlyr forceadduniform _uniform;
};
if !(_vest isequalto "") then {
_newPlyr addVest _vest;
};
if !(_bpack isequalto "") then {
_newPlyr addBackpack _bpack;
};
{
_x params ["_container","_items"];
if !(isnull _container) then {
clearitemcargoglobal _container;
clearbackpackcargoglobal _container;
clearmagazinecargoglobal _container;
clearweaponcargoglobal _container;
{
if (count _x > 2) then {
_container addMagazineAmmoCargo _x;
}
else {
if ((_x select 0) isequaltype []) then {
_container addWeaponWithAttachmentsCargoGlobal _x;
}
else {
_x params [["_type",""],["_cnt",1]];
if !(_cnt isequaltype 1) then {
_cnt = 1;
};
if (_type iskindof "Bag_Base") then {
_container addBackpackCargoGlobal [_type,_cnt];
}
else {
_container addItemCargoGlobal [_type,_cnt];
};
};
};
} foreach _items;
};
} foreach [
[Uniformcontainer _newPlyr, _uniformitems],
[Vestcontainer _newPlyr, _vestitems],
[BackpackContainer _newPlyr, _bpackitems]
];
/*
_loadabs = loadabs _newPlyr;
if !(uniform _newPlyr isequalto _uniform && vest _newPlyr isequalto _vest && backpack _newPlyr isequalto _bpack) then {
diag_log format ["EPOCH Debug: Setunitloadout failed - Unifmorm should: %1 is: %2 - Vest should: %3 is: %4 - Backpack should: %5 is: %6",_uniform,uniform _newPlyr,_vest,vest _newPlyr,_bpack,backpack _newPlyr];
_loadabs = -1;
};
_loadabs
*/

View File

@ -111,7 +111,8 @@ _fnc_moveWeaponFromContainer = {
//add new entry
_loadout set [_dIdx,_temp];
//save changes
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
};
_fnc_MoveWeaponToContainer = {
@ -135,7 +136,8 @@ _fnc_MoveWeaponToContainer = {
((_loadout select (_container + 3)) select 1) append [[_loadout select _sIdx,1]]; //cut out from above comment, looks like appending alone works great
_loadout set [_sIdx,[]];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
};
_fnc_canMoveToContainer = {
@ -230,7 +232,8 @@ _fnc_MoveShellToContainer = {
((_loadout select (_container + 3)) select 1) append [_temp2]; //cut out from above comment, looks like appending alone works great
};
(_loadout select 0) set [5,[]];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
};
_fnc_moveShellFromContainer = {
@ -248,7 +251,8 @@ _fnc_moveShellFromContainer = {
((_loadout select (_container + 3)) select 1) deleteAt _sIdx;
};
(_loadout select 0) set [5,[_temp select 0,_temp select 2]];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
};
};
@ -272,7 +276,8 @@ _fnc_dropEquipShells = {
if !(_drop) exitWith {_return = 4;};
_equipped call _fnc_dropItem;
(_loadout select 0) set [5,[]];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
_return = 2;
};
if (_forceEquip && _return != 4) then {
@ -345,25 +350,29 @@ _fnc_dropEquipAccessories = {
_equipped = (_loadout select _slot) select _accessory;
if (player canAdd _equipped) then {
(_loadout select _slot) set [_accessory,""];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
player addItem _equipped;
_return = 1;
} else {
if !(_drop) exitWith {_return = 4;};
_equipped call _fnc_dropItem;
(_loadout select _slot) set [_accessory,""];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
_return = 2;
};
if ((((toLower _equipped) != (toLower _item)) || _forceEquip) && _return != 4) then {
(_loadout select _slot) set [_accessory,_item];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
player addItem _equipped;
player removeItem _item;
};
} else {
(_loadout select _slot) set [_accessory,_item];
player setUnitLoadout _loadout;
// player setUnitLoadout _loadout;
[player,_loadout,missionNamespace getVariable [_playerRandomVarKey, -1]] call Epoch_SetUnitLoadout;
player removeItem _item;
_return = 1;
};

View File

@ -1,119 +0,0 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Description:
Runs chances to spawn loot objects on building
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/looting/EPOCH_spawnLoot.sqf
Example:
[_building] call EPOCH_spawnLoot;
Parameter(s):
_this select 0: OBJECT - building
_this select 1: NUMBER - Number of buildings checked before a building in the array can reattempt looting. Default: 333
_this select 2: NUMBER - Limit of loot objects, as new are created old ones will be removed. Default: 33
Returns:
BOOL
*/
//[[[cog import generate_private_arrays ]]]
private ["_cfgBaseBuilding","_class","_color","_colors","_config","_delete","_dir","_item","_lootBias","_lootLimit","_lootType","_loots","_masterConfig","_pos","_posName","_positions","_possibleCount","_possibleLoots","_randomIndex","_return","_selectedConfig","_selectedLoot","_lootObjectLimit"];
//[[[end]]]
params [["_building",objNull,[objNull]], ["_LootBiasAdd",0]];
_lootObjectLimit = 33;
_selectedConfig = typeOf _building;
if (_selectedConfig isEqualTo "") then {
(getModelInfo _building) params [["_modelName",""]];
if (!isnil "_modelName") then {
// replace spaces and periods with underscores
_selectedConfig = (_modelName splitString " .") joinString "_";
};
};
//diag_log format["DEBUG: _selectedConfig %1",_selectedConfig];
_masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig;
_config = _masterConfig >> _selectedConfig;
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
// exit with false if building is not lootable
_return = false;
if !(isClass(_config)) exitWith {_return};
_lootBias = getNumber(_config >> "lootBias") + _LootBiasAdd;
_lootBias = _lootBias / ((count (((position player) nearEntities 75) select {isplayer _x && alive _x})) max 1);
_lootType = getText(_config >> "lootType");
_loots = getArray(_config >> _lootType);
_lootLimit = (round random(getNumber(_config >> "limit"))) max 1;
_posName = "";
if ((random 100) < _lootBias) then {
_possibleLoots = [];
{
_x params ["_posNameTMP","_class","_randomColor"];
_posName = _posNameTMP;
_positions = getArray(_config >> _posName);
{
_possibleLoots pushBack [_class,_randomColor,_x];
} forEach _positions;
} forEach _loots;
if !(_possibleLoots isEqualTo []) then {
for "_i" from 1 to _lootLimit do
{
_return = true;
_possibleCount = count _possibleLoots;
if (_possibleCount > 0) then {
_randomIndex = (floor random(_possibleCount));
_selectedLoot = _possibleLoots deleteAt _randomIndex;
//
_selectedLoot params ["_class","_randomColor","_position"];
_position params ["_m2WPos","_relDir"];
_pos = _building modelToWorld _m2WPos;
// force item to ground level if resulting z pos is below ground.
if (_pos select 2 < 0) then {
_pos set[2, 0];
};
if (_class isEqualType []) then {
_class = selectRandom _class;
};
_dir = _relDir + (getDir _building);
_item = createVehicle[_class, _pos, [], 0.0, "CAN_COLLIDE"];
_item setDir _dir;
EPOCH_lootObjects pushBack _item;
if (count EPOCH_lootObjects > _lootObjectLimit) then {
_delete = EPOCH_lootObjects deleteAt 0;
if (!isnull _delete) then {
deleteVehicle _delete;
};
};
if (surfaceIsWater _pos) then {
_item setPosASL _pos;
} else {
_item setPosATL _pos;
};
if (_randomColor isEqualTo "true") then {
_colors = getArray(_cfgBaseBuilding >> _class >> "availableTextures");
if !(_colors isEqualTo[]) then {
_color = selectRandom _colors;
_item setObjectTextureGlobal[0, _color];
};
};
};
};
} else {
diag_log format["DEBUG: no positions for: %1",_posName];
};
};
_return

View File

@ -14,7 +14,7 @@
*/
//[[[cog import generate_private_arrays ]]]
private ["_Ignatz_SP_Array","_VehiclesAndAmmo","_actionName","_actionTitle","_ammocount","_ammotype","_cost","_costs","_costsFree","_costsText","_fnc_actionTitle","_fnc_getCosts","_magname","_maxammototal","_maxmags","_missingammo","_ownedcompletemags","_refuel_amount","_refuel_costs","_refuel_updateInterval","_reloagmags","_repairTime","_repair_costs","_totalammocount","_turret","_typeName","_vehicle"];
private ["_Ignatz_SP_Array","_AmmoConfig","_VehiclesWithAmmo","_VehicleAmmo","_actionName","_actionTitle","_ammocount","_ammotype","_cost","_costs","_costsFree","_costsText","_fnc_actionTitle","_fnc_getCosts","_magname","_maxammototal","_maxmags","_missingammo","_ownedcompletemags","_refuel_amount","_refuel_costs","_refuel_updateInterval","_reloagmags","_repairTime","_repair_costs","_totalammocount","_turret","_typeName","_vehicle"];
//[[[end]]]
Ignatz_Refuel = nil;
Ignatz_Repair = nil;
@ -31,7 +31,8 @@ _refuel_costs = ["CfgServicePoint", "refuel_costs", []] call EPOCH_fnc_return
_refuel_updateInterval = ["CfgServicePoint", "refuel_updateInterval", 1] call EPOCH_fnc_returnConfigEntryV2;
_refuel_amount = ["CfgServicePoint", "refuel_amount", 0.1] call EPOCH_fnc_returnConfigEntryV2;
_repairTime = ["CfgServicePoint", "repairTime", 1.2] call EPOCH_fnc_returnConfigEntryV2;
_VehiclesAndAmmo = ["CfgServicePoint", "VehiclesAndAmmo", []] call EPOCH_fnc_returnConfigEntryV2;
_AmmoConfig = (missionconfigfile >> "CfgServicePoint" >> "VehiclesAndAmmo");
_VehiclesWithAmmo = ("true" configClasses _AmmoConfig) apply {configname _x};
_Ignatz_SP_Array = [];
_costsFree = 'free';
@ -63,7 +64,8 @@ _fnc_actionTitle = {
};
{
if ((typeof _vehicle) == _x select 0) exitwith {
if ((tolower (typeof _vehicle)) == (tolower _x)) exitwith {
_VehicleAmmo = getArray (_AmmoConfig >> _x >> "MagsTurrets");
{
_x params ["_ammotype","_turret","_maxmags","_costs",["_ammocount",getNumber (configfile >> "CfgMagazines" >> (_x select 0) >> "count")]];
if (_myturret isequalto _turret) then {
@ -91,9 +93,9 @@ _fnc_actionTitle = {
_Ignatz_SP_Array pushback [_actionTitle,[_vehicle,_ammotype,_turret,_reloagmags,_ammocount,_costs]];
};
};
} foreach (_x select 1);
} foreach _VehicleAmmo;
};
} foreach _VehiclesAndAmmo;
} foreach _VehiclesWithAmmo;
if (player == driver _vehicle) then {
_costs = [_vehicle, _refuel_costs] call _fnc_getCosts;

View File

@ -46,6 +46,8 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
// wait for loadAbs to sync
waitUntil {_loadAbs isEqualTo (loadAbs _playerObject)};
_goggles = goggles _playerObject;
// switch to new playerObject
selectPlayer _playerObject;
@ -77,6 +79,9 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
closeDialog 0;
("BIS_fnc_respawnCounter" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
removeGoggles player;
player addGoggles _goggles;
{
player removeEventHandler [_x, 0];
player addEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)];

View File

@ -10,16 +10,31 @@ if (EPOCH_IsAutoRunning) then {
};
};
if (animationstate player in ['aadjpknlmstpsraswpstddown','aadjpknlmstpsraswrflddown'] && cameraview == 'GUNNER' && (player weapondirection (currentweapon player)) select 2 < -0.88) then {
_fadedblack = true;
TitleText ['Stop BugUsing!','BLACK FADED'];
if (player == vehicle player && {getPosATL player select 2 > 0.4} && {cameraview == 'GUNNER'}) then {
_weapondir = player weapondirection (currentweapon player);
if (animationstate player in ['aadjpknlmstpsraswpstddown','aadjpknlmstpsraswrflddown'] && {_weapondir select 2 < -0.88}) then {
player switchCamera "EXTERNAL";
player playAction "AdjustF";
_fadedblack = true;
TitleText ['Stop BugUsing!','BLACK FADED'];
}
else {
_eyePos = eyepos player;
_eyedist = 0.25;
_end = [((_eyePos select 0)+_eyedist*(_weapondir select 0)),((_eyePos select 1)+_eyedist*(_weapondir select 1)),((_eyePos select 2)+_eyedist*(_weapondir select 2))];
_objects = lineintersectswith [_eyePos,_end,player];
_objects = _objects select {((_x iskindof "Constructions_static_F") and not(_x isKindOf "WoodLargeWall_EPOCH"))};
if !(_objects isequalto []) then {
player switchCamera "EXTERNAL";
_fadedblack = true;
TitleText ['Stop BugUsing!','BLACK FADED'];
}
else {
call _UnFadeCheck;
};
};
}
else {
if(_fadedblack) then {
[] spawn {
uisleep 2;
TitleText ['','PLAIN DOWN'];
};
_fadedblack = false;
};
};
call _UnFadeCheck;
};

View File

@ -427,8 +427,16 @@ if (cameraview isequalto "GROUP") then {
vehicle player switchCamera "Internal";
};
if (lifeState player == "INCAPACITATED") then {
if ((missionnamespace getvariable ["EPOCH_UnconsciousTime",diag_ticktime]) < diag_ticktime) then {
player setUnconscious false;
player playMoveNow 'AmovPercMstpSnonWnonDnon';
};
};
// force update
if (EPOCH_forceUpdateNow) then {
_UpdateTopStats = true;
_forceUpdate = false;
EPOCH_forceUpdate = false;
EPOCH_forceUpdateNow = false;

View File

@ -202,3 +202,18 @@ _playerNuisance = [_playerNuisanceKey,-1,_playerNuisanceMax,_playerNuisanceMin]
// calculate max stamina
EPOCH_playerStaminaMax = (100 * (round(_playerAliveTime/360)/10)) min 2500;
if (_isOnFoot) then {
_Walkdist = _lastPlayerPos2 distance (getposATL player);
if (_Walkdist < 150) then {
_TotalWalkDist = _TotalWalkDist + _Walkdist;
["WalkDist",_TotalWalkDist,false,true] call EPOCH_client_updatePlayerStat;
};
};
_lastPlayerPos2 = getposATL player;
if (_playerAliveTime > _MaxAliveTime) then {
_MaxAliveTime = _playerAliveTime;
["MaxAliveTime",_MaxAliveTime,false,true] call EPOCH_client_updatePlayerStat;
};
_PlayTime = _PlayTime + diag_ticktime - _PlayTimeTimer;
["PlayTime",_PlayTime,false,true] call EPOCH_client_updatePlayerStat;
_PlayTimeTimer = diag_ticktime;

View File

@ -21,3 +21,4 @@ diag_log format["DEBUG: _spawnUnits %1",_spawnUnits];
if !(_spawnUnits isEqualTo[]) then{
(selectRandom _spawnUnits) call EPOCH_unitSpawn;
};
_UpdateTopStats = true;

View File

@ -2,4 +2,4 @@
call epoch_favBar_refresh;
// process loot
_LootBiasAdd = _LootBiasAdd call _lootBubble;
call _lootBubble;

View File

@ -4,6 +4,9 @@ waitUntil {!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")};
// load favBar
'load' spawn epoch_favBar_draw;
// Switch to 3rd person (if possible)
vehicle player switchCamera 'EXTERNAL';
// force update within 15 seconds
EPOCH_forceUpdate = false;
_forceUpdate = false;
@ -15,10 +18,15 @@ _clientAliveTimer = diag_tickTime;
// Fade Black Screen
_fadedblack = false;
// Lootspawner
_LootSpawned = false;
_LootBiasAdd = 30;
_UnFadeCheck = {
if(_fadedblack) then {
[] spawn {
uisleep 1.5;
TitleText ['','PLAIN DOWN'];
};
_fadedblack = false;
};
};
// init player stat vars
_gmVarsInit = ["CfgEpochClient", "gmVars", [["Temp",98.6],["Hunger",500],["Thirst",500],["Toxicity",0],["Stamina",10],["BloodP",100],["Alcohol",0],["Radiation",0]]] call EPOCH_fnc_returnConfigEntryV2;
@ -70,6 +78,7 @@ _customVarLimits = _customVarsInit apply {_x param [2,[]]};
if !(isNil "_varNameTmp") then {_varName = _varNameTmp};
missionNamespace setVariable [_varName, missionNamespace getVariable [format["EPOCH_player%1",_x], _varDefault]];
} forEach _customVarNames;
missionNamespace setVariable [call compile "_playerRandomVarKey", round (diag_tickTime + random 99999)];
// only changed within this loop
_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKey, _playerAliveTimeDefault];
@ -86,7 +95,14 @@ _fnc_forceUpdate = {
if !(isNil "_varNameTmp") then {_varName = _varNameTmp};
_customVars pushBack (missionNamespace getVariable [_varName,_defaultVarValues select _foreachindex]);
} forEach _customVarNames;
[player,_customVars,Epoch_personalToken] remoteExec ["EPOCH_fnc_savePlayer",2];
_stats = [
["WalkDist",round _TotalWalkDist,true],
["MaxAliveTime",_MaxAliveTime,true],
["PlayTime", round _PlayTime, true],
["PublicStats",missionnamespace getvariable ["EPOCH_totalPublicStats",1], true]
];
[player,_customVars,Epoch_personalToken,_stats,_UpdateTopStats] remoteExec ["EPOCH_fnc_savePlayer",2];
_UpdateTopStats = false;
};
// disable fuel sources client side.
@ -122,6 +138,7 @@ _EPOCH_Autorunspeed = 1;
// init config data
_antagonistRndChance = ["CfgEpochClient", "antagonistRngChance", 100] call EPOCH_fnc_returnConfigEntryV2;
_LootCleanupTime = ["CfgBuildingLootPos", "LootCleanupTime", 300] call EPOCH_fnc_returnConfigEntryV2;
_baseRadiationLoss = ["CfgEpochClient", "baseRadiationLoss", -0.1] call EPOCH_fnc_returnConfigEntryV2;
_baseRadiationLossImmunityPenalty = ["CfgEpochClient", "baseRadiationLossImmunityPenalty", -0.1] call EPOCH_fnc_returnConfigEntryV2;
_baseHungerLoss = ["CfgEpochClient", "baseHungerLoss", 2] call EPOCH_fnc_returnConfigEntryV2;
@ -207,93 +224,154 @@ missionNamespace setVariable [_playerSpawnArrayKey, _playerSpawnArray];
// lootBubble Init
_masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig;
_LootedBuildings = [];
_lootClasses = [];
_lootClassesIgnore = ['Default'];
'_cN = configName _x;if !(_cN in _lootClassesIgnore)then{_lootClasses pushBackUnique (toLower _cN)}; true' configClasses _masterConfig;
_lastPlayerPos = getPosATL player;
_pushbacklootedbld = {
private ["_lootCheckBufferLimit"];
_lootCheckBufferLimit = 333;
EPOCH_LootedBlds pushBackUnique _this;
if (count EPOCH_LootedBlds >= _lootCheckBufferLimit) then {
EPOCH_LootedBlds deleteAt 0;
};
};
_lastPlayerPos2 = getPosATL player;
_TotalWalkDist = missionnamespace getvariable ["EPOCH_totalWalkDist",0];
_MaxAliveTime = missionnamespace getvariable ["EPOCH_totalMaxAliveTime",0];
_PlayTime = missionnamespace getvariable ["EPOCH_totalPlayTime",0];
_PlayTimeTimer = diag_ticktime;
_UpdateTopStats = false;
EPOCH_MyStatsPublic = !((missionnamespace getvariable ["EPOCH_totalPublicStats",1]) isEqualTo 0);
_lootBubble = {
private["_jammer", "_others", "_objects", "_nearObjects", "_building", "_lootDist", "_lootLoc", "_playerPos", "_distanceTraveled","_AddBias","_dir","_minlootdist","_maxlootdist"];
_LootBiasAdd = _this;
if (!alive player) exitwith {};
if (speed vehicle player > 30) exitwith {};
_playerPos = getPosATL vehicle player;
_distanceTraveled = _lastPlayerPos distance2D _playerPos;
_nearestbuilding = nearestBuilding player;
if (player distance _nearestbuilding < (((sizeOf (typeOf _nearestbuilding))/2) min 15)) then {
private _selectedConfig = typeOf _nearestbuilding;
if (_selectedConfig isEqualTo "") then {
(getModelInfo _nearestbuilding) params [["_modelName",""]];
if (!isnil "_modelName") then {
_selectedConfig = (_modelName splitString " .") joinString "_";
};
};
if ((toLower _selectedConfig) in _lootClasses) then {
_nearestbuilding call _pushbacklootedbld;
};
if (_lastPlayerPos distance2D _playerPos < 30) exitwith {};
_lastPlayerPos = _playerPos;
if (missionnamespace getvariable ["InSafeZone",false]) exitwith {};
_objects = (player nearObjects ["Building", 60]) select {
(_x distance player > 15) &&
{!(_x in _LootedBuildings)} &&
{(_x nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 15]) isEqualTo []} &&
{(_x nearObjects ["PlotPole_Epoch", 100]) isEqualTo []} &&
{(_x nearObjects ["ProtectionZone_Invisible_F", 25]) isEqualTo []} &&
{!(_x getvariable ["EPOCH_Skiploot",false])} &&
{!(isObjectHidden _x)}
};
if (_distanceTraveled > 10) then {
_lastPlayerPos = _playerPos;
if (_distanceTraveled < 100) then {
_minlootdist = 30;
_maxlootdist = 75;
_dir = 30;
if (speed (vehicle player) < 30) then {
_LootBiasAdd = (_LootBiasAdd + 0.5) min 50;
_minlootdist = 15;
_maxlootdist = 50;
_dir = 45;
// systemchat format ["Found %1 not looted Buildings", count _objects];
if !(_objects isEqualTo[]) then {
_LootsArray = [];
{
_building = _x;
_LootedBuildings pushback _x;
if (count _LootedBuildings > 300) then {
_LootedBuildings deleteat 0;
};
_lootDist = (_distanceTraveled max _minlootdist) min _maxlootdist;
_lootLoc = player getRelPos [_lootDist, (random [-_dir,0,_dir])];
if (surfaceiswater _lootLoc) then {
_lootLoc set [2,(getPosASL vehicle player) select 2];
// _building setvariable ["Epoch_LastLootCheck",diag_ticktime];
_selectedConfig = typeOf _building;
if (_selectedConfig isEqualTo "") then {
(getModelInfo _building) params [["_modelName",""]];
if (!isnil "_modelName") then {
_selectedConfig = (_modelName splitString " .") joinString "_";
};
};
_objects = (nearestObjects [_lootLoc, [], 50]) select {
!(_x in EPOCH_LootedBlds) &&
{_x distance player > _minlootdist} &&
{_x distance player < _maxlootdist} &&
{
private _selectedConfig = typeOf _x;
if (_selectedConfig isEqualTo "") then {
(getModelInfo _x) params [["_modelName",""]];
if (!isnil "_modelName") then {
_selectedConfig = (_modelName splitString " .") joinString "_";
_BuildingLootVars = missionnamespace getvariable [format ["Epoch_BuildingLootVars_%1",_selectedConfig],[]];
if (_BuildingLootVars isEqualTo []) then {
if (_foreachindex > 10) exitwith { // Do not store / check more than 10 Building Types in one check
_BuildingLootVars = [false];
};
_config = _masterConfig >> _selectedConfig;
if (isClass(_config)) then {
_lootType = getText(_config >> "lootType");
_EpochLootChance = getNumber (_config >> "EpochLootChance");
_limit = getNumber (_config >> "limit");
_GroundSpawnChance = getNumber (_config >> "GroundSpawnChance");
_MinGroundContainers = getNumber (_config >> "MinGroundContainers");
_MaxGroundContainers = getNumber (_config >> "MaxGroundContainers");
_loots = getArray(_config >> "loottypes");
_lootpositions = [];
_possibleLoots = [];
{
_x params ["_posNameTMP","_class","_randomColor"];
_posName = _posNameTMP;
_positions = getArray(_config >> _posName);
{
_possibleLoots pushBack [_class,_randomColor,_x];
if !((tolower _posName) in ["cabinetpos","toolrackpos"]) then {
_LootPositions = _LootPositions + getArray (_config >> _posName);
};
} forEach _positions;
} forEach _loots;
_BuildingLootVars = [true,_lootType,_EpochLootChance,_limit,_GroundSpawnChance,_MinGroundContainers,_MaxGroundContainers,_possibleLoots,_lootpositions];
};
if (_BuildingLootVars isEqualTo []) then {
_BuildingLootVars = [false];
};
missionnamespace setvariable [format ["Epoch_BuildingLootVars_%1",_selectedConfig],_BuildingLootVars];
};
_BuildingLootVars params ["_DoSpawn","_lootType","_EpochLootChance","_limit","_GroundSpawnChance","_MinGroundContainers","_MaxGroundContainers","_possibleLoots","_lootpositions"];
if (_DoSpawn) then {
_possibleLoots = +_possibleLoots;
_lootpositions = +_lootpositions;
_buildingLoot = [];
if ((random 100) < _EpochLootChance) then {
_buildingLoot = [_building,"EpochLoot",[]];
if !(_possibleLoots isEqualTo []) then {
_lootLimit = (round random _limit) max 1;
for "_i" from 1 to _lootLimit do {
_possibleCount = count _possibleLoots;
if (_possibleCount > 0) then {
_randomIndex = (floor random(_possibleCount));
_selectedLoot = _possibleLoots deleteAt _randomIndex;
_selectedLoot params ["_class","_randomColor","_position"];
_position params ["_m2WPos","_relDir"];
_pos = _building modelToWorld _m2WPos;
if (_pos select 2 < 0) then {
_pos set[2, 0];
};
if (_class isEqualType []) then {
_class = selectRandom _class;
};
_dir = _relDir + (getDir _building);
_color = "";
if (_randomColor isEqualTo "true") then {
_colors = getArray(_cfgBaseBuilding >> _class >> "availableTextures");
if !(_colors isEqualTo[]) then {
_color = selectRandom _colors;
};
};
(_buildingLoot select 2) pushback [_class, _pos, _dir, _color];
};
};
};
((toLower _selectedConfig) in _lootClasses)
}
};
if (count _objects > 4) then { // remove the farthest away buildings
_objects resize 4;
};
// diag_log format["DEBUG: loot objects %1",_objects];
_jammer = ((nearestObjects [_lootLoc, call EPOCH_JammerClasses, ((call EPOCH_MaxJammerRange) + 50)]) select {_x distance _lootLoc < ((getnumber (getmissionconfig "cfgEpochClient" >> "CfgJammers" >> (typeof _x) >> "buildingJammerRange"))+50)}) + (_lootLoc nearObjects ["ProtectionZone_Invisible_F", 25]);
if (!(_objects isEqualTo[]) && (_jammer isEqualTo[])) then {
_building = selectRandom _objects;
if (_building getvariable ["EPOCH_Skiploot",false]) exitwith {};
if !(_building in EPOCH_LootedBlds) then {
_others = _building nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 15];
if (_others isEqualTo[]) then {
_nearObjects = nearestObjects[_building, ["WH_Loot", "Animated_Loot"], 25 min ((sizeOf (typeOf _building))/2)];
//diag_log format["DEBUG: sizeof %1 %2",sizeOf (typeOf _building), typeOf _building];
if (_nearObjects isEqualTo[]) then {
_building call _pushbacklootedbld;
_LootBiasAdd = if ([_building,_LootBiasAdd] call EPOCH_spawnLoot) then {(_LootBiasAdd - 7) max 0} else {_LootBiasAdd};
else {
if ((random 100) < _GroundSpawnChance) then {
_buildingLoot = [_building,"GroundLoot",[]];
if !(_lootpositions isEqualTo []) then {
for "_i" from 1 to (_MinGroundContainers + (round (random (_MaxGroundContainers - _MinGroundContainers)))) do {
if ((count _lootpositions) > 0) then {
_position = _lootpositions deleteat (floor (random (count _lootpositions)));
_position params ["_m2WPos","_relDir"];
_pos = _building modelToWorld _m2WPos;
_pos = _pos vectoradd [0,0,0.02];
if (_pos select 2 < 0) then {
_pos set[2, 0];
};
(_buildingLoot select 2) pushback [_lootType,_pos];
};
};
};
};
};
if !(_buildingLoot isEqualTo []) then {
_LootsArray pushback _buildingLoot;
};
};
} foreach _objects;
// systemchat format ["Spawned Loot in %1 Buildings", count _LootsArray];
if !(_LootsArray isEqualTo []) then {
[player,Epoch_personalToken,_LootsArray] remoteExec ["EPOCH_server_spawnLoot",2];
};
};
_LootBiasAdd
};
// init weather temperature var if not already set

View File

@ -153,9 +153,26 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
lnbSetValue [_TraderItemsBox, [_id,0], _rounds];
lnbSetPicture [_TraderItemsBox, [_id,0], _item call EPOCH_itemPicture];
if !(_tooltip isequalto "") then {
lbSetTooltip [_TraderItemsBox, _id*3, _tooltip];
lnbSetColor [_TraderItemsBox,[_id,2],[1,(_rounds/_maxrnd),0,1]];
};
_description = "";
{
_description = gettext (configfile >> _x >> _item >> "descriptionShort");
if !(_description isEqualTo "") exitwith {
{
while {_description find (_x select 0) > -1} do {
_remove = _description find (_x select 0);
_description = (_description select [0,_remove]) + "\n" + (_description select [(_remove+(_x select 1))]);
};
if !(_tooltip isEqualTo "") then {
_tooltip = _tooltip + "\n";
};
} foreach [["<br />",6],["<br/>",5]];
};
} foreach ["cfgmagazines","cfgweapons","cfgvehicles"];
_tooltip = _tooltip + _description;
lbSetTooltip [_TraderItemsBox, _id*3, _tooltip];
};
};
};

View File

@ -0,0 +1,77 @@
_this spawn {
params ["_Building","_Vehicle",["_Textures",[]]];
_PaintingCosts = getnumber (missionconfigfile >> "CfgPainting" >> "DefaultVehicle" >> "PaintingCosts");
if (isclass (missionconfigfile >> "CfgPainting" >> (typeof _Vehicle))) then {
_PaintingCosts = getnumber (missionconfigfile >> "CfgPainting" >> (typeof _Vehicle) >> "PaintingCosts");
};
if (EPOCH_playerCrypto < _PaintingCosts) exitWith {
_line = format ['You need %1 Crypto for Painting', _PaintingCosts];
[_line,5] call Epoch_message;
};
_ok = true;
_Check1 = {
_out1 = true;
if (_Vehicle distance2D _Building > 2.5) exitwith {
["Park in center of the Garage",5] call Epoch_Message;
false
};
if !((crew _Vehicle) isEqualTo []) exitwith {
["All passengers have to leave the Vehicle",5] call Epoch_Message;
false
};
{
_playerPosASL = visiblePositionASL _x;
_abovePlayerPosASL = [_playerPosASL select 0,_playerPosASL select 1,(_playerPosASL select 2) + 15];
if (lineIntersects [_playerPosASL, _abovePlayerPosASL, _x]) exitwith {
["All Players have to leave the Garage",5] call Epoch_Message;
_out1 = false;
};
} foreach (_Building nearentities ["MAN",(sizeof (typeof _Building))/2]);
_out1
};
_DoorCheck = {
(_building animationPhase "Lroll_door") < 0.1
};
_Animate = {
_Building animate ["Lroll_door",_this];
_Building animate ["Uroll_door",_this];
_Building animate ["door_2",if (_this == 1) then {0} else {1}];
};
if !(call _Check1) exitwith {};
0 call _Animate;
waituntil {uisleep 0.2; !(call _Check1) || call _DoorCheck};
if !(call _DoorCheck) exitwith {};
_smokes = [];
_smokeclasses = ["SmokeShellOrange","SmokeShellBlue","SmokeShellPurple","SmokeShellRed","SmokeShellGreen","SmokeShellYellow"];
for "_i" from 0 to 5 do {
_pos = switch _i do {
case 0: {[-1.5,2,-0.35]};
case 1: {[1.5,2,-0.35]};
case 2: {[-1.5,-2,-0.35]};
case 3: {[1.5,-2,-0.35]};
case 4: {[0,0,-0.35]};
default {[0,0,0]};
};
if !(call _DoorCheck) exitwith {};
_smoke = (_smokeclasses deleteat 0) createVehicle getPosATL _Vehicle;
_smoke attachTo [_Vehicle,_pos];
_smokes pushback _smoke;
uisleep 3.5;
};
if !(call _DoorCheck) exitwith {
["Painting Abort - Someone has opened the Door",5] call Epoch_Message;
{
deletevehicle _x;
} foreach _smokes;
1 call _Animate;
};
if !(_Textures isEqualTo []) then {
[_vehicle,_PaintingCosts,_Textures,player,Epoch_personalToken] remoteexec ['epoch_server_paintvehicle',2];
};
{
deletevehicle _x;
} foreach _smokes;
uisleep 5;
["Painting finished! Thank you very much...",5] call Epoch_Message;
1 call _Animate;
};

View File

@ -0,0 +1,21 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Custom A3 Epoch HandleDamage Eventhandler
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/custom/EPOCH_custom_EH_HandleDamage.sqf
*/
params ["_unit", "_selection", "_damage", "_source", "_projectile", "_hitIndex", "_instigator", "_hitPoint"];
_damage

View File

@ -74,7 +74,7 @@ _respawnButton ctrlEnable false;
(isNull _display) || ((_startTime - diag_tickTime) <= 0)
};
if (!isNull _display) then {
player setUnitLoadout (getUnitLoadout player);
call (missionnamespace getvariable ["EPOCH_ReloadLoadout",{}]);
uisleep 1; // give one second to broadcast clothing change
missionnamespace setvariable ["EPOCH_forceUpdateNow",true];
};

View File

@ -28,7 +28,7 @@ if !(false call EPOCH_crafting_checkResources) exitWith {};
//craft button
[] spawn {
private ["_GiveBackRounds","_TotalroundsIn","_TotalMaxRoundsIn","_roundsCheck","_maxMagrnd","_maxMagRndTmp","_roundsCheckTmp","_magsammosearched","_craftReturn","_needBench","_craftCount","_fnc_UILock","_itemCraftTime","_selection","_craftItem","_item","_itemName","_itemCraftTime","_itemRecipeItems","_itemType","_nearbyReq","_hasNearby","_canCraft","_wH","_nearByHolder","_wHPos"];
private ["_GiveBackRounds","_TotalroundsIn","_TotalMaxRoundsIn","_roundsCheck","_maxMagrnd","_maxMagRndTmp","_roundsCheckTmp","_magsammosearched","_craftReturn","_needBench","_craftCount","_fnc_UILock","_itemCraftTime","_selection","_craftItem","_item","_itemName","_itemCraftTime","_itemRecipeItems","_itemType","_nearbyReq","_hasNearby","_canCraft","_wH","_nearByHolder","_wHPos","_craftedcount"];
disableSerialization;
_fnc_UILock = {
@ -55,6 +55,8 @@ if !(false call EPOCH_crafting_checkResources) exitWith {};
_craftReturn = _craftItem param [16,[]];
_BulletCalculateOnCraft = ["CfgEpochClient", "BulletCalculateOnCraft", false] call EPOCH_fnc_returnConfigEntryV2;
_craftedcount = 0;
for "_c" from 1 to rmx_var_craftQTYOut do {
false call _fnc_UILock;
@ -131,6 +133,10 @@ if !(false call EPOCH_crafting_checkResources) exitWith {};
} forEach _craftReturn;
call EPOCH_crafting_LB_click;
_craftedcount = _craftedcount + 1;
};
if (_craftedcount > 0) then {
["CraftedItems",_craftedcount,true] call EPOCH_client_updatePlayerStat;
};
call EPOCH_crafting_LB_defaults;
true call _fnc_UILock;

View File

@ -53,6 +53,26 @@ _checkConfigs = {
_cfg = "CfgBaseBuilding" call EPOCH_returnConfig;
(_cfg >> dyna_cursorTargetType)
};
case "PaintGarage":
{
private _garagevehs = nearestobjects [dyna_cursorTarget,["LandVehicle","AIR"],10];
if (_garagevehs isEqualTo []) exitwith {
["No Paintable Vehicle found in Garage",5] call Epoch_message;
(_cfg >> _selfOrTarget)
};
private _cfgtmp = "CfgPainting" call EPOCH_returnConfig;
_garageveh = _garagevehs select 0;
private _isclass = isclass (_cfgtmp >> (typeof _garageveh));
if (!_isclass && (("true" configClasses (configFile >> "CfgVehicles" >> (typeof _garageveh) >> "TextureSources")) isEqualTo [])) exitwith {
["No Paintable Vehicle found in Garage",5] call Epoch_message;
(_cfg >> _selfOrTarget)
};
dyna_Paintobj = _garageveh;
if (_isclass) exitwith {
(_cfgtmp >> (typeof _garageveh))
};
(_cfgtmp >> "DefaultVehicle")
};
case "":
{
(_cfg >> _selfOrTarget)
@ -97,6 +117,56 @@ _checkConfigs = {
} forEach (getArray (_config >> "upgradeBuilding"));
};
case "PaintGarage":
{
if !(isClass _config) exitWith {_in = "";};
private _usedefaultcolors = tolower (gettext (_config >> "UseArmaDefaultColors"));
_icon = gettext (_config >> "icon");
if (_usedefaultcolors isEqualTo "true") then {
{
private _textures = getarray (_x >> "textures");
_tooltip = gettext (_x >> "displayName");
_iconcolor = [1,1,1,1];
{
if ((tolower _tooltip) find (_x select 0) > -1) exitwith {
_iconcolor = _x select 1;
};
} foreach [
["red",[1,0,0,1]],
["green",[0,1,0,1]],
["blue",[0,0,1,1]],
["yellow",[1,1,0,1]],
["white",[1,1,1,1]],
["black",[0,0,0,1]],
["grey",[0.5, 0.5, 0.5, 1]],
["orange",[1, 0.9, 0, 1]],
["hex",[0.74, 0.72, 0.42, 1]],
["sand",[1, 0.9, 0.8, 1]],
["olive",[0.33, 0.42, 0.185, 1]]
];
_action = format ["[dyna_cursorTarget,dyna_Paintobj,%1] call EPOCH_vehicle_Paintgarage; true call Epoch_dynamicMenuCleanup;",_textures];
_buttonSettings pushBack [
_icon,
_tooltip,
_action,
_iconcolor
];
} foreach ("true" configClasses (configFile >> "CfgVehicles" >> (typeof dyna_Paintobj) >> "TextureSources"));
};
{
_tooltip = gettext (_x >> "ColorName");
_iconcolor = getarray (_x >> "iconcolor");
private _textures = getarray (_x >> "textures");
if (_textures isEqualTo []) exitwith {_in = "";};
_action = format ["[dyna_cursorTarget,dyna_Paintobj,%1] call EPOCH_vehicle_Paintgarage; true call Epoch_dynamicMenuCleanup;",_textures];
_buttonSettings pushBack [
_icon,
_tooltip,
_action,
_iconcolor
];
} forEach (configProperties [_config, "isClass _x",true]);
};
default
{

View File

@ -88,6 +88,13 @@ for "_e" from 0 to (_entries - 1) do {
_ctrl2 ctrlSetTooltipColorBox [0, 0, 0, 0];
_ctrl2 ctrlSetTooltipColorShade [0, 0, 0, 0];
_ctrl2 ctrlSetText (_buttonSettings select _e select 0);
if (count (_buttonSettings select _e) > 3) then {
if ((_buttonSettings select _e select 3) isEqualType []) then {
if !((_buttonSettings select _e select 3) isEqualTo []) then {
_ctrl2 ctrlSetTextColor (_buttonSettings select _e select 3);
};
};
};
_ctrl2 ctrlSetPosition [0.5,0.5,0,0];
_ctrl2 ctrlCommit 0;

View File

@ -89,6 +89,9 @@ EPOCH_maxBuildingHeight = ["CfgEpochClient", "maxBuildingHeight", 100] call EPOC
EPOCH_MaxBuildingTilt = ["CfgEpochClient", "MaxBuildingTilt", 180] call EPOCH_fnc_returnConfigEntryV2;
Epoch_NuisanceMulti = ["CfgEpochClient", "NuisanceMulti", 0.5] call EPOCH_fnc_returnConfigEntryV2;
// Use Eventhandler "Fired" on Reviver instead of Eventhandler "HandeDamage" on Client to be revived for Heal / Revive Player
EPOCH_OldRevive = ["CfgEpochClient", "UseOldRevive", false] call EPOCH_fnc_returnConfigEntryV2;
//ON INIT and RESPAWN
call EPOCH_clientInit;

View File

@ -51,6 +51,8 @@ class CfgActionMenu
dyna_AtHome = "call {_nearjammers = (nearestObjects[player, call EPOCH_JammerClasses, call EPOCH_MaxJammerRange]) select {player distance _x < (getnumber (getmissionconfig 'cfgEpochClient' >> 'CfgJammers' >> (typeof _x) >> 'buildingJammerRange'))};if (_nearjammers isEqualTo []) exitwith {false};_nearestJammer = _nearjammers select 0;((_nearestJammer getVariable['BUILD_OWNER', '-1']) in[getPlayerUID player, Epoch_my_GroupUID])}";
dyna_Watersource = "call {_nearObjects = nearestObjects [player, [], 2];_check = 'water';_ok = false;{if (alive _x) then {_ok = [_x, _check] call EPOCH_worldObjectType;};if (_ok) exitWith {};} forEach _nearObjects;_ok}";
dyna_DirtyWatersource = "((surfaceiswater position player) && (position player isFlatEmpty [-1, -1, -1, -1, 0, true] isEqualTo []) && (getPosASL player select 2 > 2) && (getPosATL player select 2 < 0.1))";
dyna_Paintobj = "objnull"; // <--- internal use only!
};
class self

View File

@ -115,7 +115,7 @@ class base_mode_attach
};
class Drink
{
condition = "dyna_Watersource";
condition = "dyna_Watersource || dyna_DirtyWatersource";
action = "if (currentweapon player == '') then {player playmove 'AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon';}else {if (currentweapon player == handgunweapon player) then {player playmove 'AinvPknlMstpSrasWpstDnon_Putdown_AmovPknlMstpSrasWpstDnon';}else { player playmove 'AinvPknlMstpSrasWrflDnon_Putdown_AmovPknlMstpSrasWrflDnon';};};{_output = _x call EPOCH_giveAttributes;if (_output != '') then {[_output, 5] call Epoch_message_stack;};} foreach [['Thirst',100],['Toxicity',1,1],['Stamina',10]];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Drink.paa";
tooltip = "Drink";
@ -275,4 +275,4 @@ class Epad
action = "if (isnull (finddisplay 9898)) then {createdialog 'epoch_tablet_gui';};";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Epad.paa";
tooltip = "E-Pad";
};
};

View File

@ -22,6 +22,14 @@ class build_upgrade
tooltipcode = "format['Upgrade %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]";
class special {}; //uses external config, hardcoded
};
class PaintGarage
{
condition = "(dyna_cursortargettype isEqualTo 'paintshop' && {player distance2d (dyna_cursorTarget modelToWorld (dyna_cursorTarget selectionPosition 'action1')) < 1.5}) || dyna_cursortargettype in ['Add other Buildings here']";
action = "";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa";
tooltip = "Paint Garage";
class special {}; //uses external config, hardcoded
};
class build_remove
{
condition = "dyna_buildMode select 1";
@ -131,14 +139,14 @@ class lock_lockbox
};
class unlock_safe
{
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','Safe_s_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_can_unlock.paa";
tooltip = "Unlock Safe";
};
class lock_safe
{
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','Safe_s_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && !(dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
action = "dyna_cursorTarget call Epoch_secureStorageHandler";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\pad_cannot_lock.paa";
tooltip = "Lock Safe";
@ -154,7 +162,7 @@ class pack_lockbox
};
class pack_safe
{
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
condition = "(dyna_cursorTargetType in ['Safe_EPOCH','Safe_s_EPOCH','SafeProxy_EPOCH','GunSafe_EPOCH']) && (dyna_cursorTarget getVariable ['EPOCH_Locked',false])";
action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec ['EPOCH_server_packStorage',2];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_pack.paa";
tooltip = "Pack Safe";
@ -596,7 +604,7 @@ class BaseCam
class ConnectUAV
{
condition = "(dyna_cursorTarget iskindof 'UAV_01_base_F' || dyna_cursorTarget iskindof 'UAV_06_base_F') && alive dyna_cursorTarget";
action = "if ({_x in (assigneditems player)} count ['B_UavTerminal','O_UavTerminal','I_UavTerminal','C_UavTerminal'] > 0) then {dyna_cursorTarget spawn {_unit = _this;if (isnull (driver _unit)) then {_plyr = player;_grp = createGroup side _plyr;_driver = _grp createUnit[""I_UAV_AI"", position _unit, [], 0, ""CAN_COLLIDE""];_driver moveInAny _unit;uisleep 0.5;};player action [""SwitchToUAVDriver"", _unit];};}else {['You need an UAV-Terminal to connect',5] call epoch_message;};";
action = "if (missionnamespace getvariable ['insafezone',false]) exitwith {['Not allowed in Safe Zones',5] call Epoch_Message};if !({_x in (assigneditems player)} count ['B_UavTerminal','O_UavTerminal','I_UavTerminal','C_UavTerminal'] > 0) exitwith {['You need an UAV-Terminal to connect',5] call epoch_message;}; dyna_cursorTarget spawn {_unit = _this;if (isnull (driver _unit)) then {_plyr = player;_grp = createGroup side _plyr;_driver = _grp createUnit[""I_UAV_AI"", position _unit, [], 0, ""CAN_COLLIDE""];_driver moveInAny _unit;uisleep 0.5;};player action [""SwitchToUAVDriver"", _unit];_unit setvariable ['Ignatz_UavOwner',name player,true];};";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\epoch_UAV.paa";
tooltip = "Connect to UAV";
};

View File

@ -177,7 +177,7 @@ class CfgBaseBuilding
removeParts[] = {{"KitSolarGen",1}};
powerCapacity = 10;
powerType = 1;
GhostPreview = "SolarGen_EPOCH";
GhostPreview = "SolarGen_Ghost_EPOCH";
staticClass = "SolarGen_EPOCH";
simulClass = "SolarGen_SIM_EPOCH";
};
@ -185,6 +185,7 @@ class CfgBaseBuilding
{
removeParts[] = {};
};
class SolarGen_Ghost_EPOCH : SolarGen_SIM_EPOCH {};
class PlotPole_EPOCH : Default
{
upgradeBuilding[] = {{"PlotPole_M_EPOCH",{{"ItemCorrugatedLg",5},{"EnergyPackLg",2},{"CircuitParts",3},{"ItemBattery",3},{"ItemPipe",1}}}};
@ -1425,7 +1426,7 @@ class CfgBaseBuilding
limitNearby = 2;
isSecureStorage = 1;
};
class Safe_s_SIM_EPOCH : Safe_EPOCH
class Safe_s_SIM_EPOCH : Safe_s_EPOCH
{
returnOnPack[] = {};
};

File diff suppressed because it is too large Load Diff

View File

@ -54,6 +54,8 @@ class CfgClientFunctions
class DefibrillatorUse {};
class CamUse {};
class DefuseBomb {};
class PlayerStatsDialog {};
class ServerStatsDialog {};
};
class building
{
@ -101,6 +103,7 @@ class CfgClientFunctions
{
class getInMan {};
class getOutMan {};
class HandleDamage {};
class InventoryClosed {};
class InventoryOpened {};
};
@ -172,6 +175,7 @@ class CfgClientFunctions
class fnc_createLocalMarkerSet {};
class fnc_deleteLocalMarkerSet {};
class fnc_AnimateScheduled {};
class fnc_SetFinalDir {};
};
class environment
{
@ -194,6 +198,7 @@ class CfgClientFunctions
class vehicle_checkTurretAmmo {};
class vehicle_removeTurretAmmo {};
class vehicle_ChangeLicensePlate {};
class vehicle_Paintgarage {};
};
class missions
{
@ -212,10 +217,18 @@ class CfgClientFunctions
class maxArmorInit {};
class initUI {};
class refeshUI {};
class equip {};
class equip {
customHeader = 1;
};
class itemTypeSlot {};
class usedItemRepack {};
class CryptoButtons {};
class SetUnitLoadout {
customHeader = 1;
};
class ReloadLoadout {
customHeader = 1;
};
};
class servicepoint
{
@ -232,6 +245,7 @@ class CfgClientFunctions
class custom_EH_FiredNear {};
class custom_EH_GetInMan {};
class custom_EH_GetOutMan {};
class custom_EH_HandleDamage {};
class custom_EH_Hit {};
class custom_EH_InventoryClosed {};
class custom_EH_InventoryOpened {};
@ -253,10 +267,6 @@ class CfgClientFunctions
class message_old1 {};
class message_old2 {};
};
class looting
{
class spawnLoot {};
};
class gui
{
file = "epoch_code\gui\scripts";

View File

@ -99,7 +99,7 @@ class CfgDisabledCommands
args[] = {{},{"ARRAY"}};
};
};
/*
class FORCEADDUNIFORM
{
class SYNTAX1
@ -108,7 +108,7 @@ class CfgDisabledCommands
args[] = {{"OBJECT"},{"STRING"}};
};
};
*/
class REMOVEALLMPEVENTHANDLERS
{
class SYNTAX1

View File

@ -113,6 +113,17 @@ class e_pad_config
ToggleVar = "EPOCH_AutoEarplug";
ToggleAble = "true";
};
class PublicStats {
ButtonText = "";
Description = "Public Stats";
icon = "x\addons\a3_epoch_code\Data\UI\epad\ServerStats.paa";
color[] = {1,0,0,1};
colortoggled[] = {0,1,0,1};
action = "EPOCH_totalPublicStats = if (EPOCH_MyStatsPublic) then {0} else {1};EPOCH_forceUpdateNow = true";
Tooltip = "Enable / Disable your Stats in Server Stats";
ToggleVar = "EPOCH_MyStatsPublic";
ToggleAble = "true";
};
class Reset {
ButtonText = "Reset";
Description = "Reset Settings";
@ -285,5 +296,29 @@ class e_pad_config
ToggleVar = "";
ToggleAble = "false";
};
class PlayerStats
{
ButtonText = "";
Description = "Player Statistic";
icon = "x\addons\a3_epoch_code\Data\UI\epad\PlayerStats.paa";
color[] = {0,0,1,1};
colortoggled[] = {0,1,0,1};
action = "if (isnull (finddisplay -1200)) then {createdialog 'PlayerStatsDialog'};";
Tooltip = "Player Statistic";
ToggleVar = "";
ToggleAble = "false";
};
class ServerStats
{
ButtonText = "";
Description = "Server Statistic";
icon = "x\addons\a3_epoch_code\Data\UI\epad\ServerStats.paa";
color[] = {0,0,1,1};
colortoggled[] = {0,1,0,1};
action = "if (isnull (finddisplay -1200)) then {createdialog 'ServerStatsDialog'};";
Tooltip = "Server Statistic";
ToggleVar = "";
ToggleAble = "false";
};
};
};

View File

@ -14,9 +14,15 @@
/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/
class CfgEpochClient
{
epochVersion = "1.3.1";
epochVersion = "1.3.2";
ArmAVersion = 176;
debug = "true"; // true = enable extra rpt debug lines, false to disable
ForceGender = ""; // Force Players to spawn as "Male" or "Female"
RemoveLaserfromUAV = "true"; // remove LaserDesignator from assembled UAV's
UseOldRevive = "false"; // Revive / Heal Player has been changed to use "HandleDamage" Eventhandler. If scripts are breaking it for you, set it to true (not recommended!)
UnconsciousChance = 30; // Change in percent to get unconscious by a hit with an Axe / Sledge / Sword
UnconsciousTime[] = {60,180}; // Min / Max time for unconscious after you got a hit from a non lethal weapon / Axe / Sledge / Sword
antagonistRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100
NuisanceMulti = 0.5; // Multi for Nuisance increase on shooting - higher Nuisance effect at least antagonist spawn change. (0-1, default 0.5)
@ -32,7 +38,7 @@ class CfgEpochClient
baseHungerLoss = 2; // increase number to speed up rate of Hunger loss
baseThirstLoss = 2; // increase number to speed up rate of Thirst loss
accelerateHTALoss = "true"; // use server's time acceleration to increase the rate of Hunger, Thirst and Alcohol loss
accelerateHTALoss = "false"; // use server's time acceleration to increase the rate of Hunger, Thirst and Alcohol loss
buildingNearbyMilitary = 0; //1 to allow building nearby
buildingNearbyMilitaryRange = 300; //Define radius of blocked area
@ -47,6 +53,7 @@ class CfgEpochClient
maxBuildingHeight = 100; // Max Height, building is allowed.
splitCountLimits = 0; //1 = distinguish buildingCountLimit from storageCountLimit (ex.: buildingCountLimit=100, storageCountLimit=100 >> you can build 100 baseparts AND additional 100 storage objects like safes, lockboxes...)
MaxBuildingTilt = 180; // Max degrees players can tilt building elements
EnablePhysicsOnBuild = "true"; // Building parts need Snap (hold) points to not fall on the ground while building
class CfgJammers {
class PlotPole_EPOCH // Jammer Classname
@ -192,14 +199,80 @@ class CfgEpochClient
{"TraderMissions",0,{}},
{"AIKills",0,{}},
{"AntagonistKills",0,{}},
{"ZombieKills",0,{}}
{"ZombieKills",0,{}},
{"WalkDist",0,{}},
{"MaxAliveTime",0,{}},
{"NPCTrades",0,{}},
{"PlayTime",0,{}},
{"LootedObjs",0,{}},
{"CraftedItems",0,{}},
{"ConnectCount",0,{}},
{"BuildingsSet",0,{}},
{"AIDeaths",0,{}},
{"PublicStats",1,{}} // DO not change this! Players can disable it within the E-Pad by themself!
};
PlayerStatsDialogEntries[] = {
/*
{
{"CommunityVariable","DisplayName","ExtraCalculation"}
},
*/
{
{"ConnectCount","Times connected"},
{"PlayTime","Playtime (hours)","%1/3600 toFixed 2"},
{"MaxAliveTime","Max Alivetime (hours)","%1/3600 toFixed 2"},
{"WalkDist","Distance Walked (Km)","%1/1000 toFixed 2"}
},
{
{"LootedObjs","Objects Looted"},
{"NPCTrades","Trades at Trader"},
{"BuildingsSet","Placed Buildings"},
{"CraftedItems","Crafted Items"}
},
{
{"Karma","Karma","round %1"},
{"Revives","Player Revived"},
{"TraderMissions","Tradermissions"}
},
{
{"Murders","Player Kills"},
{"AIKills","AI Kills"},
{"AntagonistKills","Antagonist Kills"},
{"ZombieKills","Zombie Kills"}
},
{
{"Deaths","Deaths by Player"},
{"AIDeaths","Deaths by AI"},
{"Suicides","Suicides"}
},
{
{"","K/D PvP","(Epoch_totalMurders/(Epoch_totalDeaths max 1)) toFixed 1"},
{"","K/D PvE","(Epoch_totalAIKills/(Epoch_totalAIDeaths max 1)) toFixed 1"}
}
};
TopStatsDialogEntries[] = {
/*
{"CommunityVariable","DisplayName","ExtraCalculation"},
*/
{"PlayTime","Playtime (hours)","%1/3600 toFixed 2"},
{"MaxAliveTime","Max Alivetime (hours)","%1/3600 toFixed 2"},
{"WalkDist","Distance Walked (Km)","%1/1000 toFixed 2"},
{"LootedObjs","Objects Looted"},
{"NPCTrades","Trades at Trader"},
{"BuildingsSet","Placed Buildings"},
{"CraftedItems","Crafted Items"},
{"Karma","Karma","round %1"},
{"Murders","Player Kills"},
{"AIKills","AI Kills"},
{"Deaths","Deaths by Player"},
{"AIDeaths","Deaths by AI"}
};
group_upgrade_lvl[] = {4,"1000",6,"1500",8,"2000",10,"2500",12,"3000",14,"3500",16,"4000",32,"8000",64,"16000"}; // controls max group limit and cost
// Event handler code
displayAddEventHandler[] = {"keyDown","keyUp"};
keyDown = "(_this call EPOCH_KeyDown)";
keyUp = "(_this call EPOCH_KeyUp)";
addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","FiredMan","Killed","HandleRating","HandleScore","GetInMan","GetOutMan","Hit","SeatSwitchedMan","FiredNear"};
addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","FiredMan","Killed","HandleRating","HandleScore","HandleDamage","GetInMan","GetOutMan","Hit","SeatSwitchedMan","FiredNear","WeaponAssembled"};
Respawn = "(_this select 0) call EPOCH_clientRespawn";
Put = "(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler;_this call Epoch_custom_EH_Put";
Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck;_this call Epoch_custom_EH_Take";
@ -209,7 +282,7 @@ class CfgEpochClient
Killed = "_this call EPOCH_fnc_playerDeath;_this call Epoch_custom_EH_Killed";
HandleRating = "0";
HandleScore = "";
HandleDamage = "";
HandleDamage = "_this call EPOCH_HandleDamage;_this call EPOCH_custom_EH_HandleDamage";
HandleHeal = "";
Dammaged = "";
Hit = "_this call EPOCH_custom_EH_Hit";
@ -218,6 +291,7 @@ class CfgEpochClient
GetOutMan = "_this call EPOCH_getOutMan;_this call Epoch_custom_EH_GetOutMan";
SeatSwitchedMan = "_this call EPOCH_custom_EH_SeatSwitchedMan";
FiredNear = "_this call EPOCH_custom_EH_FiredNear";
WeaponAssembled = "clearItemCargoGlobal (_this select 1);if (['CfgEpochClient','RemoveLaserfromUAV',true] call EPOCH_fnc_returnConfigEntryV2) then {(_this select 1) removeWeaponTurret ['Laserdesignator_mounted',[0]]}; if ((_this select 1) isKindOf 'UAV_01_base_F' || (_this select 1) isKindOf 'UAV_06_base_F') then {['UAV assembled - Connect it with DynaMenu (Space)',5] call Epoch_Message}";
// suppress these units from spawning near Jammer or Traders
nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"};
nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"};
@ -295,6 +369,32 @@ class CfgEpochClient
{"HitBWheel",0.33,0.91,"",""}
};
/* // Lower difficult VehicleRepairs example
VehicleRepairs[] = { // {Hitpoint, dmg to repair, dmg to replace, mat to repair, mat to replace}
{"HitHull",0.33,0.66,"ItemScraps","ItemCorrugated"},
{"HitBody",0.33,1,"ItemScraps","ItemCorrugated"},
{"HitEngine",0.33,0.91,"VehicleRepair","VehicleRepair"},
{"glass",0.33,1,"ItemGlass","ItemGlass"},
{"HitFuel",0.1,0.66,"ItemDuctTape","ItemDuctTape"},
{"HitHRotor",0.33,1,"ItemCorrugated","ItemCorrugated"},
{"HitVRotor",0.33,1,"ItemCorrugated","ItemCorrugated"},
{"HitWinch",0.33,0.91,"ItemCables","ItemCables"},
{"HitAvionics",0.33,0.91,"CircuitParts","CircuitParts"},
// Wheels - Do not change the order (front to back wheels) here!
{"HitLFWheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitRFWheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitLF2Wheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitRF2Wheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitLMWheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitRMWheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitLBWheel",0.33,1,"VehicleRepair","VehicleRepair"},
{"HitRBWheel",0.33,1,"VehicleRepair","VehicleRepair"},
// Mountainbike wheels
{"HitFWheel",0.33,0.91,"",""},
{"HitBWheel",0.33,0.91,"",""}
};
*/
// include configs
#include "CfgEpochClient\Altis.hpp"
#include "CfgEpochClient\australia.hpp"
@ -302,6 +402,7 @@ class CfgEpochClient
#include "CfgEpochClient\Chernarus_Summer.hpp"
#include "CfgEpochClient\Chernarus.hpp"
#include "CfgEpochClient\ChernarusRedux.hpp"
#include "CfgEpochClient\Enoch.hpp"
#include "CfgEpochClient\Esseker.hpp"
#include "CfgEpochClient\ProvingGrounds_PMC.hpp"
#include "CfgEpochClient\Sara_dbe1.hpp"
@ -330,6 +431,8 @@ class CfgEpochSoldier
maxReloadSpeed = 0.5;
maxCommanding = 0.4;
maxGeneral = 0.4;
minspawndist = 120;
maxspawndist = 200;
};
class CfgEpochSapper
{

View File

@ -0,0 +1,21 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Description:
Epoch gamemode config for Altis
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient/Altis.hpp
*/
class Enoch {
blockedArea[] = { //[POS],radius
};
// Trash config
TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood", "HempFiber" };
};

View File

@ -850,5 +850,7 @@ class CfgWorldInteractions {
class b_canina2sW_p3d : Bushes {};
class b_pmugoW_p3d : Bushes {};
class b_prunusW_p3d : Bushes {};
class garbagebin_03_f_p3d : TrashSmall {};
class concretewell_02_f_p3d : Water {};
class Land_ConcreteWell_02_F : Water {};
};

View File

@ -501,7 +501,7 @@ class CfgItemInteractions
};
class KitSolarGen : Item_Build_base
{
buildClass = "SolarGen_SIM_EPOCH";
buildClass = "SolarGen_EPOCH";
};
class KitPlotPole : Item_Build_base
{

View File

@ -207,6 +207,7 @@ class CfgItemSort
"U_C_ConstructionCoverall_Vrana_F",
"U_C_ConstructionCoverall_Black_F",
"U_C_ConstructionCoverall_Blue_F",
"U_I_CombatUniform",
"U_I_CombatUniform_shortsleeve",
"U_I_pilotCoveralls",
"U_I_HeliPilotCoveralls",
@ -264,11 +265,13 @@ class CfgItemSort
"V_TacChestrig_oli_F",
"V_TacChestrig_cbr_F",
"V_PlateCarrierSpec_tna_F",
"V_PlateCarrierSpec_mtp",
"V_PlateCarrierSpec_blk",
"V_HarnessO_ghex_F",
"V_HarnessOGL_ghex_F",
"V_PlateCarroer2_tna_F",
"V_PlateCarrierGL_tna_F"
"V_PlateCarrierGL_tna_F",
"V_PlateCarrier2_blk"
};
Backpacks[] = {
@ -333,7 +336,12 @@ class CfgItemSort
"ALICE_Pack_Epoch",
"US_Backpack_Epoch",
"CZ_Backpack_Epoch",
"L_Gunbag_Epoch"
"L_Gunbag_Epoch",
"I_UAV_01_backpack_F",
"C_IDAP_UAV_06_backpack_F",
"C_IDAP_UAV_06_antimine_backpack_F",
"B_UAV_06_medical_backpack_F"
};
HeadGear[] = {
@ -463,6 +471,8 @@ class CfgItemSort
// Headgear Apex
"H_HelmetLeaderO_ghex_F",
"H_HelmetLeaderO_oucamo",
"H_HelmetLeaderO_ocamo",
"H_HelmetCrew_O_ghex_F",
"H_HelmetO_ghex_F",
"H_Helmet_Skate",
@ -472,7 +482,11 @@ class CfgItemSort
"H_MilCap_tna_F",
"H_MilCap_ghex_F",
"H_Booniehat_tna_F",
"H_HelmetB_Light_tna_F"
"H_HelmetB_Light_tna_F",
"H_HelmetSpecO_ocamo",
"H_HelmetSpecO_blk",
"H_HelmetO_oucamo",
"H_HelmetO_ocamo"
};
Equipment[] = {
@ -480,6 +494,8 @@ class CfgItemSort
"Laserdesignator",
"ItemCompass",
"ItemGPS",
"ItemLaptop",
"ItemLaptop_wpn",
"ItemGeigerCounter_EPOCH",
"ItemWatch",
"NVG_EPOCH",
@ -510,6 +526,11 @@ class CfgItemSort
"1911_pistol_epoch",
"hgun_Pistol_Signal_F",
"pvcrifle_01_F",
"nl_Shotgun",
"nl_auto_xbow",
"hgun_Pistol_tranq_01",
// light Rifle
"l85a2_epoch",
"l85a2_pink_epoch",
@ -638,6 +659,8 @@ class CfgItemSort
// Apex
"LMG_03_F",
"arifle_CTARS_blk_F",
"arifle_CTARS_hex_F",
// Launcher
"launch_I_Titan_F",
"launch_B_Titan_short_F",
@ -699,6 +722,13 @@ class CfgItemSort
"6Rnd_BlueSignal_F",
"6Rnd_PurpleSignal_F",
"6Rnd_OrangeSignal_F",
"NL_pvc_bb_mag",
"NL_shot_bb_mag",
"xbow_mag_bolt",
"xbow_mag_tranq",
"xbow_mag_exp",
"tranq_dart_mag",
// light Mags
"30Rnd_65x39_caseless_green",
@ -1164,7 +1194,9 @@ class CfgItemSort
"ItemComboLock",
"ItemPipe",
"ItemBulb",
"SmeltingTools_EPOCH"
"SmeltingTools_EPOCH",
"Kit_IG_Box_s",
"Kit_IG_Box_l"
};
Items[] = {
@ -1272,6 +1304,8 @@ class CfgItemSort
"hoverboard_epoch_cargo",
"MBK_01_EPOCH",
"ebike_epoch", // Motorcycle
"C_Kart_01_black_F",
"C_Quadbike_01_F",
"C_Offroad_01_EPOCH", // Offroader
"C_Offroad_01_EPOCH1",
"C_Offroad_01_EPOCH2",
@ -1411,6 +1445,8 @@ class CfgItemSort
"B_MRAP_01_hmg_F",
"O_MRAP_02_hmg_F",
"I_MRAP_03_hmg_F",
"I_LT_01_scout_F",
"I_LT_01_cannon_F",
// Orange DLC
"I_G_Van_02_transport_F", /* Van Transport (Orange DLC) */
@ -1420,6 +1456,15 @@ class CfgItemSort
"I_G_Van_02_vehicle_F", /* Van Transport (Orange DLC) */
"O_G_Van_02_vehicle_F", /* Van Transport (Orange DLC) */
"B_G_Van_02_vehicle_F", /* Van Transport (Orange DLC) */
"I_G_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */
"O_G_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */
"B_G_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */
"I_G_Van_02_vehicle_EPOCH", /* Van Transport (Orange DLC) */
"O_G_Van_02_vehicle_EPOCH", /* Van Transport (Orange DLC) */
"B_G_Van_02_vehicle_EPOCH", /* Van Transport (Orange DLC) */
"B_GEN_Van_02_transport_EPOCH", /* Van Transport (Orange DLC) */
// Apex
"I_C_Offroad_02_unarmed_F",
"I_C_Offroad_02_unarmed_brown_F",
@ -1432,6 +1477,8 @@ class CfgItemSort
"C_Offroad_02_unarmed_white_F",
"C_Offroad_02_unarmed_red_F",
"C_IDAP_Offroad_02_unarmed_F",
"I_C_Offroad_02_LMG_F",
"B_LSV_01_unarmed_F",
"B_LSV_01_unarmed_olive_F",
"B_LSV_01_unarmed_sand_F",
@ -1483,6 +1530,7 @@ class CfgItemSort
"O_Heli_Light_02_unarmed_EPOCH",
"I_Heli_light_03_unarmed_EPOCH",
"I_Heli_Transport_02_EPOCH",
"C_IDAP_Heli_Transport_02_F",
"B_Heli_Transport_03_unarmed_green_F",
"B_Heli_Transport_03_unarmed_EPOCH",
"O_Heli_Transport_04_EPOCH",
@ -1504,6 +1552,7 @@ class CfgItemSort
"B_Heli_Light_01_armed_F",
"B_Heli_Transport_01_EPOCH",
"B_Heli_Transport_01_F",
"B_Heli_Transport_03_black_F",
"O_Heli_Light_02_v2_F",
"I_Heli_light_03_F",

View File

@ -112,6 +112,11 @@ class CfgMarkerSets
{"","ICON","EpochService","ColorWhite",1,{0.9,0.9},0,"'Service Point'"}
};
};
class PaintGarage {
markerArray[] = {
{"","ICON","EpochPaint","ColorBlue",0.5,{0.1,0.1},0}
};
};
class Radiation {
markerArray[] = {
{"","ICON","EpochActive_Triangle","ColorYellow",1,{0.7,0.7}},
@ -211,9 +216,14 @@ class CfgMarkerSets
};
class HeliCrash {
markerArray[] = {
{"","ICON","EpochActive_Circle","ColorOrange",1,{0.6,0.6}},
{"","ICON","EpochActive_Circle","ColorYellow",1,{0.6,0.6}},
{"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}},
{"","ICON","EpochHeli2","ColorOrange",1,{0.5,0.5}}
{"","ICON","EpochHeli2","ColorYellow",1,{0.5,0.5}}
};
};
class Medical {
markerArray[] = {
{"","ICON","o_med","",1,{1,1}}
};
};
};

View File

@ -14,7 +14,6 @@
*/
class EpochMissionList{
// traderMissionClasses[] = {"missionMonster","missionDelivery","missionEscort","missionUav","missionSapper","missionSkull","missionMilitary","gameCaptureTheJammer","gameCarRace","infoTime","infoName","infoNews","infoVehicles","infoPeople","helpAirDrop","debugResetMission"}; //Exclude from here to remove from menu and trigger
traderMissionClasses[] = {"missionDocCheck","missionfishing","missionDelivery","missionUav","infoTime","infoName","infoNews","infoVehicles","infoPeople","debugResetMission"}; //Exclude from here to remove from menu and trigger
traderMissionActiveNames[] = {}; //Not currently used (WIP)
traderMissionLongDesc[] = {}; //Not currently used (WIP)

View File

@ -308,6 +308,14 @@ class CfgObjectInteractions
class EPOCH_RyanZombie_3_S : EPOCH_RyanZombie_1 {};
class EPOCH_RyanZombie_4_S : EPOCH_RyanZombie_1 {};
class EPOCH_RyanZombie_5_S : EPOCH_RyanZombie_1 {};
class IG_Box_s : Default
{
interactMode = 4;
};
class IG_Box_l : Default
{
interactMode = 4;
};
};
/*[[[end]]]*/

View File

@ -0,0 +1,57 @@
class CfgPainting {
class DefaultVehicle
{
UseArmaDefaultColors = "true";
PaintingCosts = 500;
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa";
};
};
/*
############################ Start Full Example #################################
class CfgPainting {
class DefaultVehicle
{
UseArmaDefaultColors = "true"; // Use all availabe default colours from Arma (for all Vehicles)
PaintingCosts = 500; // Crypto costs for Painting
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Paint.paa"; // Icon for the DynaMenu
class Pink // Define custom colors for ALL Vehicle classes within "DefaultVehicle"
{
ColorName = "Pink"; // Will be used as Tooltip in DynaMenu
iconcolor[] = {1,0.0784,0.576,1}; // Color for the Icon [R,G,B,ALPHA] (0-1)
textures[] = { // Texture array. Use "#(rgb,8,8,3)color(R,G,B,1)" for simple colors
"#(rgb,8,8,3)color(1,0.0784,0.576,1)" // Texture for first selection (most vehicles only need one selection texture)
};
};
};
class C_Hatchback_01_EPOCH : DefaultVehicle // Define custom colors for a unique Vehicle Class
{
UseArmaDefaultColors = "true"; // Use also all availabe default colours from Arma (for this Vehicle Class)
class Green
{
ColorName = "Green";
iconcolor[] = {0,1,0,1};
textures[] = {
"#(rgb,8,8,3)color(0,1,0,1)"
};
};
};
class C_Hatchback_01_EPOCH1: C_Hatchback_01_EPOCH{}; // Inherit classes from already defined classes like this
class C_Hatchback_01_EPOCH2: C_Hatchback_01_EPOCH{};
class C_Quadbike_01_EPOCH : DefaultVehicle
{
UseArmaDefaultColors = "false"; // This Quad can only be colored with the defined color(s)
class Black
{
ColorName = "Black";
iconcolor[] = {0,0,0,1};
textures[] = {
"\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_CIV_BLACK_CO.paa",
"\A3\Soft_F_Beta\Quadbike_01\Data\Quadbike_01_wheel_CIVBLACK_CO.paa"
};
};
};
};
############################ End Full Example #################################
*/

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