mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
43958142b8
Fully customizable system. Base system laid out more so as an example. Included: -Murders -Deaths -Suicides -Revives -AIKills -AntagonistKills -ZombieKills -MissionsAttempted -CompletedMissions Client side stat change with optional send to server. Server side stat change with optional send to client. Server is backed up with token check if sent from client.
201 lines
15 KiB
C++
201 lines
15 KiB
C++
/*
|
||
Author: Aaron Clark - EpochMod.com
|
||
Contributors: Andrew Gregory
|
||
|
||
Description:
|
||
Main Client side configs for the Epoch gamemode
|
||
|
||
Licence:
|
||
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||
|
||
Github:
|
||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient.hpp
|
||
*/
|
||
/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/
|
||
class CfgEpochClient
|
||
{
|
||
epochVersion = "1.0.0";
|
||
ArmAVersion = 168;
|
||
sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100
|
||
droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100
|
||
zombieRngChance = 50; // increase number to reduce chances and reduce to increase. Default 50
|
||
|
||
baseHungerLoss = 2; // increase number to speed up rate of Hunger loss
|
||
baseThirstLoss = 2; // increase number to speed up rate of Thirst loss
|
||
|
||
buildingNearbyMilitary = 0; //1 to allow building nearby
|
||
buildingNearbyMilitaryRange = 300; //Define radius of blocked area
|
||
buildingNearbyMilitaryClasses[] = {"Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"};
|
||
restrictedLocations[] = {"NameCityCapital"};
|
||
restrictedLocationsRange = 300;
|
||
buildingRequireJammer = 1; //1 = require jammer to build
|
||
buildingJammerRange = 75; // jammer range in meters
|
||
jammerPerGroup = 1; // allowed number of jammers per group.
|
||
jammerGLOnly = 1; // allow only group leader to place Jammer
|
||
minJammerDistance = 650; // min distance to next Jammer
|
||
maxBuildingHeight = 33; // Max Height, building is allowed.
|
||
buildingCountLimit = 200; //overall building limit in range of jammer (overridden if "useGroupCountLimits=1")
|
||
storageCountLimit = 100; //overall storage limit in range of jammer (triggers only if "splitCountLimits=1" & "useGroupCountLimits=0")
|
||
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...)
|
||
useGroupCountLimits = 1; //1 = enable leader and member counts (doesn´t affect "splitCountLimits")
|
||
buildingCountLeader = 125; //ignore if "useGroupCountLimits=0"
|
||
buildingCountPerMember = 5; //ignore if "useGroupCountLimits=0"
|
||
storageCountLeader = 10; //ignore if "splitCountLimits=0" & "useGroupCountLimits=0"
|
||
storageCountPerMember = 5; //ignore if "splitCountLimits=0" & "useGroupCountLimits=0"
|
||
maxdoors = 8; // Max allowed doors per Group
|
||
maxgates = 5; // Max allowed Gates per Group
|
||
|
||
disableRemoteSensors = "true"; // disableRemoteSensors true/false
|
||
|
||
epochMessageBackgroundCol[] = {0,0,0,0.2}; //Epoch_message background color (format: {R,G,B,A})
|
||
epochMessageTextCol[] = {1,1,1,0.95}; //Epoch_message text color (format: {R,G,B,A})
|
||
//to use different colored messages in scripts, just call it this way: ["the message", 6, [[0,0,0,0.2],[1,1,1,0.95]]] call Epoch_message;
|
||
|
||
EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."};
|
||
deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperG_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"}; //Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F
|
||
niteLight[] = {1,1.88,22}; //Set ambient lighting at night: {Brightness of light,Height of light}. Default (Low Ambient): {1.88,22} | Twilight: {7.2,88} | Distant: {12.8,142}
|
||
ryanZombiesEnabled = "true";
|
||
antagonistSpawnIndex[] = {{"Epoch_Cloak_F",1},{"GreatWhite_F",2},{"Epoch_Sapper_F",2},{"Epoch_SapperG_F",1},{"Epoch_SapperB_F",1},{"I_UAV_01_F",2},{"PHANTOM",1},{"B_Heli_Transport_01_F",1},{"EPOCH_RyanZombie_1",12},{"I_Soldier_EPOCH",1}}; // {"type", limit}
|
||
customVarsDefaults[] = {{"Temp",98.6,{106.7,95,102,105,96,95}},{"Hunger",1500,{5000,0,5001,5001,1250,0}},{"Thirst",750,{2500,0,2501,2501,625,0}},{"AliveTime",0,{-2,0}},{"Energy",0,{2500,0}},{"Wet",0,{100,0,35,55,-1,-1}},{"Soiled",0,{100,0,35,55,-1,-1}},{"Immunity",0,{100,0}},{"Toxicity",0,{100,0,35,55,-1,-1}},{"Stamina",100,{"EPOCH_playerStaminaMax",0}},{"Crypto",0,{250000,0}},{"HitPoints",{0,0,0,0},{1,0,0.5,1,-1,-1}},{"BloodP",100,{190,0,120,140,70,50}},{"SpawnArray",{},{}},{"Karma",0,{50000,-50000}},{"Alcohol",0,{100,0,35,55,-1,-1}},{"Radiation",0,{100,0,35,55,-1,-1}},{"Nuisance",0,{100,0}},{"MissionArray",{},{}}}; // EPOCH_player + varName, default value, {max,min,high-warn,high-critical,low-warn,low-critical}
|
||
// add any stats and their starting number here for better community integration and neat stats tracking too!
|
||
defineCommunityStats[] = {{"Murders",0},{"Deaths",0},{"Suicides",0},{"Revives",0},{"AttemptedMissions",0},{"CompletedMissions",0},{"AIKills",0},{"AntagonistKills",0},{"ZombieKills",0}};
|
||
hudConfigs[] = {{{"BloodP","","",{"getPlayerDamage",">=",0.7}},"topRight","x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa",{"forceUpdate"}},{{"Oxygen","getPlayerOxygenRemaining","",{},{1,0,2,2,1,0.55}},"topRight","x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa"},{"Hunger","topRight","x\addons\a3_epoch_code\Data\UI\hunger_ca.paa",{"forceBloodRise"}},{"Thirst","topRight","x\addons\a3_epoch_code\Data\UI\thirst_ca.paa",{"forceBloodRise"}},{"Temp","topRight",{"x\addons\a3_epoch_code\Data\UI\hot_ca.paa","x\addons\a3_epoch_code\Data\UI\cold_ca.paa"},{"forceFatigue"}},{"Toxicity","topRight","x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa"},{"Alcohol","topRight","x\addons\a3_epoch_code\Data\UI\drunk_ca.paa"},{"Soiled","topRight","x\addons\a3_epoch_code\Data\UI\soiled_ca.paa"},{"Radiation","topRight","x\addons\a3_epoch_code\Data\UI\rads_ca.paa"},{{"HitPoints","getPlayerHitPointDamage","HitLegs"},"topRight","x\addons\a3_epoch_code\Data\UI\broken_ca.paa"}};
|
||
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","GetInMan","GetOutMan"};
|
||
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";
|
||
FiredMan = "_this call EPOCH_fnc_playerFired;_this call Epoch_custom_EH_FiredMan";
|
||
InventoryClosed = "_this call EPOCH_InventoryClosed;_this call EPOCH_custom_EH_InventoryClosed";
|
||
InventoryOpened = "_this call EPOCH_InventoryOpened||_this call EPOCH_custom_EH_InventoryOpened"; // the || here allows either function to block opening of inventory by returning true.
|
||
Killed = "_this call EPOCH_fnc_playerDeath;_this call Epoch_custom_EH_Killed";
|
||
HandleRating = "EPOCH_playerKarma = EPOCH_playerKarma + (_this select 1);0";
|
||
HandleDamage = "";
|
||
HandleHeal = "";
|
||
Dammaged = "";
|
||
Hit = "";
|
||
HitPart = "";
|
||
GetInMan = "_this call EPOCH_getInMan;_this call Epoch_custom_EH_GetInMan";
|
||
GetOutMan = "_this call EPOCH_getOutMan;_this call Epoch_custom_EH_GetOutMan";
|
||
// 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"};
|
||
nonTraderAIRange = 50;
|
||
fishLoots[] = {"ItemTuna","ItemSeaBass","ItemSeaBass","ItemSeaBass","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout"}; // Fishing loots
|
||
animalAiTables[] = {"Sheep_random_EPOCH","Sheep_random_EPOCH","Goat_random_EPOCH","Goat_random_EPOCH","Goat_random_EPOCH",{"Cock_random_EPOCH","Hen_random_EPOCH"},{"Cock_random_EPOCH","Hen_random_EPOCH"},"Rabbit_EPOCH","Rabbit_EPOCH","Rabbit_EPOCH","Snake_random_EPOCH","Snake2_random_EPOCH",{"Fin_random_EPOCH","Alsatian_Random_EPOCH"}}; // Animal spawn table
|
||
playerDeathScreen = "TapOut";
|
||
playerKilledScreen = "TapOut2";
|
||
playerDisableRevenge = 0;
|
||
playerRevengeMinAliveTime = 900;
|
||
bankTransferTime[] = {0.0006,1.2,0.06};
|
||
|
||
SuppressedCraftingItems[] = {"VehicleRepair","VehicleRepairLg"}; // Suppresed for usage of "Advanced Vehicle Repair"
|
||
UseAdvancedVehicleRepair = "true";
|
||
VehicleRepairs[] = {
|
||
{"HitHull",0.33,0.66,"ItemScraps","ItemCorrugated"},
|
||
{"HitBody",0.33,1,"ItemScraps","ItemCorrugated"},
|
||
{"HitLFWheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitLF2Wheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitLMWheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitLBWheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitRFWheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitRF2Wheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitRMWheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitRBWheel",0.33,1,"VehicleRepair","SpareTire"},
|
||
{"HitEngine",0.33,0.91,"EngineParts","EngineBlock"},
|
||
{"glass",0.33,1,"ItemGlass","ItemGlass"},
|
||
{"HitFuel",0.1,0.66,"ItemDuctTape","FuelTank"},
|
||
{"HitHRotor",0.33,1,"ItemCorrugated","ItemRotor"},
|
||
{"HitVRotor",0.33,1,"ItemCorrugated","ItemRotor"},
|
||
{"HitWinch",0.33,0.91,"ItemCables","ItemCables"},
|
||
{"HitAvionics",0.33,0.91,"CircuitParts","CircuitParts"}
|
||
};
|
||
|
||
// include configs
|
||
#include "CfgEpochClient\Altis.hpp"
|
||
#include "CfgEpochClient\australia.hpp"
|
||
#include "CfgEpochClient\Bornholm.hpp"
|
||
#include "CfgEpochClient\Chernarus_Summer.hpp"
|
||
#include "CfgEpochClient\Chernarus.hpp"
|
||
#include "CfgEpochClient\Esseker.hpp"
|
||
#include "CfgEpochClient\ProvingGrounds_PMC.hpp"
|
||
#include "CfgEpochClient\Sara_dbe1.hpp"
|
||
#include "CfgEpochClient\Sara.hpp"
|
||
#include "CfgEpochClient\SaraLite.hpp"
|
||
#include "CfgEpochClient\Stratis.hpp"
|
||
#include "CfgEpochClient\takistan.hpp"
|
||
#include "CfgEpochClient\utes.hpp"
|
||
#include "CfgEpochClient\vr.hpp"
|
||
#include "CfgEpochClient\Zargabad.hpp"
|
||
#include "CfgEpochClient\Tanoa.hpp"
|
||
#include "CfgEpochClient\Malden.hpp"
|
||
#include "CfgEpochClient\WorldInteractions.hpp"
|
||
};
|
||
class CfgEpochSoldier
|
||
{
|
||
unitTypes[] = {"I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"};//Selects from randomly
|
||
minAISkill = 0.2; //Minumum AI Skill. Skills are chosen randomly between this minimum overall AI skill value and the following max AI skill values, for each of the next skills:
|
||
maxAimingAccuracy = 0.7;
|
||
maxAimingShake = 0.9;
|
||
maxAimingSpeed = 0.6;
|
||
maxEndurance = 0.4;
|
||
maxSpotDistance = 0.4;
|
||
maxSpotTime = 0.3;
|
||
maxCourage = 0.3;
|
||
maxReloadSpeed = 0.5;
|
||
maxCommanding = 0.4;
|
||
maxGeneral = 0.4;
|
||
};
|
||
class CfgEpochSapper
|
||
{
|
||
detonateDistMax = 8; //Random distance between 3m and this number at which sapper detonates. Min value = 4
|
||
groanTrig = 16; //Percentage chance of a groan. Min value = 4
|
||
sRange = 300; //Distance from target over which sapper will dispose. Range within which sapper code will be aware of targets. Distance up to which sapper will attempt to find a spot to hide in. Min Value = 150.
|
||
smellDist = 24; //Distance up to which sapper can smell. Used to decide if sapper can see target when deciding to charge and influences target selection. Is influenced by wind direction. Min Value = 8.
|
||
reflexSpeed = 0.25; //Sapper brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive sapper. (Guide Min 0.25 - Max 2.5).
|
||
nestChance = 2; //Every time a sapper spawns apply this percentage chance that sapper will create a nest.
|
||
hideLevel = 72; //(Emotion) Sapper fear increases by several factors, higher number of armed player(s) in area / being shot at. Set fear level (out of 100) at which he will go into a 'hide / evade mode'.. temporarily.
|
||
chargeLevel = 52; //(Emotion) Sapper anger increases by smelling / sensing players, being shot at / hit, too many players on his turf. Set level (Out of 100) at which he is triggered to charge on the current target.
|
||
};
|
||
class CfgEpochUAV
|
||
{
|
||
UAVMinDist = 48; //Minimum distance to choose next position when roaming. Min Value = 8.
|
||
UAVMaxDist = 180; //Maximum distance to choose next position when roaming. Min Value = 42 / Max Value = 400.
|
||
UAVHeight = 100; //Set height when roaming, slight randomness is applied to this value. UAV will choose own height when locked onto target. Min Value = 42 / Max Value = 280. UAV can still spot targets from height !
|
||
};
|
||
class CfgEpochUAVSupport
|
||
{
|
||
unitTypes[] = {"I_Soldier_EPOCH"}; //Selects from randomly (e.g. {"I_Soldier_EPOCH","Epoch_Sapper_F","Epoch_SapperB_F","Epoch_SapperG_F"};)
|
||
minUnitNum = 2; //Maximum number of units spawned when UAV spots target.
|
||
maxUnitNum = 4; //Maximum number of units spawned when UAV spots target.
|
||
};
|
||
class CfgEpochCloak
|
||
{
|
||
cRange = 300; //Distance, from target, at which Cloak will dispose. Cloak is also aware of players within this range. (Min: 60 / Max: 600)
|
||
cAggression = 75; //Percentage chance of attack, currently a psychological attack (Cultist spooky voice). (Min: 1 / Max: 100)
|
||
attackFrequency = 120; //One attack only per this period. (Min: 120)
|
||
attackDistance = 38; // Distance, from target, up to which Cloak will attack. Lower for less vocals. (Min: 16)
|
||
targetChangeFrequency = 42; //Cloak will only attempt to change target once per this period. Make Higher to stick to first target player. (Min: 42)
|
||
teleportChance = 66; //Chance for cloak to teleport. (Min: 1)
|
||
hoverFrequency = 1280; //Cloak has new hover attack. When player is above cloak, and at a distance, cloak will float to player and teleport attack. Only perform one of these moves per this period. (Min: 240)
|
||
};
|
||
class CfgEpochRyanZombie
|
||
{
|
||
zeds[] = {"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5"};
|
||
attackDist = 1.6; //Attack Distance.
|
||
range = 45; //Range at which to dispose old zombies and spawn new ones within.
|
||
disposeRange = 800; // distance before zombie is disposed
|
||
smell[] = {38,0.42}; //Distance in metres up to which the zombie can smell a target. | Skill (0 - 1). 0 - Disable
|
||
sight[] = {28,0.72}; //Zombie sight distance | Skill (0 - 1).
|
||
hearing[] = {108,0.68}; //Zombie hearing distance / Skill. Max FiredNear EH Limit ?
|
||
memory[] = {480,0.8}; //Memory time. / Weighting. WIP - Not Used
|
||
reflexSpeed = 0.25; //Zombie brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive zombie. (Guide Min 0.25 - Max 2.5).
|
||
moans[] = {"ryanzombiesmoan1","ryanzombiesmoan2","ryanzombiesmoan3","ryanzombiesmoan4"};
|
||
screams[] = {"ryanzombiesscream1","ryanzombiesscream2","ryanzombiesscream3","ryanzombiesscream4","ryanzombiesscream5","ryanzombiesscream6","ryanzombiesscream7","ryanzombiesscream8","ryanzombiesscream9"};
|
||
};
|
||
/*[[[end]]]*/
|