Epoch Survival 0.4 b619

[Changed] Dynamic sub menu for inventory item interaction and crafting
options. (Double click item in your inventory)
[Changed] Armor stat inventory feature now dynamic and no longer forced
via config.
[Changed] Group menu and requests are now on the self action menu.
This commit is contained in:
vbawol 2016-10-23 23:52:25 -05:00
parent 10a6c984c3
commit 4aa8c8152d
64 changed files with 258 additions and 574 deletions

View File

@ -1 +1,2 @@
TBA
[New] Dynamic sub menu for inventory item interaction and crafting options when you double click in item in your inventory.
[Changed] Group menu and requests are now on the self action menu.

View File

@ -24,7 +24,7 @@
NOHTING
*/
//[[[cog import generate_private_arrays ]]]
private ["_bar","_bar_compare","_color","_colorCompare","_display"];
private ["_bar","_bar_compare","_color","_colorCompare","_container","_display","_existing_bar","_height","_pos","_remoteContainer","_small_height"];
//[[[end]]]
disableSerialization;
@ -34,29 +34,81 @@ EPOCH_lastContainer = _this select 1;
waitUntil {!isNull findDisplay 602};
_display = (findDisplay 602);
(_display displayCtrl -13) ctrlEnable false;
// init custom sub menu handler
{
_container = _display displayCtrl _x;
_container ctrlAddEventHandler ["LBDblClick","_this call EPOCH_itemInteractClick"];
} forEach [619,633,638];
// armor stats init
{
_remoteContainer = _display displayCtrl _x;
_remoteContainer ctrlAddEventHandler ["LBDrag","_this call EPOCH_selectInventoryItem; _this call EPOCH_refeshUI"];
_remoteContainer ctrlAddEventHandler ["LBSelChanged","_this call EPOCH_selectInventoryItem; _this call EPOCH_refeshUI"];
} forEach [632,640];
_color = [0.6,0.6,0.6,1];
_colorCompare = [0.4,0.6,1,0.4];
_bar = _display displayCtrl 7304;
// UniformLoad
_bar = _display ctrlCreate ["RscCustomProgress", 7304];
uiNameSpace setVariable ["RscCustomProgressUniform", _bar];
_bar ctrlSetTextColor _color;
_bar = _display displayCtrl 7305;
_existing_bar = _display displayCtrl 6304;
_pos = ctrlPosition _existing_bar;
_height = (_pos select 3) / 2;
_existing_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_height];
_existing_bar ctrlCommit 0;
_bar ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height];
_bar ctrlCommit 0;
// VestLoad
_bar = _display ctrlCreate ["RscCustomProgress", 7305];
uiNameSpace setVariable ["RscCustomProgressVest", _bar];
_bar ctrlSetTextColor _color;
_bar = _display displayCtrl 7240;
_existing_bar = _display displayCtrl 6305;
_pos = ctrlPosition _existing_bar;
_height = (_pos select 3) / 2;
_small_height = _height;
_existing_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_height];
_existing_bar ctrlCommit 0;
_bar ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height];
_bar ctrlCommit 0;
// SlotHeadgear
_bar = _display ctrlCreate ["RscCustomProgress", 7240];
uiNameSpace setVariable ["RscCustomProgressHeadgear", _bar];
_bar ctrlSetTextColor _color;
_bar = _display displayCtrl 7308;
_existing_bar = _display displayCtrl 6240;
_pos = ctrlPosition _existing_bar;
_height = _pos select 3;
_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_small_height];
_bar ctrlCommit 0;
// TotalLoad;
_existing_bar = _display displayCtrl 6308;
_pos = ctrlPosition _existing_bar;
_height = (_pos select 3) / 2;
_existing_bar ctrlSetPosition [_pos select 0,(_pos select 1)+_height,_pos select 2,_height];
_existing_bar ctrlCommit 0;
// TotalLoad compare;
_bar = _display ctrlCreate ["RscTotalArmorProgress", 7308];
_bar ctrlSetTextColor _color;
_bar_compare = _display displayCtrl 7309;
_bar ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height];
_bar ctrlCommit 0;
_bar_compare = _display ctrlCreate ["RscCustomProgress", 7309];
_bar_compare ctrlSetTextColor _colorCompare;
_bar_compare ctrlSetPosition [_pos select 0,_pos select 1,_pos select 2,_height];
_bar_compare ctrlCommit 0;
uiNameSpace setVariable ["RscCustomProgressTotal", [_bar,_bar_compare]];
0 call EPOCH_refeshUI;

View File

@ -1,20 +1,18 @@
/*
Author: Aaron Clark - EpochMod.com
Contributors: Raimonds Virtoss
Description:
Epoch Item Interact
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_itemInteractClick.sqf
Dynamic inventory sub menu
By Aaron Clark - Epoch Mod
*/
//[[[cog import generate_private_arrays ]]]
private ["_buttonTXT","_cfgItemInteractions","_config","_data","_display","_interactOption","_magCount","_type","_useBtn"];
private ["_activeControl","_bg","_btn_arr","_buffer","_buttonTXT","_button_gen","_button_texts","_cfgItemInteractions","_config","_control","_data","_display","_interactOption","_magCount","_pos","_start_idc","_type","_y2d"];
//[[[end]]]
_button_texts = [];
_activeControl = uiNamespace getVariable ["EPOCH_active_button_control", controlNull];
if (!isNull _activeControl) then {
_activeControl ctrlShow false;
ctrlDelete _activeControl;
};
_this call EPOCH_selectInventoryItem;
_data = EPOCH_InteractedItem select 1;
@ -35,32 +33,72 @@ if (isClass (_config)) then {
_magCount = getNumber (_config >> "count");
};
_display = (findDisplay 602);
_useBtn = _display displayCtrl -13;
if (_buttonTXT != "") then {
_useBtn ctrlSetText _buttonTXT;
_useBtn ctrlEnable true;
_button_texts pushBack [_buttonTXT];
} else {
if (_magCount > 1) then {
_useBtn ctrlEnable true;
_useBtn ctrlSetText "REPACK";
_button_texts pushBack ["REPACK"];
} else {
_useBtn ctrlSetText "EXAMINE";
_useBtn ctrlEnable false;
_button_texts pushBack ["EXAMINE"];
};
};
_useBtn = _display displayCtrl -14;
_useBtn ctrlEnable true;
_config = 'CfgCrafting' call EPOCH_returnConfig;
if (isClass (_config >> _data)) then {
_useBtn ctrlSetTextColor [0,1,0,1];
EPOCH_CraftingItem = EPOCH_InteractedItem select 0;
EPOCH_CraftingItem = EPOCH_InteractedItem select 0;
_button_texts pushBack ["CRAFT","EPOCH_CraftingItem call EPOCH_crafting_load;"];
} else {
_useBtn ctrlSetTextColor [1,0,0,1];
EPOCH_CraftingItem = "";
EPOCH_CraftingItem = "";
};
true
if !(_button_texts isEqualTo []) then {
_display = ctrlParent (_this select 0);
_pos = getMousePosition;
_control = _display ctrlCreate ["RscControlsGroupNoScrollbars", 5678910];
uiNamespace setVariable ["EPOCH_active_button_control", _control];
_control ctrlSetPosition [(_pos select 0)-0.03,(_pos select 1)-0.03,1,1];
_control ctrlCommit 0;
_bg = _display ctrlCreate ["RscButtonTextOnly", 12349,_control];
_bg ctrlSetPosition [0,0,1,1];
_bg ctrlCommit 0;
_bg ctrlAddEventHandler ["MouseEnter",{
_activeControl = uiNamespace getVariable ["EPOCH_active_button_control", controlNull];
if !(isNull _activeControl) then {
_activeControl ctrlShow false;
};
}];
_buffer = _display ctrlCreate ["RscButtonTextOnly", 12345,_control];
_buffer ctrlSetPosition [0.02,0.02,0.25,0.0625 + (0.0625 * (count _button_texts))];
_buffer ctrlAddEventHandler ["ButtonClick",{
_activeControl = uiNamespace getVariable ["EPOCH_active_button_control", controlNull];
if !(isNull _activeControl) then {
_activeControl ctrlShow false;
};
}];
_buffer ctrlCommit 0;
_y2d = 0.06;
_btn_arr = [];
_start_idc = 12346;
{
_x params [["_btn_text","EXAMINE"],["_btn_code","call EPOCH_consumeItem;"]];
_button_gen = _display ctrlCreate ["RscButtonMenu", _start_idc,_control];
_start_idc = _start_idc + 1;
_button_gen ctrlSetPosition [0.06,_y2d,0.20,0.06];
_button_gen ctrlSetText _btn_text;
_button_gen ctrlCommit 0;
_button_gen ctrlSetEventHandler ["ButtonClick",_btn_code + "(uiNamespace getVariable [""EPOCH_active_button_control"", controlNull]) ctrlShow false;"];
_y2d = _y2d + 0.0625;
_btn_arr pushBack _button_gen;
} forEach _button_texts;
reverse _btn_arr;
uiNamespace setVariable ["EPOCH_active_controls", ([_control,_bg,_buffer] + _btn_arr) ];
// uiNamespace setVariable ["EPOCH_active_buttons", _btn_arr ];
{ctrlSetFocus _x} forEach (uiNamespace getVariable ["EPOCH_active_controls", []]);
};

View File

@ -34,3 +34,17 @@ class player_inspect
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
tooltip = "Examine";
};
class player_group_menu
{
condition = "true";
action = "call EPOCH_Inventory_Group;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_menu_ca.paa";
tooltip = "Group Menu";
};
class player_group_requests
{
condition = "!(Epoch_invited_GroupUIDs isEqualTo[])";
action = "call EPOCH_Inventory_iGroup;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_requests_ca.paa";
tooltip = "Group Requests";
};

View File

@ -285,279 +285,3 @@ class CfgClientFunctions
};
/*[[[end]]]*/
class CfgClientFunctions
{
version = 1;
class A3E
{
tag = "EPOCH";
file = "epoch_code\compile";
class generic {
file = "epoch_code\compile";
class localCleanup {};
class unitSpawnIncrease {};
class unitSpawnDecrease {};
class QuickTakeAll {};
class QuickTakeLoad {};
class effectCrypto {};
class handleServerMessage {};
class updateLoadingScreen {};
class EnterBuilding {};
class lootTrash {};
class debugMonitor {};
class interact {};
class chopWood {};
class fish {};
class mineRocks {};
class UnisexCheck {};
class PutHandler {};
class niteLight {};
class LootIT {};
class supportCopter {};
class consumeItem {};
class unitSpawn {};
class onEachFrame {};
class callSapperMigration {};
class zombieSpawn {};
class makeMarker {};
class removeMarker {};
};
class building
{
class maintainIT {};
class lockCheck {};
class countdown {};
class fnc_SelectTargetBuild {};
class isBuildAllowed {};
class simulSwap {};
class staticMove {};
class upgradeBUILD {};
class removeBUILD {};
class changeWallState {};
class checkBuild {};
};
class traders
{
class startInteract {};
class startInteractNPC {};
class npcTraderAdd {};
class npcTraderAdd2 {};
class npcTraderAdd3 {};
class startNPCTraderMenu {};
class NPCTraderMenuFilter {};
class startNpcTrade {};
class tradeFilter {};
class takeCrypto {};
class startBankTransfer {};
};
class interface_event_handlers
{
class KeyDown {};
class KeyUp {};
class onChar {};
};
class event_handlers
{
class getInMan {};
class getOutMan {};
};
class setup
{
class masterLoop {};
class clientInit {};
class clientRespawn {};
class clientRevive {};
class client_rejectPlayer {};
class clientKeyMap {};
};
class p2p_trading
{
class startTRADEREQ {};
class startTrade {};
class tradeRequest {};
class TradeLoop {};
class makep2pTrade {};
};
class functions
{
class worldObjectType {};
class returnConfig {};
class colorRange {};
class convertTemp {};
class fnc_playerDeath {};
class fnc_playerFired {};
class fnc_isInsideBuilding {};
class fnc_Weather {};
class fnc_findSafePos {};
class fnc_addItemOverflow {};
class pushCustomVar {};
class itemData {};
class itemPicture {};
class itemDisplayName {};
class SortArrayByDistance {};
class fnc_findRandomPosBehind {};
class fnc_stringLeft {};
class fnc_findSapperStalkLocation {};
class fnc_dirToFuzzy {};
class fnc_cursorTarget {};
class fnc_triggerAntagonist {};
class fnc_playerDeathDetonate {};
class fnc_playerDeathMorph {};
class fnc_playerSetVariable {};
class fnc_playerAttachToAntagonist {};
class fnc_dynamicFSM {};
class fnc_vectorDivide {};
class giveAttributes {};
class fnc_spawnEffects {};
class fnc_arrayStringToBool {};
};
class environment
{
class client_earthQuake {};
class client_loadAnimalBrain {};
class client_bitePlayer {};
};
class vehicles
{
class client_repairVehicle {};
class client_lockVehicle {};
class client_fillVehicle {};
class client_gearVehicle {};
};
class missions
{
class mission_accept {};
class mission_cage_sapper {};
class mission_returnObj {};
};
class inventory {
class selectInventoryItem {};
class itemInteractClick {};
class itemInteractDblClick {};
class uniformArmorCalc {};
class gearArmorCalc {};
class factorArmor {};
class maxArmorInit {};
class initUI {};
class refeshUI {};
};
class messaging {
file = "epoch_code\gui\scripts\messaging";
class message {};
class message_old1 {};
class message_old2 {};
};
class looting {
class spawnLoot {};
};
class gui {
file = "epoch_code\gui\scripts";
class onPause {};
class showStats {};
class 3DctrlPitchYaw {};
class 3DctrlSpin {};
class 3DctrlYaw {};
class InterruptConfig {};
class InterruptConfigActions {};
class getIDC {};
class guiObjHP {};
class secureStorageHandler {};
class genderSelection {};
class getColorScheme {};
class dragControl {};
};
class config {
file = "epoch_code\gui\scripts\config";
class config_keymap {};
};
class dynamenu {
file = "epoch_code\gui\scripts\dynamenu";
class dynamicMenu {};
class dynamicMenuPopulate {};
class dynamicMenuCleanup {};
};
class dynamicHUD {
file = "epoch_code\gui\scripts\dynamicHUD";
class dynamicHUD_adjust {};
class dynamicHUD_loadSave {};
class dynamicHUD_start {};
class getHUDCtrl {};
};
class gui_craft {
file = "epoch_code\gui\scripts\craftingv2";
class crafting_animate {};
class crafting_ctrl_collector {};
class crafting_dev_toggle {};
class crafting_getConfig {};
class crafting_checkGear {};
class crafting_checkNearby {};
class crafting_checkResources {};
class crafting_craft {};
class crafting_progress {};
class crafting_load {};
class crafting_unload {};
class crafting_LB_click {};
class crafting_LB_defaults {};
class crafting_LB_doubleClick {};
class crafting_colorScheme {};
};
class group {
file = "epoch_code\gui\scripts\group";
class Group_invitePlayer {};
class Group_BtnMod {};
class Group_BtnInvite {};
class Group_onLoad {};
class Group_List {};
class Group_Combo {};
class Group_BtnLeave {};
class Group_BtnKick {};
class cGroup_groupText {};
class cGroup_onLoad {};
class cGroup_BtnCreate {};
class iGroup_acceptInvite {};
class iGroup_onLoad {};
class iGroup_refresh {};
class Group_update {};
};
class gui_inventory {
file = "epoch_code\gui\scripts\inventory";
class Inventory_Group {};
class Inventory_iGroup {};
};
class gui_missions {
file = "epoch_code\gui\scripts\missions";
class mission_refresh {};
class mission_description {};
};
class gui_postProcessing {
file = "epoch_code\gui\scripts\post_process";
class postprocessCreate {};
class postprocessAdjust {};
class postprocessDestroy {};
class setDrunk {};
class setRadiation {};
};
class worldToScreen {
file = "epoch_code\gui\scripts\worldToScreen";
class gui3DCooldown {};
class gui3DCooldownEH {};
class gui3DWorldPos {};
class gui3DWorldPosEH {};
class gui3DModelPos {};
class gui3DModelPosEH {};
};
};
};

View File

@ -12,217 +12,71 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgEpochClient.hpp
*/
/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/
/*[[[end]]]*/
class CfgEpochClient
{
epochVersion = "0.4.0.0";
sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper
droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = // 2% chance (+ 4% chance if in city) (1% - 2% Half if using silencer) to spawn drone if shot fired
buildingNearbyMilitary = 0; //1 to allow building nearby Military buildings
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 = 0; // 1 = to allow building without a jammer
buildingCountLimit = 200; // how many objects can be built within range of a jammer
buildingJammerRange = 75; // jammer range in meters
JammerPerGroup = 1; // Max Jammer count per Group
minJammerDistance = 650; // min distance to next Jammer
maxBuildingHeigh = 33; // Max heigh, building is allowed
buildingCountLeader = 125; // Building count limit if Player has no group
buildingCountPerMember = 5; // Additional building counts per group member
storagecountLeader = 10; // Storage count limit if Player has no group
storagecountPerMember = 5; // Additional Storage counts per group member
maxdoors = 8; // Max allowed doors per Group
maxgates = 5; // Max allowed Gates per Group
disableRemoteSensors = true; // disableRemoteSensors true
EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."};
deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"};//Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F
niteLight[] = {1, 1.88, 22};//Set ambient lighting at night: {1 = enabled/0 = disabled, Brightness of light,Height of light}. Default (Low Ambient): {1.88,22} | Twilight: {7.2,88} | Distant: {12.8,142}
ryanZombiesEnabled = true; // enabled by default, false to disable
antagonistSpawnIndex[] = {
{"Epoch_Cloak_F", 1}, // {"type", limit}
{"GreatWhite_F", 2},
{"Epoch_Sapper_F",2},
{"Epoch_SapperB_F",1},
{"I_UAV_01_F",2},
{"PHANTOM",1},
{"B_Heli_Transport_01_F",1},
{"EPOCH_RyanZombie_1",12}
};
customVarsDefaults[] = {
// EPOCH_player + varName, default value, {max,min,warn-high,crit-high,warn-low,crit-low}
{"Temp",98.6,{106.7,95,102,105,96,95}},
{"Hunger",5000,{5000,0,5001,5001,1250,0}},
{"Thirst",2500,{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",{},{}}
};
// HUD configs
hudConfigs[] = {
/*
{
{
"AnyVarName",
"getMissionNamespaceVariable",
"defaultValue",
{
{
"VarName1",
"getMissionNamespaceVariable",
"defaultValue"
},
">=",
0.7
},
{5000,0,5001,5001,1250,0}
},
"topRight",
"x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa"
},
{
{
"Thirst",
"",
"",
{
{"Hunger","getPlayerVariable"},">=",1000
},
{2500,0,2501,2501,625,0}
},
"topRight",
"x\addons\a3_epoch_code\Data\UI\hunger_ca.paa",
},
*/
{
{"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"
},
{
"Wet",
"topRight",
"x\addons\a3_epoch_code\Data\UI\wet_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"
}
};
// controls max group limit and cost
group_upgrade_lvl[] = {4,"1000",6,"1500",8,"2000",10,"2500",12,"3000",14,"3500",16,"4000",32,"8000",64,"16000"};
// Event handler code
displayAddEventHandler[] = {"keyDown","keyUp"};
keyDown = "(_this call EPOCH_KeyDown)";
keyUp = "(_this call EPOCH_KeyUp)";
addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","Fired","Killed","HandleRating","GetInMan","GetOutMan"};
Respawn = "(_this select 0) call EPOCH_clientRespawn";
Put = "(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler";
Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck";
Fired = "_this call EPOCH_fnc_playerFired;";
InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};";
InventoryOpened = "_this spawn EPOCH_initUI;_container = _this select 1;_lockedNear = false;if (_container isKindOf 'GroundWeaponHolder' || _container isKindOf 'WeaponHolderSimulated') then {{if (locked _x in [2, 3] ||_x getVariable['EPOCH_Locked', false]) exitWith {_lockedNear = true}} forEach (player nearSupplies 10);};if (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false] || _lockedNear) then {[] spawn {disableSerialization;waitUntil {!isNull findDisplay 602};_display = findDisplay 602;_ctrl_cargo = _display displayCtrl 6401;_ctrl_ground = _display displayCtrl 6321;_ctrl_cargo ctrlEnable false;ctrlSetFocus _ctrl_ground;ctrlActivate _ctrl_ground;};};";
Killed = "_this call EPOCH_fnc_playerDeath;";
HandleRating = "EPOCH_playerKarma = EPOCH_playerKarma + (_this select 1);0";
HandleDamage = "";
HandleHeal = "";
Dammaged = "";
Hit = "";
HitPart = "";
GetInMan = "_this call EPOCH_getInMan";
GetOutMan = "_this call EPOCH_getOutMan;";
// suppress these units from spawning near Jammer or Traders
nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"};
nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"};
nonTraderAIRange = 50;
// Fishing loots
fishLoots[] = {"ItemTuna","ItemSeaBass","ItemSeaBass","ItemSeaBass","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout"};
// Animal spawn table
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"}};
// Player specific configs
playerDeathScreen = "TapOut";
playerKilledScreen = "TapOut2";
playerDisableRevenge = 0; // 0 = invoke playerKilledScreen when killed by another player, 1 = disable.
playerRevengeMinAliveTime = 900; // time in seconds player must be alive before Revenge option is available.
// banking
bankTransferTime[] = {0.0006,1.2,0.06}; // {time per crypto,max wait time,min wait time}
// include configs
epochVersion = "0.4.0.0";
sapperRngChance = 100;
droneRngChance = 100;
buildingNearbyMilitary = 0;
buildingNearbyMilitaryRange = 300;
buildingNearbyMilitaryClasses[] = {"Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"};
restrictedLocations[] = {"NameCityCapital"};
restrictedLocationsRange = 300;
buildingRequireJammer = 0;
buildingCountLimit = 200;
buildingJammerRange = 75;
JammerPerGroup = 1;
minJammerDistance = 650;
maxBuildingHeigh = 33;
buildingCountLeader = 125;
buildingCountPerMember = 5;
storagecountLeader = 10;
storagecountPerMember = 5;
maxdoors = 8;
maxgates = 5;
disableRemoteSensors = True;
EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."};
deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"};
niteLight[] = {1,1.88,22};
ryanZombiesEnabled = True;
antagonistSpawnIndex[] = {{"Epoch_Cloak_F",1},{"GreatWhite_F",2},{"Epoch_Sapper_F",2},{"Epoch_SapperB_F",1},{"I_UAV_01_F",2},{"PHANTOM",1},{"B_Heli_Transport_01_F",1},{"EPOCH_RyanZombie_1",12}};
customVarsDefaults[] = {{"Temp",98.6,{106.7,95,102,105,96,95}},{"Hunger",5000,{5000,0,5001,5001,1250,0}},{"Thirst",2500,{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",{},{}}};
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"},{"Wet","topRight","x\addons\a3_epoch_code\Data\UI\wet_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"};
displayAddEventHandler[] = {"keyDown","keyUp"};
keyDown = "(_this call EPOCH_KeyDown)";
keyUp = "(_this call EPOCH_KeyUp)";
addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","Fired","Killed","HandleRating","GetInMan","GetOutMan"};
Respawn = "(_this select 0) call EPOCH_clientRespawn";
Put = "(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler";
Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck";
Fired = "_this call EPOCH_fnc_playerFired;";
InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};";
InventoryOpened = "setMousePosition[0.5, 0.5]; call EPOCH_showStats;_this spawn EPOCH_initUI;_container = _this select 1;_lockedNear = false;if (_container isKindOf 'GroundWeaponHolder' || _container isKindOf 'WeaponHolderSimulated') then {{if (locked _x in [2, 3] ||_x getVariable['EPOCH_Locked', false]) exitWith {_lockedNear = true}} forEach (player nearSupplies 10);};if (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false] || _lockedNear) then {[] spawn {disableSerialization;waitUntil {!isNull findDisplay 602};_display = findDisplay 602;_ctrl_cargo = _display displayCtrl 6401;_ctrl_ground = _display displayCtrl 6321;_ctrl_cargo ctrlEnable false;ctrlSetFocus _ctrl_ground;ctrlActivate _ctrl_ground;};};";
Killed = "_this call EPOCH_fnc_playerDeath;";
HandleRating = "EPOCH_playerKarma = EPOCH_playerKarma + (_this select 1);0";
HandleDamage = "";
HandleHeal = "";
Dammaged = "";
Hit = "";
HitPart = "";
GetInMan = "_this call EPOCH_getInMan";
GetOutMan = "_this call EPOCH_getOutMan;";
nonJammerAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","EPOCH_RyanZombie_1"};
nonTraderAI[] = {"B_Heli_Transport_01_F","PHANTOM","EPOCH_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F","GreatWhite_F","EPOCH_RyanZombie_1"};
nonTraderAIRange = 50;
fishLoots[] = {"ItemTuna","ItemSeaBass","ItemSeaBass","ItemSeaBass","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout","ItemTrout"};
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"}};
playerDeathScreen = "TapOut";
playerKilledScreen = "TapOut2";
playerDisableRevenge = 0;
playerRevengeMinAliveTime = 900;
bankTransferTime[] = {0.0006,1.2,0.06};
#include "CfgEpochClient\Altis.hpp"
#include "CfgEpochClient\australia.hpp"
#include "CfgEpochClient\Bornholm.hpp"
#include "CfgEpochClient\Chernarus_Summer.hpp"
#include "CfgEpochClient\Chernarus.hpp"
#include "CfgEpochClient\Chernarus.hpp"
#include "CfgEpochClient\Esseker.hpp"
#include "CfgEpochClient\ProvingGrounds_PMC.hpp"
#include "CfgEpochClient\Sara_dbe1.hpp"
@ -230,72 +84,73 @@ class CfgEpochClient
#include "CfgEpochClient\SaraLite.hpp"
#include "CfgEpochClient\Stratis.hpp"
#include "CfgEpochClient\takistan.hpp"
#include "CfgEpochClient\utes.hpp"
#include "CfgEpochClient\vr.hpp"
#include "CfgEpochClient\utes.hpp"
#include "CfgEpochClient\vr.hpp"
#include "CfgEpochClient\Zargabad.hpp"
#include "CfgEpochClient\Tanoa.hpp"
#include "CfgEpochClient\WorldInteractions.hpp"
#include "CfgEpochClient\Tanoa.hpp"
#include "CfgEpochClient\WorldInteractions.hpp"
};
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.
detonateDistMax = 8;
groanTrig = 16;
sRange = 300;
smellDist = 24;
reflexSpeed = 0.25;
nestChance = 2;
hideLevel = 72;
chargeLevel = 52;
};
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 !
UAVMinDist = 48;
UAVMaxDist = 180;
UAVHeight = 100;
};
class CfgEpochUAVSupport
{
unitTypes[] = {"I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"};//Selects from randomly
maxUnitNum = 2; //Maximum number of units spawned when UAV spots target.
minAISkill = 0.2; //Minumum AI Skill. Skills are chosen randomly between this minimum overall AI skill value and the following max AI skill values, for each of the next skills:
maxAimingAccuracy = 0.7;
maxAimingShake = 0.9;
maxAimingSpeed = 0.6;
maxEndurance = 0.4;
maxSpotDistance = 0.4;
maxSpotTime = 0.3;
maxCourage = 0.3;
maxReloadSpeed = 0.5;
maxCommanding = 0.4;
maxGeneral = 0.4;
unitTypes[] = {"I_Soldier_EPOCH","I_Soldier2_EPOCH","I_Soldier3_EPOCH"};
maxUnitNum = 2;
minAISkill = 0.2;
maxAimingAccuracy = 0.7;
maxAimingShake = 0.9;
maxAimingSpeed = 0.6;
maxEndurance = 0.4;
maxSpotDistance = 0.4;
maxSpotTime = 0.3;
maxCourage = 0.3;
maxReloadSpeed = 0.5;
maxCommanding = 0.4;
maxGeneral = 0.4;
};
class CfgEpochAirDrop
{
AirDropFreq = 1200; //AirDropChance, to decide if Air drop occurs, will only be checked once per AirDropFreq time period, for each player. Min value = 120.
AirDropChance = 6; //Percentage chance of air drop, for current player. Checked every AirDropFreq and upon antagonists spawn trigger. -1 To disable.
AirDropFreq = 1200;
AirDropChance = 6;
};
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)
cRange = 300;
cAggression = 75;
attackFrequency = 120;
attackDistance = 38;
targetChangeFrequency = 42;
teleportChance = 66;
hoverFrequency = 1280;
};
class CfgEpochRyanZombie
{
zeds[] = {"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5"};
attackDist = 1.6; //Attack Distance.
range = 45; //Range at which to dispose old zombies and spawn new ones within.
// maxNumber = 12; //Maximum number of zombies within range,
disposeRange = 800; // distance before zombie is disposed
smell[] = {38,0.42}; //Distance in metres up to which the zombie can smell a target. | Skill (0 - 1). 0 - Disable
sight[] = {28,0.72}; //Zombie sight distance | Skill (0 - 1).
hearing[] = {108,0.68}; //Zombie hearing distance / Skill. Max FiredNear EH Limit ?
memory[] = {480,0.8}; //Memory time. / Weighting. WIP - Not Used
reflexSpeed = 0.25; //Zombie brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive zombie. (Guide Min 0.25 - Max 2.5).
moans[] = {"ryanzombiesmoan1","ryanzombiesmoan2","ryanzombiesmoan3","ryanzombiesmoan4"};
screams[] = {"ryanzombiesscream1", "ryanzombiesscream2", "ryanzombiesscream3", "ryanzombiesscream4", "ryanzombiesscream5", "ryanzombiesscream6", "ryanzombiesscream7", "ryanzombiesscream8", "ryanzombiesscream9"};
zeds[] = {"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5"};
attackDist = 1.6;
range = 45;
disposeRange = 800;
smell[] = {38,0.42};
sight[] = {28,0.72};
hearing[] = {108,0.68};
memory[] = {480,0.8};
reflexSpeed = 0.25;
moans[] = {"ryanzombiesmoan1","ryanzombiesmoan2","ryanzombiesmoan3","ryanzombiesmoan4"};
screams[] = {"ryanzombiesscream1","ryanzombiesscream2","ryanzombiesscream3","ryanzombiesscream4","ryanzombiesscream5","ryanzombiesscream6","ryanzombiesscream7","ryanzombiesscream8","ryanzombiesscream9"};
};
/*[[[end]]]*/

View File

@ -413,7 +413,7 @@
"Take": "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck",
"Fired": "_this call EPOCH_fnc_playerFired;",
"InventoryClosed": "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};",
"InventoryOpened": "_this spawn EPOCH_initUI;_container = _this select 1;_lockedNear = false;if (_container isKindOf 'GroundWeaponHolder' || _container isKindOf 'WeaponHolderSimulated') then {{if (locked _x in [2, 3] ||_x getVariable['EPOCH_Locked', false]) exitWith {_lockedNear = true}} forEach (player nearSupplies 10);};if (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false] || _lockedNear) then {[] spawn {disableSerialization;waitUntil {!isNull findDisplay 602};_display = findDisplay 602;_ctrl_cargo = _display displayCtrl 6401;_ctrl_ground = _display displayCtrl 6321;_ctrl_cargo ctrlEnable false;ctrlSetFocus _ctrl_ground;ctrlActivate _ctrl_ground;};};",
"InventoryOpened": "setMousePosition[0.5, 0.5]; call EPOCH_showStats;_this spawn EPOCH_initUI;_container = _this select 1;_lockedNear = false;if (_container isKindOf 'GroundWeaponHolder' || _container isKindOf 'WeaponHolderSimulated') then {{if (locked _x in [2, 3] ||_x getVariable['EPOCH_Locked', false]) exitWith {_lockedNear = true}} forEach (player nearSupplies 10);};if (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false] || _lockedNear) then {[] spawn {disableSerialization;waitUntil {!isNull findDisplay 602};_display = findDisplay 602;_ctrl_cargo = _display displayCtrl 6401;_ctrl_ground = _display displayCtrl 6321;_ctrl_cargo ctrlEnable false;ctrlSetFocus _ctrl_ground;ctrlActivate _ctrl_ground;};};",
"Killed": "_this call EPOCH_fnc_playerDeath;",
"HandleRating": "EPOCH_playerKarma = EPOCH_playerKarma + (_this select 1);0",
"HandleDamage": "",

View File

@ -1 +1 @@
build=606;
build=619;

View File

@ -1 +1 @@
build=606;
build=619;

Binary file not shown.

View File

@ -1 +1 @@
build=606;
build=619;

View File

@ -1 +1 @@
build=606;
build=619;

View File

@ -1 +1 @@
606
619