Epoch/Sources/epoch_code/compile/setup/masterLoop/init.sqf

428 lines
20 KiB
Plaintext
Raw Normal View History

// make sure we wait for Display #46
waitUntil {!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")};
// load favBar
2017-09-25 22:59:03 +00:00
'load' spawn epoch_favBar_draw;
// force update within 15 seconds
EPOCH_forceUpdate = false;
_forceUpdate = false;
// force update within 1 second
EPOCH_forceUpdateNow = false;
2017-09-05 21:28:07 +00:00
// start alive timer
_clientAliveTimer = diag_tickTime;
// Fade Black Screen
_fadedblack = false;
_UnFadeCheck = {
if(_fadedblack) then {
[] spawn {
uisleep 1.5;
TitleText ['','PLAIN DOWN'];
};
_fadedblack = false;
};
};
2019-01-26 00:27:14 +00:00
// Lootspawner
_LootSpawned = false;
_LootBiasAdd = 30;
2017-09-06 14:43:15 +00:00
// 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;
_gModeVarNames = _gmVarsInit apply {_x param [0,""]};
_gModeVarValues = _gmVarsInit apply {_x param [1,0]};
2017-09-06 14:43:15 +00:00
_customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2;
_customVarNames = _customVarsInit apply {_x param [0,""]};
_defaultVarValues = _customVarsInit apply {_x param [1,0]};
_customVarLimits = _customVarsInit apply {_x param [2,[]]};
2017-09-27 15:13:42 +00:00
(_customVarLimits select (_customVarNames find "Temp")) params [["_playerTempMax",100],["_playerTempMin",0]];
(_defaultVarValues select (_customVarNames find "Temp")) params [["_playerTempDefault",0]];
(_customVarLimits select (_customVarNames find "Hunger")) params [["_playerHungerMax",100],["_playerHungerMin",0]];
(_defaultVarValues select (_customVarNames find "Hunger")) params [["_playerHungerDefault",0]];
(_customVarLimits select (_customVarNames find "Thirst")) params [["_playerThirstMax",100],["_playerThirstMin",0]];
(_defaultVarValues select (_customVarNames find "Thirst")) params [["_playerThirstDefault",0]];
(_customVarLimits select (_customVarNames find "Energy")) params [["_playerEnergyMax",100],["_playerEnergyMin",0]];
(_defaultVarValues select (_customVarNames find "Energy")) params [["_playerEnergyDefault",0]];
(_customVarLimits select (_customVarNames find "Wet")) params [["_playerWetMax",100],["_playerWetMin",0]];
(_defaultVarValues select (_customVarNames find "Wet")) params [["_playerWetDefault",0]];
(_customVarLimits select (_customVarNames find "Soiled")) params [["_playerSoiledMax",100],["_playerSoiledMin",0]];
(_defaultVarValues select (_customVarNames find "Soiled")) params [["_playerSoiledDefault",0]];
(_customVarLimits select (_customVarNames find "Immunity")) params [["_playerImmunityMax",100],["_playerImmunityMin",0]];
(_defaultVarValues select (_customVarNames find "Immunity")) params [["_playerImmunityDefault",0]];
(_customVarLimits select (_customVarNames find "Toxicity")) params [["_playerToxicityMax",100],["_playerToxicityMin",0]];
(_defaultVarValues select (_customVarNames find "Toxicity")) params [["_playerToxicityDefault",0]];
(_customVarLimits select (_customVarNames find "Stamina")) params [["_playerStaminaMax",100],["_playerStaminaMin",0]];
(_defaultVarValues select (_customVarNames find "Stamina")) params [["_playerStaminaDefault",0]];
(_customVarLimits select (_customVarNames find "BloodP")) params [["_playerBloodPMax",100],["_playerBloodPMin",0]];
(_defaultVarValues select (_customVarNames find "BloodP")) params [["_playerBloodPDefault",0]];
(_customVarLimits select (_customVarNames find "Alcohol")) params [["_playerAlcoholMax",100],["_playerAlcoholMin",0]];
(_defaultVarValues select (_customVarNames find "Alcohol")) params [["_playerAlcoholDefault",0]];
(_customVarLimits select (_customVarNames find "Radiation")) params [["_playerRadiationMax",100],["_playerRadiationMin",0]];
(_defaultVarValues select (_customVarNames find "Radiation")) params [["_playerRadiationDefault",0]];
(_customVarLimits select (_customVarNames find "Nuisance")) params [["_playerNuisanceMax",100],["_playerNuisanceMin",0]];
(_defaultVarValues select (_customVarNames find "Nuisance")) params [["_playerNuisanceDefault",0]];
2017-09-27 15:38:18 +00:00
(_defaultVarValues select (_customVarNames find "AliveTime")) params [["_playerAliveTimeDefault",0]];
2017-09-27 15:13:42 +00:00
(_defaultVarValues select (_customVarNames find "HitPoints")) params [["_playerHitPointsDefault",0]];
(_defaultVarValues select (_customVarNames find "SpawnArray")) params [["_playerSpawnArrayDefault",0]];
(_defaultVarValues select (_customVarNames find "MissionArray")) params [["_playerMissionArrayDefault",0]];
// push inital vars to new gvars
{
_varDefault = _defaultVarValues select _foreachindex;
2017-09-26 22:16:13 +00:00
_varName = format["EPOCH_player%1",_x];
_varNameTmp = call compile format["_player%1Key",_x];
if !(isNil "_varNameTmp") then {_varName = _varNameTmp};
2017-09-27 02:20:41 +00:00
missionNamespace setVariable [_varName, missionNamespace getVariable [format["EPOCH_player%1",_x], _varDefault]];
} forEach _customVarNames;
2019-08-11 22:13:44 +00:00
missionNamespace setVariable [call compile "_playerRandomVarKey", round (diag_tickTime + random 99999)];
2017-09-27 15:13:42 +00:00
// only changed within this loop
_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKey, _playerAliveTimeDefault];
2017-10-07 15:41:44 +00:00
// init Energy Max
EPOCH_playerEnergyMax = _playerEnergyMax;
// inline function to sync player stats to server
_fnc_forceUpdate = {
private _customVars = [];
{
2017-09-27 02:02:58 +00:00
private _varName = format["EPOCH_player%1",_x];
private _varNameTmp = call compile format["_player%1Key",_x];
if !(isNil "_varNameTmp") then {_varName = _varNameTmp};
_customVars pushBack (missionNamespace getVariable [_varName,_defaultVarValues select _foreachindex]);
2017-09-06 14:43:15 +00:00
} forEach _customVarNames;
2019-05-11 22:58:33 +00:00
_stats = [
["WalkDist",round _TotalWalkDist,true],
["MaxAliveTime",_MaxAliveTime,true],
["PlayTime", round _PlayTime, true],
2019-05-15 19:35:24 +00:00
["PublicStats",missionnamespace getvariable ["EPOCH_totalPublicStats",1], true]
2019-05-11 22:58:33 +00:00
];
2019-05-15 19:35:24 +00:00
[player,_customVars,Epoch_personalToken,_stats,_UpdateTopStats] remoteExec ["EPOCH_fnc_savePlayer",2];
_UpdateTopStats = false;
};
// disable fuel sources client side.
{_x setFuelCargo 0;} foreach (missionNamespace getVariable ["EPOCH_staticFuelSources", []]);
// setup display EH's
if (isNil "EPOCH_display_setup_complete") then {
EPOCH_display_setup_complete = true;
{
(findDisplay 46) displayAddEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)];
} forEach (["CfgEpochClient", "displayAddEventHandler", []] call EPOCH_fnc_returnConfigEntryV2);
// reset anim state
player switchMove "";
// setup Epoch Hud
call epoch_dynamicHUD_start;
};
2015-11-08 15:26:38 +00:00
player setVariable["BIS_noCoreConversations", true];
// Background radiation
_outOfBoundsRadiation = ["CfgEpochClient", "outOfBoundsRadiation", 10] call EPOCH_fnc_returnConfigEntryV2;
_radsLevel = 0;
// Radiation screen effects threshold
_radiationEffectsThreshold = ["CfgEpochClient", "radiationEffectsThreshold", 10] call EPOCH_fnc_returnConfigEntryV2;
2015-11-08 15:26:38 +00:00
_prevEquippedItem = [];
_damagePlayer = damage player;
_isOnFoot = isNull objectParent player;
2015-11-08 15:26:38 +00:00
_panic = false;
2017-09-27 16:01:33 +00:00
_prevEnergy = missionNamespace getVariable [_playerEnergyKey, _playerEnergyDefault];
2015-11-08 15:26:38 +00:00
_EPOCH_Autorunspeed = 1;
2015-11-08 15:26:38 +00:00
// init config data
_antagonistRndChance = ["CfgEpochClient", "antagonistRngChance", 100] 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;
_baseThirstLoss = ["CfgEpochClient", "baseThirstLoss", 2] call EPOCH_fnc_returnConfigEntryV2;
2017-09-27 15:38:18 +00:00
_baseAlcoholLoss = ["CfgEpochClient", "baseAlcoholLoss", 0.17] call EPOCH_fnc_returnConfigEntryV2;
_lossMultiplier = if (["CfgEpochClient", "accelerateHTALoss", true] call EPOCH_fnc_returnConfigEntryV2) then {timeMultiplier} else {1};
2015-11-08 15:26:38 +00:00
_energyCostNV = ["CfgEpochClient", "energyCostNV", 3] call EPOCH_fnc_returnConfigEntryV2;
_energyPowerSources = ["CfgEpochClient", "energyPowerSources", ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH","Land_Wreck_Satellite_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2;
_energyRegenInVeh = ["CfgEpochClient", "energyChargeInVeh", 5] call EPOCH_fnc_returnConfigEntryV2;
2015-11-08 15:26:38 +00:00
_energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnConfigEntryV2;
_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_hudConfigs = ["CfgEpochClient", "hudConfigs", []] call EPOCH_fnc_returnConfigEntryV2;
2017-10-01 23:14:18 +00:00
_radioactiveLocations = ["CfgEpochClient", "radioactiveLocations", ["NameCityCapital", "NameCity", "Airport"]] call EPOCH_fnc_returnConfigEntryV2;
2017-10-23 06:31:39 +00:00
_radiatedObjMaxRange = ["CfgEpochClient", "radiatedObjMaxFalloutDist", 75] call EPOCH_fnc_returnConfigEntryV2;
_PlayerMarkerArray = getArray(('CfgMarkerSets' call EPOCH_returnConfig) >> 'PlayerMarker' >> 'markerArray');
_PlayerMarkerName = (_PlayerMarkerArray param [0,[]]) param [0,"EPOCH_PlayerMarker1"];
_DeathMarkerName = ((getArray (('CfgMarkerSets' call EPOCH_returnConfig) >> 'DeathMarker' >> 'markerArray')) param [0,[]]) param [0,"EPOCH_DeathMarker1"];
_mapOnZoomSetMarkerSize = ["CfgEpochClient", "mapOnZoomSetMarkerSize", 0] call EPOCH_fnc_returnConfigEntryV2;
_PlayerMarkerEnabled = (["CfgEpochClient", "playerLocationMarkerGPSOnly", 0] call EPOCH_fnc_returnConfigEntryV2) isequalto 1;
_DeathMarkerEnabled = (["CfgEpochClient", "playerDeathMarkerGPSOnly", 0] call EPOCH_fnc_returnConfigEntryV2) isequalto 1;
_DeathMarker = profileNameSpace getVariable ['EPOCHLastKnownDeath',[]];
_chargeRate = 0;
2015-11-08 15:26:38 +00:00
_antagonistChanceDefaults = [
"Epoch_Cloak_F",0.07,
"Epoch_Sapper_F",0.25,
"Epoch_SapperG_F",0.12,
"Epoch_SapperB_F",0.06,
"I_UAV_01_F",0.2,
"PHANTOM",0.01,
"EPOCH_RyanZombie_1",0.25
];
_antagonistChances = ["CfgEpochClient", "antagonistChances", _antagonistChanceDefaults] call EPOCH_fnc_returnConfigEntryV2;
// Init antagonist spawn limits
_spawnIndex = [];
_spawnLimits = [];
_antagonistSpawnDefaults = [
["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]
];
2017-09-04 13:36:15 +00:00
_antagonistSpawnLimits = ["CfgEpochClient", "antagonistSpawnIndex", _antagonistSpawnDefaults] call EPOCH_fnc_returnConfigEntryV2;
2017-10-23 20:12:00 +00:00
_mod_Ryanzombies_Enabled = missionNamespace getVariable ["EPOCH_mod_Ryanzombies_Enabled",false];
{
_x params ["_spawnName","_spawnLimit"];
if (_spawnName isEqualTo "EPOCH_RyanZombie_1") then {
2017-10-23 20:12:00 +00:00
if (_mod_Ryanzombies_Enabled) then {
_spawnIndex pushBack _spawnName;
_spawnLimits pushBack _spawnLimit;
};
} else {
_spawnIndex pushBack _spawnName;
_spawnLimits pushBack _spawnLimit;
};
2017-09-04 13:36:15 +00:00
} forEach _antagonistSpawnLimits;
EPOCH_spawnIndex = _spawnIndex;
EPOCH_spawnLimits = _spawnLimits;
2015-11-08 15:26:38 +00:00
// default data if mismatch
_playerSpawnArray = missionNamespace getVariable [_playerSpawnArrayKey, _playerSpawnArrayDefault];
if !(_playerSpawnArray isEqualTypeParams _spawnIndex) then{
_playerSpawnArray = [];
{ _playerSpawnArray pushBack 0 } forEach _spawnIndex;
2015-11-08 15:26:38 +00:00
};
2017-09-30 15:14:43 +00:00
missionNamespace setVariable [_playerSpawnArrayKey, _playerSpawnArray];
2015-11-08 15:26:38 +00:00
// find radio
{
if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) == "ItemRadio") exitWith{
EPOCH_equippedItem_PVS = [_x, true, player];
};
} forEach assignedItems player;
// lootBubble Init
Release 0.3.8 (#502) * first build for 0.3.8 * 0.3.8.0190 * 0.3.8.0202 * 0.3.8.0213 * 0.3.7.0214 * 0.3.8.0222 * 0.3.8.0246 * 0.3.8.0247 fixed typo * 0.3.8.0249 more fixes for server compiler * 0.3.8.0256 * add build number and simple batch file for packing * match build number with internal * add build numbers to server pbo's and mission files also reworked build script for more options * 0.3.8.0261 * 0.3.8.0261 * 0.3.8.0283 * 0.3.8.0284 * changelog * 0.3.8.0307 * 0.3.8.0311 * remove old BEC plugin * update redis-server.exe to latest build and full config * 0.3.8.0314 * 0.3.8.0315 * inverse logic This should correctly prevent spawning these units nearby jammer or protection zones * use pushbackUnique here * optimized loot function by using selectRandom instead of slower sqf logic * 0.3.8.0316 * make use of new getDir functionality instead of BIS fnc * add lower disconnect value to server.cfg * use new getpos functionality * 0.3.8.0317 * 0.3.8.0319 * 0.3.8.0327 * 0.3.8.0338 changelog update tba * changelog * 0.3.8.0341 * BE update * 0.3.8.0353 * changelog * removed duplicates * 0.3.8.0355 fixed error in getIDC * 0.3.8.0356 revert to BIS_fnc_param as params threw errors * 0.3.8.0357 fixes for #496 #497 * 0.3.8.0359 fixed #497 fixed #496 * 0.3.8.0365 * 0.3.8.0371 * 0.3.8.0373 * 0.3.8.0379 * 0.3.8.0381 * 0.3.8.0386 * 0.3.8.0393 * 0.3.8.0395 * 0.3.8.0396 * 0.3.8.0397 * 0.3.8.0406 * 0.3.8.0409 * 0.3.8.0410 loot balance suppress error in spawnloot make near object check based on building size * 0.3.8.0412 * 0.3.8.0414 removed classes with scope 0 test remove loot trash on gear for #498 fixed #501 * 0.3.8.0415 * same
2016-04-08 20:21:46 +00:00
_masterConfig = 'CfgBuildingLootPos' call EPOCH_returnConfig;
2015-11-08 15:26:38 +00:00
Release 0.3.8 (#502) * first build for 0.3.8 * 0.3.8.0190 * 0.3.8.0202 * 0.3.8.0213 * 0.3.7.0214 * 0.3.8.0222 * 0.3.8.0246 * 0.3.8.0247 fixed typo * 0.3.8.0249 more fixes for server compiler * 0.3.8.0256 * add build number and simple batch file for packing * match build number with internal * add build numbers to server pbo's and mission files also reworked build script for more options * 0.3.8.0261 * 0.3.8.0261 * 0.3.8.0283 * 0.3.8.0284 * changelog * 0.3.8.0307 * 0.3.8.0311 * remove old BEC plugin * update redis-server.exe to latest build and full config * 0.3.8.0314 * 0.3.8.0315 * inverse logic This should correctly prevent spawning these units nearby jammer or protection zones * use pushbackUnique here * optimized loot function by using selectRandom instead of slower sqf logic * 0.3.8.0316 * make use of new getDir functionality instead of BIS fnc * add lower disconnect value to server.cfg * use new getpos functionality * 0.3.8.0317 * 0.3.8.0319 * 0.3.8.0327 * 0.3.8.0338 changelog update tba * changelog * 0.3.8.0341 * BE update * 0.3.8.0353 * changelog * removed duplicates * 0.3.8.0355 fixed error in getIDC * 0.3.8.0356 revert to BIS_fnc_param as params threw errors * 0.3.8.0357 fixes for #496 #497 * 0.3.8.0359 fixed #497 fixed #496 * 0.3.8.0365 * 0.3.8.0371 * 0.3.8.0373 * 0.3.8.0379 * 0.3.8.0381 * 0.3.8.0386 * 0.3.8.0393 * 0.3.8.0395 * 0.3.8.0396 * 0.3.8.0397 * 0.3.8.0406 * 0.3.8.0409 * 0.3.8.0410 loot balance suppress error in spawnloot make near object check based on building size * 0.3.8.0412 * 0.3.8.0414 removed classes with scope 0 test remove loot trash on gear for #498 fixed #501 * 0.3.8.0415 * same
2016-04-08 20:21:46 +00:00
_lootClasses = [];
_lootClassesIgnore = ['Default'];
'_cN = configName _x;if !(_cN in _lootClassesIgnore)then{_lootClasses pushBackUnique (toLower _cN)}; true' configClasses _masterConfig;
2017-09-06 19:00:03 +00:00
_lastPlayerPos = getPosATL player;
2019-05-11 22:58:33 +00:00
_lastPlayerPos2 = getPosATL player;
_TotalWalkDist = missionnamespace getvariable ["EPOCH_totalWalkDist",0];
_MaxAliveTime = missionnamespace getvariable ["EPOCH_totalMaxAliveTime",0];
_PlayTime = missionnamespace getvariable ["EPOCH_totalPlayTime",0];
_PlayTimeTimer = diag_ticktime;
2019-05-15 19:35:24 +00:00
_UpdateTopStats = false;
EPOCH_MyStatsPublic = !((missionnamespace getvariable ["EPOCH_totalPublicStats",1]) isEqualTo 0);
2019-05-11 22:58:33 +00:00
2019-01-26 00:27:14 +00:00
_pushbacklootedbld = {
private ["_lootCheckBufferLimit"];
_lootCheckBufferLimit = 333;
EPOCH_LootedBlds pushBackUnique _this;
if (count EPOCH_LootedBlds >= _lootCheckBufferLimit) then {
EPOCH_LootedBlds deleteAt 0;
};
};
2015-11-08 15:26:38 +00:00
_lootBubble = {
2019-01-26 00:27:14 +00:00
private["_jammer", "_others", "_objects", "_nearObjects", "_building", "_lootDist", "_lootLoc", "_playerPos", "_distanceTraveled","_AddBias","_dir","_minlootdist","_maxlootdist"];
_LootBiasAdd = _this;
2015-11-08 15:26:38 +00:00
_playerPos = getPosATL vehicle player;
2019-01-26 00:27:14 +00:00
_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 "_";
2017-10-03 21:41:46 +00:00
};
};
2019-01-26 00:27:14 +00:00
if ((toLower _selectedConfig) in _lootClasses) then {
_nearestbuilding call _pushbacklootedbld;
};
};
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;
};
_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];
};
_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 "_";
};
};
((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];
2019-02-20 21:31:09 +00:00
_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]);
2019-01-26 00:27:14 +00:00
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};
};
2015-11-08 15:26:38 +00:00
};
};
};
};
};
2019-01-26 00:27:14 +00:00
_LootBiasAdd
2015-11-08 15:26:38 +00:00
};
// init weather temperature var if not already set
if (isNil "EPOCH_CURRENT_WEATHER") then {
EPOCH_CURRENT_WEATHER = 75;
};
2015-11-08 15:26:38 +00:00
_cursorTarget = objNull;
// init cfgBaseBuilding config var
_cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig;
_cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig;
_EPOCH_BuildTraderMisson = {
params ['_inGameTasksconfig','_taskName',['_unit',objnull],['_taskItem',objnull]];
_taskTitle = getText ( _inGameTasksconfig >> _taskName >> "title");
_taskSQF = getText ( _inGameTasksconfig >> _taskName >> "initsqf");
if !(_taskSQF isequalto '') then {
call compile format ["[_taskName,player,_unit,_taskItem] execVM ""%1""",_taskSQF];
};
_taskCall = getText ( _inGameTasksconfig >> _taskName >> "initcall");
if !(_taskCall isequalto '') then {
call compile _taskCall;
};
_taskDelay = diag_ticktime + (getNumber ( _inGameTasksconfig >> _taskName >> "triggerDelay"));
_triggerintervall = getNumber ( _inGameTasksconfig >> _taskName >> "triggerintervall");
_taskItems = getArray ( _inGameTasksconfig >> _taskName >> "items");
if !(_taskItems isequalto []) then {
[player,Epoch_personalToken,_taskItems,[],objNull,false] remoteExec ["EPOCH_Server_createObject",2];
};
_taskMarkerType = getnumber (_inGameTasksconfig >> _taskName >> 'markerType');
if (_taskMarkerType > 0) then {
_taskMarkerVis = getNumber ( _inGameTasksconfig >> _taskName >> "markerVisible");
_markerPos = [0,0,0];
if (isNil "EPOCH_taskMarkerPos") then {
if !(isNull _trgt) then {
_markerPos = getPos _trgt;
};
if !(isNull _unit) then{
_markerPos = getPos _unit;
};
if !(isNull _taskItem) then {
_markerPos = getPos _taskItem;
};
}
else {
_markerPos = EPOCH_taskMarkerPos;
};
_mkrName = format ["EPOCHTaskMark%1%2",_taskName,diag_tickTime];
EPOCH_taskMarker = [_mkrName,_taskMarkerVis];
_taskMarkerText = getText ( _inGameTasksconfig >> _taskName >> "markerText");
_taskMarkerRad = getNumber ( _inGameTasksconfig >> _taskName >> "markerRadius");
if(_taskMarkerType == 2)then{
_markerPos set [0, (_markerPos select 0) + (floor (random _taskMarkerRad) - (_taskMarkerRad / 2))];
_markerPos set [1, (_markerPos select 1) + (floor (random _taskMarkerRad) - (_taskMarkerRad / 2))];
};
[[_taskMarkerVis,player],_markerPos,"ELLIPSE","mil_dot",_taskMarkerText,"ColorYellow",[_taskMarkerRad,_taskMarkerRad], "SolidBorder", 42, 0.6,_mkrName] remoteExec ["EPOCH_server_makeMarker",2];
};
_taskDialogues = [];
{
_x params [["_condition",""],["_dialogue",""]];
if !(_condition isequalto "" || _dialogue isequalto "") then {
_taskDialogues pushback [compile _condition,_dialogue];
};
} foreach (getarray (_inGameTasksconfig >> _taskName >> 'dialogues'));
_taskEvents = [];
{
_x params [["_condition",""],["_taskEventCALL",""],["_taskEventTasks",[]]];
if !(_condition isequalto "") then {
_taskEvents pushback [compile _condition,compile _taskEventCALL,_taskEventTasks];
};
} foreach (getarray (_inGameTasksconfig >> _taskName >> 'callevents'));
_taskFailedCond = compile getText ( _inGameTasksconfig >> _taskName >> "failedCondition");
_taskFailTime = (getNumber ( _inGameTasksconfig >> _taskName >> "abandonTime"));
if (_taskFailTime < 1) then {_taskFailTime=999999} else {_taskFailTime = _taskFailTime + diag_ticktime};
_taskFailedDiags = getArray ( _inGameTasksconfig >> _taskName >> "faileddialogues");
_taskFailedSQF = getText ( _inGameTasksconfig >> _taskName >> "failedSQF");
_taskFailedCall = compile getText ( _inGameTasksconfig >> _taskName >> "failedCall");
_nextTask = getArray ( _inGameTasksconfig >> _taskName >> "failedTask");
_taskCompleteCond = compile getText ( _inGameTasksconfig >> _taskName >> "completeCondition");
_taskReward = getArray ( _inGameTasksconfig >> _taskName >> "reward");
_taskCompleteDiags = getArray ( _inGameTasksconfig >> _taskName >> "completedialogues");
_taskCompleteCall = compile getText ( _inGameTasksconfig >> _taskName >> "completedCALL");
_taskNextTrigger = getArray ( _inGameTasksconfig >> _taskName >> "nextTask");
_missionCleanUpCall = compile getText ( _inGameTasksconfig >> _taskName >> "cleanUpCall");
_taskCleanup = getNumber ( _inGameTasksconfig >> _taskName >> "cleanUp");
_return = [
[_inGameTasksconfig,_taskName,_unit,_taskItem,_taskTitle,_missionCleanUpCall,_taskCleanup],
_taskDelay,
_triggerintervall,
_taskDialogues,
_taskEvents,
[_taskFailedCond,_taskFailTime,_taskFailedDiags,_taskFailedSQF,_taskFailedCall,_nextTask],
[_taskCompleteCond,_taskReward,_taskCompleteDiags,_taskCompleteCall,_taskNextTrigger]
];
EPOCH_task_startTime = diag_ticktime;
_return
};
_epoch_tradermissionarray = [];
EPOCH_ActiveTraderMission = [];
_LastMissionTrigger = 0;