mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
Merge pull request #1017 from EpochModTeam/experimental
release 1.3.3.1
This commit is contained in:
commit
d063b49de3
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -8,7 +8,7 @@ forceRestartTime = 14400; // 4 hour restarts
|
||||
|
||||
// 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
|
||||
UseLootHelper = "false"; // GroundLoot will get a visible sphere for better loot identification
|
||||
|
||||
// Events
|
||||
WeatherChances[] = {
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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|paintvehicle|spawnLoot) \[.+\]"
|
||||
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|zedspawner) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]" !="epoch_server_(setfinalplayerpos|defusebomb|putcrypto|paintvehicle|spawnLoot) \[.+\]"
|
||||
|
@ -1 +1 @@
|
||||
5 ""
|
||||
5 "" !"0.700000"
|
1
Sources/Epoch_server_RyanZ_Spawner/$PREFIX$
Normal file
1
Sources/Epoch_server_RyanZ_Spawner/$PREFIX$
Normal file
@ -0,0 +1 @@
|
||||
Epoch_RyanZ_Spawner
|
1
Sources/Epoch_server_RyanZ_Spawner/PboPrefix.txt
Normal file
1
Sources/Epoch_server_RyanZ_Spawner/PboPrefix.txt
Normal file
@ -0,0 +1 @@
|
||||
Epoch_RyanZ_Spawner
|
@ -0,0 +1,114 @@
|
||||
waituntil {uisleep 1; !isnil "Ryanzombiesdamage" && !isnil "Ryanzombieshealth" && !isnil "Ryanzombieslimit" && !isnil "RZ_fnc_zombie_attackHuman" && !isnil "RZ_CrawlerAggressiveArray"};
|
||||
uisleep 15;
|
||||
|
||||
params [
|
||||
["_Ryanzombiesdamage",0.018],
|
||||
["_Ryanzombieshealth",0.95],
|
||||
["_ryanzombiesinfectedchance",0],
|
||||
["_ryanzombiesinfectedrate",0],
|
||||
["_ryanzombiesinfectedsymptoms",0],
|
||||
["_ryanzombiesinfecteddeath",0],
|
||||
["_ryanzombiesantivirusduration",0],
|
||||
["_NoZedAreas",[]],
|
||||
["_MaxOverallZeds",50],
|
||||
["_BlackListedVehicles",["SHIP","AIR"]],
|
||||
["_ZedSpawnArr",
|
||||
[
|
||||
[0,15,0,2,3],
|
||||
[2,15,1,2,4],
|
||||
[4,20,1,3,5],
|
||||
[6,20,2,4,6],
|
||||
[8,25,2,4,7],
|
||||
[10,25,3,5,8],
|
||||
[15,30,3,6,10],
|
||||
[20,30,4,7,10],
|
||||
[25,35,5,7,15]
|
||||
]
|
||||
],
|
||||
["_ZedCheckTimer",50]
|
||||
];
|
||||
|
||||
|
||||
Ryanzombiesdamage = _Ryanzombiesdamage;
|
||||
Ryanzombieshealth = _Ryanzombieshealth;
|
||||
ryanzombiesinfectedchance = _ryanzombiesinfectedchance;
|
||||
ryanzombiesinfectedrate = _ryanzombiesinfectedrate;
|
||||
ryanzombiesinfectedsymptoms = _ryanzombiesinfectedsymptoms;
|
||||
ryanzombiesinfecteddeath = _ryanzombiesinfecteddeath;
|
||||
ryanzombiesantivirusduration = _ryanzombiesantivirusduration;
|
||||
NoZedAreas = _NoZedAreas;
|
||||
MaxOverallZeds = _MaxOverallZeds;
|
||||
BlackListedVehicles = _BlackListedVehicles;
|
||||
ZedSpawnArr = _ZedSpawnArr;
|
||||
|
||||
ryanzombiesglow = nil; // Do not change it here! Just in the config!
|
||||
ryanzombiesglowdemondisable = false;
|
||||
|
||||
RZ_CrawlerAggressiveArray = RZ_NormalZombieAggressiveArray;
|
||||
|
||||
Epoch_ZedAttack = {
|
||||
_soundEffectFinal = "A3\sounds_f\weapons\silenced\silent-23.wss";
|
||||
_unit = player;
|
||||
_soundEffectRange = 0;
|
||||
playSound3D [_soundEffectFinal, _unit, false, getPosASL _unit, 1, 1, _soundEffectRange];
|
||||
addCamShake [3,0.5,30];
|
||||
player setdamage (damage player + Ryanzombiesdamage);
|
||||
};
|
||||
|
||||
reverse ZedSpawnArr;
|
||||
_ZedSpawnCheckTime = diag_ticktime;
|
||||
_ZedSpawnCheck = {
|
||||
params [["_target",objnull]];
|
||||
_output = [];
|
||||
if (!isnull _target && alive _target) then {
|
||||
if (isobjecthidden _target) exitwith {};
|
||||
if ({vehicle _target iskindof _x} count BlackListedVehicles > 0) exitwith {};
|
||||
if (speed (vehicle _target) > 25) exitwith {};
|
||||
if ({_x distance2d _target < 150} count (missionnamespace getvariable ["Epoch_Plotpoles",[]]) > 0) exitwith {};
|
||||
if ({_x distance2d _target < 300} count NoZedAreas > 0) exitwith {};
|
||||
_OverallZeds = (entities [["EPOCH_RyanZombie_1","RyanZombieCivilian_F"],[],true,false]);
|
||||
_AliveZeds = _OverallZeds select {alive _x};
|
||||
if ((count _AliveZeds) <= MaxOverallZeds) then {
|
||||
_NearHouses = (_target nearObjects ["house", 100]) select {!((_x buildingPos -1) isEqualTo [])};
|
||||
_housecount = count _NearHouses;
|
||||
_spawnArray = [0,0,0,0,0];
|
||||
{
|
||||
_x params ["_HousesInRange"];
|
||||
if (_housecount >= _HousesInRange) exitwith {
|
||||
_spawnArray = _x;
|
||||
};
|
||||
} foreach ZedSpawnArr;
|
||||
_spawnArray params ["_HousesInRange","_SpawnChance","_MinSpawn","_MaxSpawn","_maxZedsInRange"];
|
||||
_Spawncount = _MinSpawn + (round (random (_MaxSpawn - _MinSpawn)));
|
||||
if (_SpawnChance > (random 100)) then {
|
||||
_nearplayer = count ((_target nearEntities 100) select {isplayer _x});
|
||||
_Spawncount = round (_Spawncount / _nearplayer);
|
||||
if (_Spawncount > 0) then {
|
||||
_NearZeds = count (_OverallZeds select {_target distance _x < 200});
|
||||
if (_NearZeds < _maxZedsInRange) then {
|
||||
_pos = [_target, 50, 100, 1, 0, 50, 0] call BIS_fnc_findSafePos;
|
||||
if (count _pos == 2) then {
|
||||
_Spawncount = (_Spawncount min (_maxZedsInRange - _NearZeds) min (MaxOverallZeds - (count _OverallZeds)));
|
||||
_output = [_target,_Spawncount,_pos,_NearHouses];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
_output
|
||||
};
|
||||
|
||||
|
||||
if (!isserver && hasinterface) exitwith {
|
||||
while {true} do {
|
||||
if (diag_ticktime > _ZedSpawnCheckTime) then {
|
||||
_output = [player] call _ZedSpawnCheck;
|
||||
if !(_output isEqualto []) then {
|
||||
[_output] remoteexec ["Epoch_ZedSpawner",2];
|
||||
};
|
||||
_ZedSpawnCheckTime = diag_ticktime + _ZedCheckTimer;
|
||||
};
|
||||
uisleep 0.5;
|
||||
};
|
||||
};
|
@ -0,0 +1,93 @@
|
||||
class Epoch_ZedSpawner {
|
||||
Ryanzombiesdamage = 0.018; // How much damage should one hit by a Zombie do on a Player - default = 0.1
|
||||
Ryanzombieshealth = 0.95; // Health (Damage) of Zombies on Spawn - Make them easy to kill -> 0.9
|
||||
ryanzombiesinfectedchance = 0; // Not used here - Default = 50
|
||||
ryanzombiesinfectedrate = 0; // Not used here - Default = 0.1
|
||||
ryanzombiesinfectedsymptoms = 0; // Not used here - Default = 1
|
||||
ryanzombiesinfecteddeath = 0; // Not used here - Default = 1
|
||||
ryanzombiesantivirusduration = 0; // Not used here - Default = 300
|
||||
ryanzombiesglow = 1; // Enable / Disable Glowing Eyes for Zombies
|
||||
Ryanzombieslimit = 200; // Internal check distance for RyanScripts (to engage with Players). Reduced for performance - default = 5000
|
||||
|
||||
NoZedAreas[] = { // Array of coords, where no Zeds can Spawn
|
||||
|
||||
};
|
||||
MaxOverallZeds = 50; // Limit for Overall Zeds on the Map
|
||||
DeleteDistance = 200; // If no Player is within x meters, the Zed will get deleted
|
||||
StuckOrDeadCheckTime = 180; // Stucked or Dead Zeds will be deleted after about x seconds
|
||||
|
||||
BlackListedVehicles[] = { // Players inside these VehicleTypes will not spawn any Zeds. Can be ["Landvehicle","SHIP","AIR","TANK"]
|
||||
"SHIP",
|
||||
"AIR"
|
||||
};
|
||||
ZedCheckTimer = 50; // Timer, how often the script should check for a ZombieSpawn
|
||||
ZedSpawnArr[] = {
|
||||
// [HousesInRange, SpawnChance, MinSpawn, MaxSpawn, MaxZedsInRange]
|
||||
{0, 15, 0, 2, 3 },
|
||||
{2, 15, 1, 2, 4 },
|
||||
{4, 20, 1, 3, 5 },
|
||||
{6, 20, 2, 4, 6 },
|
||||
{8, 25, 2, 4, 7 },
|
||||
{10, 25, 3, 5, 8 },
|
||||
{15, 30, 3, 6, 10 },
|
||||
{20, 30, 4, 7, 10 },
|
||||
{25, 35, 5, 7, 15 }
|
||||
};
|
||||
ZedClasses[] = {
|
||||
// Fast RyanZ CIV
|
||||
/*
|
||||
"RyanZombieC_man_1","RyanZombieC_man_polo_1_F","RyanZombieC_man_polo_2_F","RyanZombieC_man_polo_4_F","RyanZombieC_man_polo_5_F","RyanZombieC_man_polo_6_F","RyanZombieC_man_p_fugitive_F","RyanZombieC_man_w_worker_F",
|
||||
"RyanZombieC_scientist_F","RyanZombieC_man_hunter_1_F","RyanZombieC_man_pilot_F","RyanZombieC_journalist_F","RyanZombieC_Orestes","RyanZombieC_Nikos","RyanZombie15","RyanZombie16","RyanZombie17","RyanZombie18",
|
||||
"RyanZombie19","RyanZombie20","RyanZombie21","RyanZombie22","RyanZombie23","RyanZombie24","RyanZombie25","RyanZombie26","RyanZombie27","RyanZombie28","RyanZombie29","RyanZombie30","RyanZombie31","RyanZombie32",
|
||||
*/
|
||||
|
||||
// Mid RyanZ CIV
|
||||
/*
|
||||
"RyanZombieC_man_1medium","RyanZombieC_man_polo_1_Fmedium","RyanZombieC_man_polo_2_Fmedium","RyanZombieC_man_polo_4_Fmedium","RyanZombieC_man_polo_5_Fmedium","RyanZombieC_man_polo_6_Fmedium","RyanZombieC_man_p_fugitive_Fmedium",
|
||||
"RyanZombieC_man_w_worker_Fmedium","RyanZombieC_scientist_Fmedium","RyanZombieC_man_hunter_1_Fmedium","RyanZombieC_man_pilot_Fmedium","RyanZombieC_journalist_Fmedium","RyanZombieC_Orestesmedium","RyanZombieC_Nikosmedium",
|
||||
"RyanZombie15medium","RyanZombie16medium","RyanZombie17medium","RyanZombie18medium","RyanZombie19medium","RyanZombie20medium","RyanZombie21medium","RyanZombie22medium","RyanZombie23medium","RyanZombie24medium",
|
||||
"RyanZombie25medium","RyanZombie26medium","RyanZombie27medium","RyanZombie28medium","RyanZombie29medium","RyanZombie30medium","RyanZombie31medium","RyanZombie32medium",
|
||||
*/
|
||||
|
||||
// Slow RyanZ CIV
|
||||
"RyanZombieC_man_1slow","RyanZombieC_man_polo_1_Fslow","RyanZombieC_man_polo_2_Fslow","RyanZombieC_man_polo_4_Fslow","RyanZombieC_man_polo_5_Fslow","RyanZombieC_man_polo_6_Fslow","RyanZombieC_man_p_fugitive_Fslow",
|
||||
"RyanZombieC_man_w_worker_Fslow","RyanZombieC_scientist_Fslow","RyanZombieC_man_hunter_1_Fslow","RyanZombieC_man_pilot_Fslow","RyanZombieC_journalist_Fslow","RyanZombieC_Orestesslow","RyanZombieC_Nikosslow",
|
||||
"RyanZombie15slow","RyanZombie16slow","RyanZombie17slow","RyanZombie18slow","RyanZombie19slow","RyanZombie20slow","RyanZombie21slow","RyanZombie22slow","RyanZombie23slow","RyanZombie24slow",
|
||||
"RyanZombie25slow","RyanZombie26slow","RyanZombie27slow","RyanZombie28slow","RyanZombie29slow","RyanZombie30slow","RyanZombie31slow","RyanZombie32slow",
|
||||
|
||||
// Walker RyanZ CIV
|
||||
"RyanZombieC_man_1Walker","RyanZombieC_man_polo_1_FWalker","RyanZombieC_man_polo_2_FWalker","RyanZombieC_man_polo_4_FWalker","RyanZombieC_man_polo_5_FWalker","RyanZombieC_man_polo_6_FWalker",
|
||||
"RyanZombieC_man_p_fugitive_FWalker","RyanZombieC_man_w_worker_FWalker","RyanZombieC_scientist_FWalker","RyanZombieC_man_hunter_1_FWalker","RyanZombieC_man_pilot_FWalker","RyanZombieC_journalist_FWalker",
|
||||
"RyanZombieC_OrestesWalker","RyanZombieC_NikosWalker","RyanZombie15walker","RyanZombie16walker","RyanZombie17walker","RyanZombie18walker","RyanZombie19walker","RyanZombie20walker","RyanZombie21walker",
|
||||
"RyanZombie22walker","RyanZombie23walker","RyanZombie24walker","RyanZombie25walker","RyanZombie26walker","RyanZombie27walker","RyanZombie28walker","RyanZombie29walker","RyanZombie30walker","RyanZombie31walker",
|
||||
"RyanZombie32walker",
|
||||
|
||||
// Spider RyanZ CIV
|
||||
"RyanZombieSpider1","RyanZombieSpider2","RyanZombieSpider3","RyanZombieSpider4","RyanZombieSpider5","RyanZombieSpider6","RyanZombieSpider7","RyanZombieSpider8","RyanZombieSpider9","RyanZombieSpider10",
|
||||
"RyanZombieSpider11","RyanZombieSpider12","RyanZombieSpider13","RyanZombieSpider14","RyanZombieSpider15","RyanZombieSpider16","RyanZombieSpider17","RyanZombieSpider18","RyanZombieSpider19","RyanZombieSpider20",
|
||||
"RyanZombieSpider21","RyanZombieSpider22","RyanZombieSpider23","RyanZombieSpider24","RyanZombieSpider25","RyanZombieSpider26","RyanZombieSpider27","RyanZombieSpider28","RyanZombieSpider29","RyanZombieSpider30",
|
||||
"RyanZombieSpider31","RyanZombieSpider32",
|
||||
|
||||
// Crawler RyanZ CIV
|
||||
"RyanZombieCrawler1","RyanZombieCrawler2","RyanZombieCrawler3","RyanZombieCrawler4","RyanZombieCrawler5","RyanZombieCrawler6","RyanZombieCrawler7","RyanZombieCrawler8","RyanZombieCrawler9","RyanZombieCrawler10",
|
||||
"RyanZombieCrawler11","RyanZombieCrawler12","RyanZombieCrawler13","RyanZombieCrawler14","RyanZombieCrawler15","RyanZombieCrawler16","RyanZombieCrawler17","RyanZombieCrawler18","RyanZombieCrawler19","RyanZombieCrawler20",
|
||||
"RyanZombieCrawler21","RyanZombieCrawler22","RyanZombieCrawler23","RyanZombieCrawler24","RyanZombieCrawler25","RyanZombieCrawler26","RyanZombieCrawler27","RyanZombieCrawler28","RyanZombieCrawler29","RyanZombieCrawler30",
|
||||
"RyanZombieCrawler31","RyanZombieCrawler32",
|
||||
|
||||
// Epoch RyanZ
|
||||
/*
|
||||
"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5",
|
||||
"EPOCH_RyanZombie_1_C","EPOCH_RyanZombie_2_C","EPOCH_RyanZombie_3_C","EPOCH_RyanZombie_4_C","EPOCH_RyanZombie_5_C",
|
||||
"EPOCH_RyanZombie_1_Sp","EPOCH_RyanZombie_2_Sp","EPOCH_RyanZombie_3_Sp","EPOCH_RyanZombie_4_Sp","EPOCH_RyanZombie_5_Sp",
|
||||
"EPOCH_RyanZombie_1_B","EPOCH_RyanZombie_2_B","EPOCH_RyanZombie_3_B","EPOCH_RyanZombie_4_B","EPOCH_RyanZombie_5_B",
|
||||
"EPOCH_RyanZombie_1_W","EPOCH_RyanZombie_2_W","EPOCH_RyanZombie_3_W","EPOCH_RyanZombie_4_W","EPOCH_RyanZombie_5_W",
|
||||
"EPOCH_RyanZombie_1_S","EPOCH_RyanZombie_2_S","EPOCH_RyanZombie_3_S","EPOCH_RyanZombie_4_S","EPOCH_RyanZombie_5_S",
|
||||
"EPOCH_RyanZombie_1_M","EPOCH_RyanZombie_2_M","EPOCH_RyanZombie_3_M","EPOCH_RyanZombie_4_M","EPOCH_RyanZombie_5_M",
|
||||
"EPOCH_RyanZombie_1","EPOCH_RyanZombie_2","EPOCH_RyanZombie_3","EPOCH_RyanZombie_4","EPOCH_RyanZombie_5",
|
||||
"EPOCH_RyanZombie_1_C","EPOCH_RyanZombie_2_C","EPOCH_RyanZombie_3_C","EPOCH_RyanZombie_4_C","EPOCH_RyanZombie_5_C",
|
||||
"EPOCH_RyanZombie_1_Sp","EPOCH_RyanZombie_2_Sp","EPOCH_RyanZombie_3_Sp","EPOCH_RyanZombie_4_Sp","EPOCH_RyanZombie_5_Sp",
|
||||
"EPOCH_RyanZombie_1_W","EPOCH_RyanZombie_2_W","EPOCH_RyanZombie_3_W","EPOCH_RyanZombie_4_W","EPOCH_RyanZombie_5_W",
|
||||
"EPOCH_RyanZombie_1_S","EPOCH_RyanZombie_2_S","EPOCH_RyanZombie_3_S","EPOCH_RyanZombie_4_S","EPOCH_RyanZombie_5_S"
|
||||
*/
|
||||
};
|
||||
};
|
28
Sources/Epoch_server_RyanZ_Spawner/config.cpp
Normal file
28
Sources/Epoch_server_RyanZ_Spawner/config.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
class CfgPatches
|
||||
{
|
||||
class Epoch_RyanZ_Spawner
|
||||
{
|
||||
requiredVersion = 0.1;
|
||||
requiredAddons[] = {};
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
magazines[] = {};
|
||||
ammo[] = {};
|
||||
author[]= {"He-Man"};
|
||||
};
|
||||
};
|
||||
|
||||
class CfgFunctions
|
||||
{
|
||||
class Epoch_RyanZ_Spawner
|
||||
{
|
||||
class main {
|
||||
file = "Epoch_RyanZ_Spawner";
|
||||
class init {
|
||||
preInit = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#include "ZedSpawner\Epoch_ZombieSpawnConfig.hpp"
|
199
Sources/Epoch_server_RyanZ_Spawner/fn_init.sqf
Normal file
199
Sources/Epoch_server_RyanZ_Spawner/fn_init.sqf
Normal file
@ -0,0 +1,199 @@
|
||||
if !(isclass (configFile >> "CfgPatches" >> "Ryanzombies")) exitwith {
|
||||
diag_log "Epoch Debug: RyanZ Spawner skipped - RyanZombies seems to not run on this Server";
|
||||
};
|
||||
[] spawn {
|
||||
waituntil {uisleep 1; !isnil "Ryanzombiesdamage" && !isnil "Ryanzombieshealth" && !isnil "Ryanzombieslimit" && !isnil "RZ_fnc_zombie_attackHuman" && !isnil "RZ_CrawlerAggressiveArray"};
|
||||
uisleep 15;
|
||||
|
||||
RZ_fnc_zombie_attackHuman = {
|
||||
params ["_zombie","_target"];
|
||||
_dir = _zombie getDir _target;
|
||||
_zombie setdir _dir;
|
||||
[_zombie, "AwopPercMstpSgthWnonDnon_throw"] remoteExecCall ["fnc_RyanZombies_SwitchMove"];
|
||||
_attackSound = selectRandom ([_zombie,"attack"] call RZ_fnc_zombie_getZombieSoundArray);
|
||||
playsound3d [_attackSound, _zombie, false, getPosASL _zombie, 1, pitch _zombie];
|
||||
_target allowfleeing 1;
|
||||
sleep 0.3;
|
||||
_attackSpeed = [Ryanzombiesattackspeed,0.3] select (_zombie getVariable "RZ_isDemon");
|
||||
if ([_zombie,_target] call RZ_fnc_zombie_canAttackHuman) then {
|
||||
_hitSound = selectRandom ([_zombie,"hit"] call RZ_fnc_zombie_getZombieSoundArray);
|
||||
playsound3d [_hitSound, _target, false, getPosASL _target, 1, pitch _zombie];
|
||||
if (isnil "ryanzombiesdisablebleeding") then {
|
||||
[_target, 10] remoteExecCall ["fnc_RyanZombies_Bleeding"];
|
||||
};
|
||||
_scream = selectRandom RZ_HumanScreamArray;
|
||||
[_target, _scream] remoteExecCall ["say3d"];
|
||||
_vel = velocity _target;
|
||||
_dir = direction _zombie;
|
||||
_strength = _zombie call RZ_fnc_zombie_getHumanVelocityStrength;
|
||||
[_target, [(_vel select 0) + (sin _dir * _strength), (_vel select 1) + (cos _dir * _strength), (_vel select 2) + random 1]] remoteExecCall ["fnc_RyanZombies_Velocity"];
|
||||
[] remoteexec ['Epoch_ZedAttack',_target];
|
||||
};
|
||||
sleep _attackSpeed;
|
||||
};
|
||||
RZ_fnc_zombie_checkForNewTarget =
|
||||
{
|
||||
private _zombie = _this;
|
||||
private _civilians = [];
|
||||
if !(isnil "ryanzombiescivilianattacks") then
|
||||
{
|
||||
_civilians = nearestobjects [_zombie, ["Civilian"], 100 min Ryanzombieslimit];
|
||||
_civsToDelete = [];
|
||||
{
|
||||
if (!alive _x || _x getvariable ["ace_medical_inReviveState",false] || lifeState _x == "INCAPACITATED") then
|
||||
{
|
||||
_civsToDelete pushback _x;
|
||||
};
|
||||
} foreach _civilians;
|
||||
_civilians = _civilians - _civsToDelete;
|
||||
};
|
||||
|
||||
private _target = _zombie findNearestEnemy _zombie;
|
||||
if (count _civilians != 0) then
|
||||
{
|
||||
_civiliantarget = _civilians select 0;
|
||||
if (!isNull _target && ((_target distance _zombie) < (_civiliantarget distance _zombie))) exitwith {};
|
||||
if (_zombie knowsabout _civiliantarget > 0.5) then
|
||||
{
|
||||
_target = _civiliantarget;
|
||||
};
|
||||
};
|
||||
if(!isNull _target) then
|
||||
{
|
||||
if(_zombie distance _target > Ryanzombieslimit) exitWith { _target = objNull; };
|
||||
};
|
||||
_zombie setVariable ["RZ_Target",_target];
|
||||
_target
|
||||
};
|
||||
RZ_fnc_zombie_canAttackHuman =
|
||||
{
|
||||
params ["_zombie","_target"];
|
||||
if(!alive _zombie || !alive _target || _target getvariable ["ace_medical_inReviveState",false] || lifeState _target == "INCAPACITATED") exitWith { false };
|
||||
_maxAttackDistance = _zombie call RZ_fnc_zombie_maxAttackDistanceToHuman;
|
||||
((_zombie distance _target) < _maxAttackDistance && !(lineIntersects [eyepos _zombie, eyepos _target,_zombie,_target]))
|
||||
};
|
||||
MyZeds = [];
|
||||
Epoch_ZedSpawner = {
|
||||
params [["_output",[]]];
|
||||
if !(_output isequalto []) then {
|
||||
_output params ["_target","_Spawncount","_pos","_NearHouses"];
|
||||
_group = creategroup [RESISTANCE,true];
|
||||
for "_i" from 1 to _Spawncount do {
|
||||
_randomPos = [_pos,random 15,random 360] call BIS_fnc_relPos;
|
||||
_Zed = _group createUnit [selectrandom ZedClasses, _randomPos, [], 5, "NONE"];
|
||||
if (Epoch_ryanzombiesglow isEqualTo 1) then {
|
||||
_Zed setface (selectrandom RZ_FaceArray);
|
||||
};
|
||||
MyZeds pushback _Zed;
|
||||
uisleep 0.15;
|
||||
};
|
||||
_FirstWp = [_target, 10, 50, 1, 0, 50, 0] call BIS_fnc_findSafePos;
|
||||
if (count _FirstWp == 2) then {
|
||||
_FirstWp pushback 0;
|
||||
_wp = _group addwaypoint [_FirstWp,5];
|
||||
_wp setWaypointSpeed "LIMITED";
|
||||
{
|
||||
_x domove _FirstWp;
|
||||
} foreach (units _group);
|
||||
};
|
||||
_NearHouses = _NearHouses call Bis_fnc_ArrayShuffle;
|
||||
{
|
||||
if (!isnull _x) then {
|
||||
_wp = _group addwaypoint [_x,5];
|
||||
_wp setWaypointSpeed "LIMITED";
|
||||
};
|
||||
} foreach _NearHouses;
|
||||
if (count (waypoints _group) < 20) then {
|
||||
for "_1" from 1 to 20 do {
|
||||
_randomPos = [_pos,60,random 360] call BIS_fnc_relPos;
|
||||
_wp = _group addwaypoint [_randomPos,5];
|
||||
_wp setWaypointSpeed "LIMITED";
|
||||
};
|
||||
};
|
||||
_group setCurrentWaypoint [_group, 1];
|
||||
};
|
||||
};
|
||||
|
||||
[] spawn {
|
||||
_Ryanzombiesdamage = getnumber (configfile >> "Epoch_ZedSpawner" >> "Ryanzombiesdamage");
|
||||
_Ryanzombieshealth = getnumber (configfile >> "Epoch_ZedSpawner" >> "Ryanzombieshealth");
|
||||
_ryanzombiesinfectedchance = getnumber (configfile >> "Epoch_ZedSpawner" >> "ryanzombiesinfectedchance");
|
||||
_ryanzombiesinfectedrate = getnumber (configfile >> "Epoch_ZedSpawner" >> "ryanzombiesinfectedrate");
|
||||
_ryanzombiesinfectedsymptoms = getnumber (configfile >> "Epoch_ZedSpawner" >> "ryanzombiesinfectedsymptoms");
|
||||
_ryanzombiesinfecteddeath = getnumber (configfile >> "Epoch_ZedSpawner" >> "ryanzombiesinfecteddeath");
|
||||
_ryanzombiesantivirusduration = getnumber (configfile >> "Epoch_ZedSpawner" >> "ryanzombiesantivirusduration");
|
||||
_ryanzombiesglow = getnumber (configfile >> "Epoch_ZedSpawner" >> "ryanzombiesglow");
|
||||
_Ryanzombieslimit = getnumber (configfile >> "Epoch_ZedSpawner" >> "Ryanzombieslimit");
|
||||
_NoZedAreas = getarray (configfile >> "Epoch_ZedSpawner" >> "NoZedAreas");
|
||||
_MaxOverallZeds = getnumber (configfile >> "Epoch_ZedSpawner" >> "MaxOverallZeds");
|
||||
_DeleteDistance = getnumber (configfile >> "Epoch_ZedSpawner" >> "DeleteDistance");
|
||||
_StuckOrDeadCheckTime = getnumber (configfile >> "Epoch_ZedSpawner" >> "StuckOrDeadCheckTime");
|
||||
_BlackListedVehicles = getarray (configfile >> "Epoch_ZedSpawner" >> "BlackListedVehicles");
|
||||
_ZedSpawnArr = getarray (configfile >> "Epoch_ZedSpawner" >> "ZedSpawnArr");
|
||||
_ZedClasses = getarray (configfile >> "Epoch_ZedSpawner" >> "ZedClasses");
|
||||
_ZedCheckTimer = getnumber (configfile >> "Epoch_ZedSpawner" >> "ZedCheckTimer");
|
||||
|
||||
_params = [
|
||||
_Ryanzombiesdamage,
|
||||
_Ryanzombieshealth,
|
||||
_ryanzombiesinfectedchance,
|
||||
_ryanzombiesinfectedrate,
|
||||
_ryanzombiesinfectedsymptoms,
|
||||
_ryanzombiesinfecteddeath,
|
||||
_ryanzombiesantivirusduration,
|
||||
_NoZedAreas,
|
||||
_MaxOverallZeds,
|
||||
_BlackListedVehicles,
|
||||
_ZedSpawnArr,
|
||||
_ZedCheckTimer
|
||||
];
|
||||
Epoch_ryanzombiesglow = _ryanzombiesglow;
|
||||
Ryanzombieslimit = _Ryanzombieslimit;
|
||||
ZedClasses = _ZedClasses;
|
||||
RZ_FaceArray = ["RyanZombieFace1_Glowing","RyanZombieFace2_Glowing","RyanZombieFace3_Glowing","RyanZombieFace4_Glowing","RyanZombieFace5_Glowing","RyanZombieFace6_Glowing"];
|
||||
|
||||
_ZombieSpawn = compilefinal preprocessfilelinenumbers "Epoch_RyanZ_Spawner\ZedSpawner\Epoch_ZombieSpawn.sqf";
|
||||
[_params,_ZombieSpawn] remoteExec ["BIS_fnc_spawn", -2, "Epoch_ZedSpawner"];
|
||||
[] spawn _ZombieSpawn;
|
||||
|
||||
_ZedCleanup = {
|
||||
params [["_target",objnull]];
|
||||
if !(MyZeds isEqualto []) then {
|
||||
_Zed = MyZeds deleteat 0;
|
||||
_del = (_Zed nearEntities _DeleteDistance) select {isplayer _x} isEqualto [];
|
||||
if !(_del) then {
|
||||
_Checktime = _Zed getvariable ["Epoch_RyanZ_StuckCheck",0];
|
||||
if (diag_ticktime > _Checktime) then {
|
||||
_LastPos = _Zed getvariable ["Epoch_RyanZ_LastPos",[0,0,0]];
|
||||
if ((getposATL _Zed) distance _lastpos < 2) exitwith {
|
||||
_del = true;
|
||||
};
|
||||
_Zed setvariable ["Epoch_RyanZ_StuckCheck",diag_ticktime + _StuckOrDeadCheckTime];
|
||||
};
|
||||
if (_del) exitwith {};
|
||||
{
|
||||
if (_Zed distance2d _x < 150) exitwith {
|
||||
_del = true;
|
||||
};
|
||||
} foreach (missionnamespace getvariable ["Epoch_PlotPoles",[]]);
|
||||
_Zed setvariable ["Epoch_RyanZ_LastPos",getposATL _Zed];
|
||||
};
|
||||
if (_del) then {
|
||||
deletevehicle _Zed;
|
||||
}
|
||||
else {
|
||||
MyZeds pushback _Zed;
|
||||
};
|
||||
};
|
||||
};
|
||||
_run2sec = diag_ticktime;
|
||||
while {true} do {
|
||||
if (diag_ticktime > _run2sec) then {
|
||||
[objnull] call _ZedCleanup;
|
||||
_run2sec = diag_ticktime + 2;
|
||||
};
|
||||
uisleep 0.5;
|
||||
};
|
||||
};
|
||||
diag_log "Epoch Debug: RyanZ Spawner Started";
|
||||
};
|
@ -25,6 +25,7 @@ if ((diag_tickTime - EPOCH_lastMineRocks) >= 2) then {
|
||||
};
|
||||
|
||||
_objects = lineIntersectsWith[eyePos player, _currentPos, player, objNull, true];
|
||||
reverse _objects;
|
||||
_object = objNull;
|
||||
|
||||
_found = false;
|
||||
|
@ -18,10 +18,7 @@ private ["_Ignatz_SP_Array","_AmmoConfig","_VehiclesWithAmmo","_VehicleAmmo","_a
|
||||
//[[[end]]]
|
||||
Ignatz_Refuel = nil;
|
||||
Ignatz_Repair = nil;
|
||||
Ignatz_Rearm0 = nil;
|
||||
Ignatz_Rearm1 = nil;
|
||||
Ignatz_Rearm2 = nil;
|
||||
Ignatz_Rearm3 = nil;
|
||||
Ignatz_Rearm = [];
|
||||
|
||||
params ["_myturret"];
|
||||
|
||||
@ -106,8 +103,5 @@ if (player == driver _vehicle) then {
|
||||
_actionTitle = [format['Repair %1',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName')], _costs] call _fnc_actionTitle;
|
||||
Ignatz_Repair = [_actionTitle,[_vehicle,[_costs, _repairTime]]];
|
||||
};
|
||||
if (count _Ignatz_SP_Array > 0) then {Ignatz_Rearm0 = _Ignatz_SP_Array select 0;};
|
||||
if (count _Ignatz_SP_Array > 1) then {Ignatz_Rearm1 = _Ignatz_SP_Array select 1;};
|
||||
if (count _Ignatz_SP_Array > 2) then {Ignatz_Rearm2 = _Ignatz_SP_Array select 2;};
|
||||
if (count _Ignatz_SP_Array > 3) then {Ignatz_Rearm3 = _Ignatz_SP_Array select 3;};
|
||||
Ignatz_Rearm = _Ignatz_SP_Array;
|
||||
true
|
||||
|
@ -24,15 +24,38 @@ _PlayerItemsBox = 41500;
|
||||
_PlayerItemsOutBox = 41501;
|
||||
_TraderItemsBox = 41503;
|
||||
_TraderItemsOutBox = 41502;
|
||||
_isPlayerFilter = (ctrlIDC _control == _PlayerFilerDropDown);
|
||||
_LbText = _control lbText _index;
|
||||
|
||||
_config = 'CfgItemSort' call EPOCH_returnConfig;
|
||||
_MainCategoriearray = getarray (_config >> "MainCategories" >> "Classes");
|
||||
_FilterArray = [];
|
||||
if (_index != 0) then {
|
||||
if !((tolower _LbText) isEqualTo "all") then {
|
||||
if (!_isPlayerFilter && _LbText in
|
||||
[
|
||||
format ["Fits your %1",(primaryweapon player) call EPOCH_itemDisplayName],
|
||||
format ["Fits your %1",(secondaryweapon player) call EPOCH_itemDisplayName],
|
||||
format ["Fits your %1",(handgunweapon player) call EPOCH_itemDisplayName]
|
||||
]
|
||||
) exitwith {
|
||||
_CheckWpnClass = switch _LbText do {
|
||||
case (format ["Fits your %1",(primaryweapon player) call EPOCH_itemDisplayName]) : {primaryweapon player};
|
||||
case (format ["Fits your %1",(secondaryweapon player) call EPOCH_itemDisplayName]) : {secondaryweapon player};
|
||||
case (format ["Fits your %1",(handgunweapon player) call EPOCH_itemDisplayName]) : {handgunweapon player};
|
||||
};
|
||||
_possiblemags = getarray (configfile >> "CfgWeapons" >> _CheckWpnClass >> "magazines");
|
||||
_possibleMuzzles = getarray (configfile >> "CfgWeapons" >> _CheckWpnClass >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems");
|
||||
_possibleScopes = getarray (configfile >> "CfgWeapons" >> _CheckWpnClass >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems");
|
||||
_possiblePointers = getarray (configfile >> "CfgWeapons" >> _CheckWpnClass >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems");
|
||||
_possibleUnderBarrel = getarray (configfile >> "CfgWeapons" >> _CheckWpnClass >> "WeaponSlotsInfo" >> "UnderBarrelSlot" >> "compatibleItems");
|
||||
{
|
||||
_FilterArray pushback (tolower _x);
|
||||
} foreach (_possiblemags + _possibleMuzzles + _possibleScopes + _possiblePointers + _possibleUnderBarrel);
|
||||
};
|
||||
{
|
||||
_MainCategorie = _x;
|
||||
if (_index == (_MainCategorie select 0)) then {
|
||||
_subcategories = _MainCategorie select 2;
|
||||
_MainCategorie params ["_category","_subcategories"];
|
||||
if (_LbText isEqualTo _category) then {
|
||||
{
|
||||
_SubCategorieItems = getArray (_config >> "SubCatergories" >> _x);
|
||||
{
|
||||
@ -45,7 +68,6 @@ if (_index != 0) then {
|
||||
if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
_slot = EPOCH_lastNPCtradeTarget getVariable["AI_SLOT", -1];
|
||||
if (_slot != -1) then {
|
||||
_isPlayerFilter = (ctrlIDC _control == _PlayerFilerDropDown);
|
||||
if (_isPlayerFilter) then {
|
||||
lbClear _PlayerItemsBox;
|
||||
{
|
||||
@ -71,7 +93,7 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
if (_qty < 1) then {
|
||||
_tooltip = format ["%1 rounds left in Magazine",_rounds];
|
||||
};
|
||||
if (_index == 0 || (tolower _item) in _FilterArray) then {
|
||||
if ((tolower _LbText) isEqualTo "all" || (tolower _item) in _FilterArray) then {
|
||||
_id = lbAdd [_PlayerItemsBox, (_item call EPOCH_itemDisplayName) + (if (_onHand) then {" (in Hand)"} else {""})];
|
||||
lbSetData [_PlayerItemsBox, _id, _item];
|
||||
lbSetValue [_PlayerItemsBox, _id, _rounds];
|
||||
@ -102,7 +124,7 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
{
|
||||
if (local _x) then {
|
||||
_type = typeOf _x;
|
||||
if (_index == 0 || (tolower _type) in _FilterArray) then {
|
||||
if ((tolower _LbText) isEqualTo "all" || (tolower _type) in _FilterArray) then {
|
||||
_itemCount = { typeOf _x == _type } count _vehicles;
|
||||
_itemOfferCount = { _x == _type } count _VehOfferArray;
|
||||
if (_itemCount > _itemOfferCount) then {
|
||||
@ -133,7 +155,7 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
{
|
||||
_x params ["_displayname","_item","_rounds"];
|
||||
if !(_item isequalto "") then {
|
||||
if (_index == 0 || (tolower _item) in _FilterArray) then {
|
||||
if ((tolower _LbText) isEqualTo "all" || (tolower _item) in _FilterArray) then {
|
||||
_maxrnd = 1;
|
||||
_tooltip = "";
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
|
@ -120,11 +120,24 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
_CurControl lbDelete _id;
|
||||
_cryptoCount = 0;
|
||||
_sizeOut = lbSize _PlayerItemsOutBox;
|
||||
|
||||
_BlackMarketPurchaseMulti = ["CfgBlackMarket", "BlackMarketPurchaseMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketSellMulti = ["CfgBlackMarket", "BlackMarketSellMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_Blackmarket_SpecialPrices = ["CfgBlackMarket", "Blackmarket_SpecialPrices", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
|
||||
if (_sizeOut > 0) then {
|
||||
for "_i" from 0 to (_sizeOut - 1) do {
|
||||
_item = lbData [_PlayerItemsOutBox, _i];
|
||||
_rounds = lbValue [_PlayerItemsOutBox, _i];
|
||||
_worth = getNumber (_config >> _item >> "price");
|
||||
if (EPOCH_lastNPCtradeTarget getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_worth = _worth * _BlackMarketSellMulti;
|
||||
{
|
||||
if (_item isEqualTo (_x select 0)) exitwith {
|
||||
_worth = _x select 1;
|
||||
};
|
||||
} foreach _Blackmarket_SpecialPrices;
|
||||
};
|
||||
_maxrnd = 1;
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
|
||||
@ -144,6 +157,14 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
_itemTax = getNumber (_config >> _item >> "tax");
|
||||
_tax = _worth * (EPOCH_taxRate + _itemTax);
|
||||
_worth = ceil(_worth + _tax);
|
||||
if (EPOCH_lastNPCtradeTarget getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_worth = _worth * _BlackMarketPurchaseMulti;
|
||||
{
|
||||
if (_item isEqualTo (_x select 0)) exitwith {
|
||||
_worth = _x select 2;
|
||||
};
|
||||
} foreach _Blackmarket_SpecialPrices;
|
||||
};
|
||||
_maxrnd = 1;
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
|
||||
|
@ -67,6 +67,10 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
};
|
||||
};
|
||||
if (_allowAdd) then {
|
||||
_BlackMarketPurchaseMulti = ["CfgBlackMarket", "BlackMarketPurchaseMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketSellMulti = ["CfgBlackMarket", "BlackMarketSellMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_Blackmarket_SpecialPrices = ["CfgBlackMarket", "Blackmarket_SpecialPrices", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
|
||||
_maxrnd = 1;
|
||||
if ([_uiItem,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _uiItem >> "count");
|
||||
@ -138,6 +142,14 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
|
||||
_itemTax = getNumber (_config >> _item >> "tax");
|
||||
_tax = _worth * (EPOCH_taxRate + _itemTax);
|
||||
_worth = ceil(_worth + _tax);
|
||||
if (EPOCH_lastNPCtradeTarget getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_worth = _worth * _BlackMarketPurchaseMulti;
|
||||
{
|
||||
if (_item isEqualTo (_x select 0)) exitwith {
|
||||
_worth = _x select 2;
|
||||
};
|
||||
} foreach _Blackmarket_SpecialPrices;
|
||||
};
|
||||
_maxrnd = 1;
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
|
||||
|
@ -53,6 +53,9 @@ if (isClass (_config >> _uiItem)) then {
|
||||
_cryptoCount = 0;
|
||||
_sizeOut = lbSize _TraderItemsOutBox;
|
||||
if (_sizeOut > 0) then {
|
||||
_BlackMarketPurchaseMulti = ["CfgBlackMarket", "BlackMarketPurchaseMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketSellMulti = ["CfgBlackMarket", "BlackMarketSellMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_Blackmarket_SpecialPrices = ["CfgBlackMarket", "Blackmarket_SpecialPrices", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
for "_i" from 0 to (_sizeOut - 1) do {
|
||||
_item = lbData [_TraderItemsOutBox, _i];
|
||||
_rounds = lbValue [_TraderItemsOutBox, _i];
|
||||
@ -60,6 +63,14 @@ if (isClass (_config >> _uiItem)) then {
|
||||
_itemTax = getNumber (_config >> _item >> "tax");
|
||||
_tax = _worth * (EPOCH_taxRate + _itemTax);
|
||||
_worth = ceil (_worth + _tax);
|
||||
if (EPOCH_lastNPCtradeTarget getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_worth = _worth * _BlackMarketPurchaseMulti;
|
||||
{
|
||||
if (_item isEqualTo (_x select 0)) exitwith {
|
||||
_worth = _x select 2;
|
||||
};
|
||||
} foreach _Blackmarket_SpecialPrices;
|
||||
};
|
||||
_maxrnd = 1;
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
|
||||
|
@ -13,7 +13,7 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_startNPCTraderMenu.sqf
|
||||
*/
|
||||
|
||||
private ["_config","_MainCategoriearray","_target","_slot","_index","_ok","_categorie"];
|
||||
private ["_config","_MainCategoriearray","_target","_slot","_index","_ok","_categorie","_idx"];
|
||||
_config = 'CfgItemSort' call EPOCH_returnConfig;
|
||||
_MainCategoriearray = getarray (_config >> "MainCategories" >> "Classes");
|
||||
_target = cursorTarget;
|
||||
@ -46,12 +46,28 @@ if (alive _target) then {
|
||||
if (!_ok) exitWith {};
|
||||
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
|
||||
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
|
||||
_idx = 0;
|
||||
if !(primaryweapon player isEqualTo "") then {
|
||||
lbAdd [42101,format ["Fits your %1",(primaryweapon player) call EPOCH_itemDisplayName]];
|
||||
lbSetColor [42101, _idx, [1, 1, 0, 1]];
|
||||
_idx = _idx + 1;
|
||||
};
|
||||
if !(secondaryweapon player isEqualTo "") then {
|
||||
lbAdd [42101,format ["Fits your %1",(secondaryweapon player) call EPOCH_itemDisplayName]];
|
||||
lbSetColor [42101, _idx, [1, 1, 0, 1]];
|
||||
_idx = _idx + 1;
|
||||
};
|
||||
if !(handgunweapon player isEqualTo "") then {
|
||||
lbAdd [42101,format ["Fits your %1",(handgunweapon player) call EPOCH_itemDisplayName]];
|
||||
lbSetColor [42101, _idx, [1, 1, 0, 1]];
|
||||
_idx = _idx + 1;
|
||||
};
|
||||
{
|
||||
_categorie = _x select 1;
|
||||
_categorie = _x select 0;
|
||||
lbAdd [42100,_categorie];
|
||||
lbAdd [42101,_categorie]
|
||||
lbAdd [42101,_categorie];
|
||||
} forEach _MainCategoriearray;
|
||||
lbSetCurSel [42100, 0];
|
||||
lbSetCurSel [42101, 0];
|
||||
lbSetCurSel [42101, _idx];
|
||||
};
|
||||
};
|
||||
|
@ -150,24 +150,45 @@ class ServicePoint
|
||||
};
|
||||
class Rearm0
|
||||
{
|
||||
condition = "!isnil 'Ignatz_Rearm0'";
|
||||
action = "(Ignatz_Rearm0 select 1) call EPOCH_SP_Rearm";
|
||||
condition = "count Ignatz_Rearm > 0";
|
||||
action = "(Ignatz_Rearm select 0 select 1) call EPOCH_SP_Rearm";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa";
|
||||
tooltipcode = "Ignatz_Rearm0 select 0";
|
||||
tooltipcode = "Ignatz_Rearm select 0 select 0";
|
||||
};
|
||||
class Rearm1
|
||||
{
|
||||
condition = "!isnil 'Ignatz_Rearm1'";
|
||||
action = "(Ignatz_Rearm1 select 1) call EPOCH_SP_Rearm";
|
||||
condition = "count Ignatz_Rearm > 1";
|
||||
action = "(Ignatz_Rearm select 1 select 1) call EPOCH_SP_Rearm";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa";
|
||||
tooltipcode = "Ignatz_Rearm1 select 0";
|
||||
tooltipcode = "Ignatz_Rearm select 1 select 0";
|
||||
};
|
||||
class Rearm2
|
||||
{
|
||||
condition = "!isnil 'Ignatz_Rearm2'";
|
||||
action = "(Ignatz_Rearm2 select 1) call EPOCH_SP_Rearm";
|
||||
condition = "count Ignatz_Rearm > 2";
|
||||
action = "(Ignatz_Rearm select 2 select 1) call EPOCH_SP_Rearm";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa";
|
||||
tooltipcode = "Ignatz_Rearm2 select 0";
|
||||
tooltipcode = "Ignatz_Rearm select 2 select 0";
|
||||
};
|
||||
class Rearm3
|
||||
{
|
||||
condition = "count Ignatz_Rearm > 3";
|
||||
action = "(Ignatz_Rearm select 3 select 1) call EPOCH_SP_Rearm";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa";
|
||||
tooltipcode = "Ignatz_Rearm select 3 select 0";
|
||||
};
|
||||
class Rearm4
|
||||
{
|
||||
condition = "count Ignatz_Rearm > 4";
|
||||
action = "(Ignatz_Rearm select 4 select 1) call EPOCH_SP_Rearm";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa";
|
||||
tooltipcode = "Ignatz_Rearm select 4 select 0";
|
||||
};
|
||||
class Rearm5
|
||||
{
|
||||
condition = "count Ignatz_Rearm > 5";
|
||||
action = "(Ignatz_Rearm select 5 select 1) call EPOCH_SP_Rearm";
|
||||
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa";
|
||||
tooltipcode = "Ignatz_Rearm select 5 select 0";
|
||||
};
|
||||
};
|
||||
class veh_Rearm1
|
||||
|
27
Sources/epoch_config/Configs/CfgBlackMarket.hpp
Normal file
27
Sources/epoch_config/Configs/CfgBlackMarket.hpp
Normal file
@ -0,0 +1,27 @@
|
||||
class CfgBlackMarket
|
||||
{
|
||||
StaticBlackMarketIdx[] = {}; // Static Traders with this index (starts from 0) defined in epoch_server_settings\configs\maps\worldname -> staticNpcPos
|
||||
// will always get set to BlackMarkets
|
||||
// Example: {0,2} will set the 1st and 3rd defined static trader as a BlackMarket
|
||||
|
||||
BlackMarketTraderCount[] = {1,2}; // {min,max} Random Traders will be set to BlackMarkets (change every Restart)
|
||||
ShowBlackMarketTraders = "true"; // Show Marker for Blackmarket Traders?
|
||||
BlackMarketMarkerColor = "ColorRed"; // Marker color for Blackmarket Traders (if ShowBlackMarketTraders = "true")
|
||||
BlackMarketPurchaseMulti = 5; // Multi on purchase on top of the default price
|
||||
BlackMarketSellMulti = 0.8; // Multi on Sell for the default price
|
||||
BlackMarketItemsCount = 50; // Count of items for each class (will get refilled after each purchase anyway!)
|
||||
|
||||
BlackMarketUseLootList = "true"; // Use the Epoch LootList to prepare the available Items within the BlackMarket
|
||||
BlackMarketExtraItems[] = { // Items in BlackMarket, that are not within the LootTable
|
||||
// "MBK_01_EPOCH", // Can be a Vehicle
|
||||
// "ItemComboLock" // Or Items / Magazines
|
||||
};
|
||||
|
||||
Blackmarket_SpecialPrices[] = { // Do not use the default Multis, but this special prices for listed items
|
||||
// {"SatchelCharge_Remote_Mag",50,500} // Sell Price = 50 | Purchase Price = 500
|
||||
};
|
||||
|
||||
Blackmarket_BlackList[] = { // These classes are not listed in Blackmarket (doesnt matter if in Loot or not)
|
||||
// "ItemGoldBar10oz"
|
||||
};
|
||||
};
|
@ -1683,7 +1683,7 @@ class CfgBuildingLootPos
|
||||
lockerPos[] = {{{0.811523,-3.3418,-9.49701},269.999},{{19.0117,0.613281,-9.49701},90.2636},{{18.9961,-1.15674,-9.49704},89.3234},{{19.042,-2.92578,-9.49701},87.0602}};
|
||||
toolRackPos[] = {{{7.23633,3.84961,-9.4968},359.928}};
|
||||
shoeboxPos[] = {{{-0.743164,-8.33643,-0.0702209},110.554},{{19.1836,-7.53174,-9.49701},105.566}};
|
||||
palletPos[] = {{{2.03418,1.7915,-9.49701},289.015},{{-6.86621,3.25586,-0.534332},"3.05176e-005"},{{13.0293,-7.22363,-9.49701},90},{{15.542,-4.56006,-4.53433},"6.10352e-005"}};
|
||||
palletPos[] = {{{2.03418,1.7915,-9.49701},289.015},{{-6.86621,3.25586,-0.534332},0},{{13.0293,-7.22363,-9.49701},90},{{15.542,-4.56006,-4.53433},0}};
|
||||
freezerPos[] = {{{-4.1084,-7.31787,-9.49701},268.732}};
|
||||
};
|
||||
class Land_Mil_ControlTower : Default
|
||||
@ -2086,9 +2086,9 @@ class CfgBuildingLootPos
|
||||
{
|
||||
lootType = "church";
|
||||
GroundSpawnChance = 80;
|
||||
tablePos[] = {{{-0.952637,2.83398,-2.48343},"1.52588e-005"}};
|
||||
toolRackPos[] = {{{-0.880371,-3.7002,-2.37343},"1.52588e-005"}};
|
||||
shoeboxPos[] = {{{0.770508,-3.40137,-1.69343},"1.52588e-005"},{{-2.49805,-3.33887,-1.69343},"1.52588e-005"}};
|
||||
tablePos[] = {{{-0.952637,2.83398,-2.48343},0}};
|
||||
toolRackPos[] = {{{-0.880371,-3.7002,-2.37343},0}};
|
||||
shoeboxPos[] = {{{0.770508,-3.40137,-1.69343},0},{{-2.49805,-3.33887,-1.69343},0}};
|
||||
};
|
||||
class Land_House_L_1_EP1 : Default
|
||||
{
|
||||
@ -2149,10 +2149,10 @@ class CfgBuildingLootPos
|
||||
class Land_House_L_7_EP1 : Default
|
||||
{
|
||||
shelfPos[] = {{{-2.28809,-2.28809,-0.939278},87.8875}};
|
||||
fridgePos[] = {{{-5.4751,3.71777,-0.639275},"1.52588e-005"}};
|
||||
fridgePos[] = {{{-5.4751,3.71777,-0.639275},0}};
|
||||
bedPos[] = {{{3.79248,2.42188,-0.269272},270}};
|
||||
wardrobePos[] = {{{5.65527,0.724609,-0.269272},90}};
|
||||
cookerPos[] = {{{-4.51172,3.5752,-0.609276},"1.52588e-005"}};
|
||||
cookerPos[] = {{{-4.51172,3.5752,-0.609276},0}};
|
||||
chairPos[] = {{{-0.388672,3.22656,-0.269272},290}};
|
||||
filingPos[] = {{{-5.10986,-2.08984,-0.939278},350}};
|
||||
tablePos[] = {{{1.99707,-1.52637,-0.239273},180}};
|
||||
@ -2191,7 +2191,7 @@ class CfgBuildingLootPos
|
||||
wardrobePos[] = {{{5.73877,2.78125,0.786659},90}};
|
||||
chairPos[] = {{{-2.6167,-1.23535,0.603081},170},{{-4.00146,-1.05664,0.603081},220}};
|
||||
filingPos[] = {{{5.95459,-0.53418,-2.31334},104},{{6.07373,2.55176,-2.31334},80}};
|
||||
tablePos[] = {{{2.34131,2.0918,0.763084},"1.52588e-005"}};
|
||||
tablePos[] = {{{2.34131,2.0918,0.763084},0}};
|
||||
lockerPos[] = {{{-1.74707,2.39355,-2.31334},89.8}};
|
||||
toolRackPos[] = {{{-1.31445,0.375,-2.31334},89.8}};
|
||||
shoeboxPos[] = {{{-0.350098,2.94238,-2.28334},180},{{5.8457,-1.50684,1.57308},180}};
|
||||
@ -2209,10 +2209,10 @@ class CfgBuildingLootPos
|
||||
couchPos[] = {{{4.57666,-1.00195,3.16163},270},{{-5.02783,2.07422,-1.38837},270}};
|
||||
cookerPos[] = {{{-2.74414,1.1748,-1.38837},90}};
|
||||
chairPos[] = {{{1.5708,-1.56641,3.16163},320},{{3.31299,-1.47852,-1.35837},40},{{6.86572,-0.859375,3.16163},30}};
|
||||
filingPos[] = {{{6.08252,2.9502,-1.35837},"1.52588e-005"}};
|
||||
filingPos[] = {{{6.08252,2.9502,-1.35837},0}};
|
||||
tablePos[] = {{{4.56787,-2.96875,3.16163},180},{{7.90332,1.12305,-1.35837},90}};
|
||||
shoeboxPos[] = {{{-8.38037,-0.833008,-0.93837},270}};
|
||||
freezerPos[] = {{{5.20557,2.90332,-1.35837},"1.52588e-005"}};
|
||||
freezerPos[] = {{{5.20557,2.90332,-1.35837},0}};
|
||||
};
|
||||
class Land_House_C_5_V1_EP1 : Default
|
||||
{
|
||||
@ -2262,11 +2262,11 @@ class CfgBuildingLootPos
|
||||
shelfPos[] = {{{0.881836,0.848633,1.42705},180}};
|
||||
fridgePos[] = {{{2.83398,5.10059,-1.48295},0.999985}};
|
||||
bedPos[] = {{{-1.33838,-0.811523,-1.48295},0.999985}};
|
||||
wardrobePos[] = {{{4.41846,1.59082,1.42705},90},{{-2.9209,3.87598,-1.48295},"1.00179e-005"}};
|
||||
wardrobePos[] = {{{4.41846,1.59082,1.42705},90},{{-2.9209,3.87598,-1.48295},0}};
|
||||
chairPos[] = {{{-3.97998,1.91797,-1.48295},289},{{-1.0791,-4.83398,1.12706},130}};
|
||||
filingPos[] = {{{-4.45752,-5.25781,-1.49295},269}};
|
||||
shoeboxPos[] = {{{4.48828,1.01172,-1.40295},"1.00179e-005"},{{0.500977,4.9834,-0.672951},30}};
|
||||
palletPos[] = {{{-1.72168,-1.9375,1.17705},"1.00179e-005"}};
|
||||
shoeboxPos[] = {{{4.48828,1.01172,-1.40295},0},{{0.500977,4.9834,-0.672951},30}};
|
||||
palletPos[] = {{{-1.72168,-1.9375,1.17705},0}};
|
||||
};
|
||||
class Land_House_C_5_V2_EP1 : Default
|
||||
{
|
||||
@ -2801,7 +2801,7 @@ class CfgBuildingLootPos
|
||||
lockerPos[] = {{{3.24707,-0.168457,-12.9662},180.509}};
|
||||
toolRackPos[] = {{{-2.06592,-0.598389,-12.9654},180.956}};
|
||||
shoeboxPos[] = {{{-8.35303,-7.32837,-3.51317},29.0581}};
|
||||
palletPos[] = {{{2.58789,-6.03125,-3.51315},"1.43912e-005"},{{0.29248,-18.708,-3.51315},"1.43571e-005"}};
|
||||
palletPos[] = {{{2.58789,-6.03125,-3.51315},0},{{0.29248,-18.708,-3.51315},0}};
|
||||
};
|
||||
class Land_Repair_center : Default
|
||||
{
|
||||
|
@ -5,14 +5,14 @@ class CfgItemSort
|
||||
class MainCategories
|
||||
{
|
||||
classes[] = {
|
||||
{0,"All",{}},
|
||||
{1,"Clothings / Backpacks",{"Uniforms","Vests","HeadGear","Backpacks"}},
|
||||
{2,"Weapons",{"Weapons","Handweapons"}},
|
||||
{3,"Magazines / Attachments",{"Magazines","Attachments"}},
|
||||
{4,"Equipment / Explosives",{"Equipment","Explosive","Hand"}},
|
||||
{5,"Medical / Food",{"Medical","Food","Drink"}},
|
||||
{6,"Items / Basebuilding",{"Basebuilding","Items"}},
|
||||
{7,"Vehicles",{"Vehicles_Land","Vehicles_Air","Vehicles_Ship"}}
|
||||
{"All",{}}, // Category "All" is hardcoded and do not need an array of subcategories!
|
||||
{"Clothings / Backpacks",{"Uniforms","Vests","HeadGear","Backpacks"}},
|
||||
{"Weapons",{"Weapons","Handweapons"}},
|
||||
{"Magazines / Attachments",{"Magazines","Attachments"}},
|
||||
{"Equipment / Explosives",{"Equipment","Explosive","Hand"}},
|
||||
{"Medical / Food",{"Medical","Food","Drink"}},
|
||||
{"Items / Basebuilding",{"Basebuilding","Items"}},
|
||||
{"Vehicles",{"Vehicles_Land","Vehicles_Air","Vehicles_Ship"}}
|
||||
};
|
||||
};
|
||||
class SubCatergories
|
||||
@ -1003,7 +1003,7 @@ class CfgItemSort
|
||||
"muzzle_snds_H_snd_F",
|
||||
"muzzle_snds_m_khk_F",
|
||||
"muzzle_snds_m_snd_F",
|
||||
"uzzle_snds_B_khk_F",
|
||||
"muzzle_snds_B_khk_F",
|
||||
"muzzle_snds_B_snd_F",
|
||||
"muzzle_snds_65_TI_ghex_F",
|
||||
"muzzle_snds_65_TI_blk_F",
|
||||
@ -1063,7 +1063,7 @@ class CfgItemSort
|
||||
|
||||
Food[] = {
|
||||
"ItemPowderMilk",
|
||||
"ItemRicebox",
|
||||
"ItemRiceBox",
|
||||
"ItemCereals",
|
||||
"Pumpkin",
|
||||
"FoodBioMeat",
|
||||
|
@ -308,6 +308,200 @@ 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 RyanZombieC_man_1 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_1_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_2_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_4_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_5_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_6_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_p_fugitive_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_w_worker_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_scientist_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_hunter_1_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_pilot_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_journalist_F : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_Orestes : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_Nikos : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie15 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie16 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie17 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie18 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie19 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie20 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie21 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie22 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie23 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie24 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie25 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie26 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie27 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie28 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie29 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie30 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie31 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie32 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_1medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_1_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_2_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_4_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_5_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_6_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_p_fugitive_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_w_worker_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_scientist_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_hunter_1_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_pilot_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_journalist_Fmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_Orestesmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_Nikosmedium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie15medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie16medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie17medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie18medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie19medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie20medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie21medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie22medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie23medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie24medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie25medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie26medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie27medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie28medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie29medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie30medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie31medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie32medium : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_1slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_1_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_2_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_4_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_5_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_6_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_p_fugitive_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_w_worker_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_scientist_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_hunter_1_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_pilot_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_journalist_Fslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_Orestesslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_Nikosslow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie15slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie16slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie17slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie18slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie19slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie20slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie21slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie22slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie23slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie24slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie25slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie26slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie27slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie28slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie29slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie30slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie31slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie32slow : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_1Walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_1_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_2_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_4_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_5_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_polo_6_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_p_fugitive_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_w_worker_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_scientist_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_hunter_1_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_man_pilot_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_journalist_FWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_OrestesWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieC_NikosWalker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie15walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie16walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie17walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie18walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie19walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie20walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie21walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie22walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie23walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie24walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie25walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie26walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie27walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie28walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie29walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie30walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie31walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombie32walker : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider1 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider2 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider3 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider4 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider5 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider6 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider7 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider8 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider9 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider10 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider11 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider12 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider13 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider14 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider15 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider16 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider17 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider18 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider19 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider20 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider21 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider22 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider23 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider24 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider25 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider26 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider27 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider28 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider29 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider30 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider31 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieSpider32 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler1 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler2 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler3 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler4 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler5 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler6 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler7 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler8 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler9 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler10 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler11 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler12 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler13 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler14 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler15 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler16 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler17 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler18 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler19 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler20 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler21 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler22 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler23 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler24 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler25 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler26 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler27 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler28 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler29 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler30 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler31 : EPOCH_RyanZombie_1 {};
|
||||
class RyanZombieCrawler32 : EPOCH_RyanZombie_1 {};
|
||||
|
||||
class IG_Box_s : Default
|
||||
{
|
||||
interactMode = 4;
|
||||
|
@ -2014,7 +2014,7 @@ class CfgPricing
|
||||
{
|
||||
price = 2;
|
||||
};
|
||||
class ItemRicebox
|
||||
class ItemRiceBox
|
||||
{
|
||||
price = 3;
|
||||
};
|
||||
@ -5985,7 +5985,7 @@ class CfgPricing
|
||||
{
|
||||
price = 7;
|
||||
};
|
||||
class U_C_ConstructionCoverall_vrana_F
|
||||
class U_C_ConstructionCoverall_Vrana_F
|
||||
{
|
||||
price = 7;
|
||||
};
|
||||
|
@ -26,6 +26,10 @@ class CfgRemoteExec
|
||||
{
|
||||
mode = 1;
|
||||
jip = 0;
|
||||
class Epoch_ZedSpawner {
|
||||
allowedTargets=2;
|
||||
jip = 0;
|
||||
};
|
||||
class EPOCH_server_spawnLoot
|
||||
{
|
||||
allowedTargets=2;
|
||||
|
@ -66,6 +66,7 @@ showHUD[] =
|
||||
true // Vehicle display panels
|
||||
};
|
||||
|
||||
#include "Configs\CfgBlackMarket.hpp"
|
||||
#include "Configs\CfgServicePoint.hpp"
|
||||
#include "Configs\CfgItemSort.hpp"
|
||||
#include "Configs\CfgTraderMissions.hpp"
|
||||
|
@ -159,6 +159,7 @@ for "_i" from 0 to (_maxTraderLimit-1) do {
|
||||
_markers = ["StaticTrader",_pos] call EPOCH_server_createGlobalMarkerSet;
|
||||
_agent setVariable["MARKER_REF", _markers];
|
||||
};
|
||||
EPOCH_StaticTraders pushback _agent;
|
||||
}
|
||||
else {
|
||||
// Spawn dynamic traders
|
||||
@ -200,6 +201,7 @@ for "_i" from 0 to (_maxTraderLimit-1) do {
|
||||
_markers = ["DynamicTrader",_pos] call EPOCH_server_createGlobalMarkerSet;
|
||||
_agent setVariable["MARKER_REF", _markers];
|
||||
};
|
||||
Epoch_DynamicTraders pushback _agent;
|
||||
}
|
||||
else {
|
||||
// diag_log format ["EPOCH_DEBUG: TraderSlot: %1 | Supressed Trader Load - Too much items (%2) and will respawn",_i,count (_arr select 0)];
|
||||
|
@ -120,6 +120,7 @@ for "_i" from 1 to _spawnCount do {
|
||||
};
|
||||
EPOCH_Traders pushback _agent;
|
||||
_Traderblocks pushback [getpos _agent, _TraderMinDistance];
|
||||
Epoch_DynamicTraders pushback _agent;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -24,6 +24,10 @@ params ["_trader","_itemsIn","_itemsOut","_player",["_token","",[""]] ];
|
||||
_playerUID = getplayeruid _player;
|
||||
|
||||
_EnableTempVehTrade = ["CfgEpochClient", "EnableTempVehTrade", false] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketPurchaseMulti = ["CfgBlackMarket", "BlackMarketPurchaseMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketSellMulti = ["CfgBlackMarket", "BlackMarketSellMulti", 1] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_Blackmarket_SpecialPrices = ["CfgBlackMarket", "Blackmarket_SpecialPrices", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
|
||||
_serverSettingsConfig = configFile >> "CfgEpochServer";
|
||||
_vehicleSold = false;
|
||||
_vehicleBought = false;
|
||||
@ -63,6 +67,14 @@ if (_slot != -1) then {
|
||||
_x params ["_item","_itemQty"];
|
||||
if (isClass (_config >> _item)) then {
|
||||
_itemWorth = getNumber(_config >> _item >> "price");
|
||||
if (_trader getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_itemWorth = _itemWorth * _BlackMarketSellMulti;
|
||||
{
|
||||
if (_item isEqualTo (_x select 0)) exitwith {
|
||||
_itemWorth = _x select 1;
|
||||
};
|
||||
} foreach _Blackmarket_SpecialPrices;
|
||||
};
|
||||
_maxrnd = 1;
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
|
||||
@ -157,6 +169,14 @@ if (_slot != -1) then {
|
||||
_itemTax = getNumber(_config >> _item >> "tax");
|
||||
_tax = _itemWorth * (EPOCH_taxRate + _itemTax);
|
||||
_itemWorth = ceil (_itemWorth + _tax);
|
||||
if (_trader getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_itemWorth = _itemWorth * _BlackMarketPurchaseMulti;
|
||||
{
|
||||
if (_item isEqualTo (_x select 0)) exitwith {
|
||||
_itemWorth = _x select 2;
|
||||
};
|
||||
} foreach _Blackmarket_SpecialPrices;
|
||||
};
|
||||
_maxrnd = 1;
|
||||
if ([_item,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
|
||||
@ -191,6 +211,14 @@ if (_slot != -1) then {
|
||||
}
|
||||
} forEach _helipad;
|
||||
};
|
||||
_blacklistpositions = [];
|
||||
{
|
||||
_blacklistpositions pushback [getposatl _x, 5];
|
||||
} foreach (nearestobjects [_player,["Landvehicle","SHIP","AIR"],50]);
|
||||
{
|
||||
_x params ["_blacklistpos","_blacklistradius"];
|
||||
_helipads = _helipads select {_x distance _blacklistpos > _blacklistradius};
|
||||
} foreach _blacklistpositions;
|
||||
if !(_helipads isEqualTo[]) then {
|
||||
_foundSmoke = false;
|
||||
{
|
||||
@ -217,17 +245,20 @@ if (_slot != -1) then {
|
||||
}
|
||||
else {
|
||||
_tmpposition = [];
|
||||
for "_i" from 1 to 5 do {
|
||||
if (_item isKindOf "Ship") then {
|
||||
_tmpposition = [_position, 20, 150, 5, 0, 1000, 1] call BIS_fnc_findSafePos;
|
||||
_tmpposition = [_tmpposition, 0, 60, 10, 2, 1000, 0] call BIS_fnc_findSafePos;
|
||||
_tmpposition = [_tmpposition, 0, 60, 10, 2, 1000, 0, _blacklistpositions] call BIS_fnc_findSafePos;
|
||||
}
|
||||
else {
|
||||
_tmpposition = [_position, 20, 120, 5, 0, 2000, 0] call BIS_fnc_findSafePos;
|
||||
_tmpposition = [_position, 20, 120, 5, 0, 2000, 0, _blacklistpositions] call BIS_fnc_findSafePos;
|
||||
};
|
||||
if ((count _tmpposition) == 2) exitwith {};
|
||||
};
|
||||
if ((count _tmpposition) == 2) then {
|
||||
_tmpposition set [2, 0];
|
||||
if (surfaceIsWater _tmpposition) then {
|
||||
_tmpposition = ATLtoASL _tmpposition;
|
||||
_tmpposition = ASLtoATL _tmpposition;
|
||||
};
|
||||
_position = _tmpposition;
|
||||
}
|
||||
@ -323,9 +354,11 @@ if (_slot != -1) then {
|
||||
};
|
||||
_tradeTotal = _tradeIn + _tradeOut;
|
||||
if !(_returnIn isequalto [] && _returnOut isEqualTo []) then {
|
||||
if !(_trader getvariable ["Epoch_BlackMarketTrader",false]) then {
|
||||
_trader setVariable["AI_ITEMS", [_itemClasses, _itemQtys], true];
|
||||
_objHiveKey = format["%1:%2", (call EPOCH_fn_InstanceID), _slot];
|
||||
["AI_ITEMS", _objHiveKey, EPOCH_expiresAIdata, [_itemClasses, _itemQtys]] call EPOCH_fnc_server_hiveSETEX;
|
||||
};
|
||||
if !(_tradeTotal isequalto 0) then {
|
||||
_playerCryptoLimit = EPOCH_customVarLimits select _cIndex;
|
||||
_playerCryptoLimit params ["_playerCryptoLimitMax","_playerCryptoLimitMin"];
|
||||
|
@ -13,7 +13,7 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_vehicle/EPOCH_server_lockVehicle.sqf
|
||||
*/
|
||||
//[[[cog import generate_private_arrays ]]]
|
||||
private ["_VehLockMessages","_msg","_crew","_driver","_isLocked","_lockOwner","_lockedOwner","_logic","_playerGroup","_playerUID","_response","_vehLockHiveKey","_vehSlot","_nearhome"];
|
||||
private ["_VehLockMessages","_msg","_crew","_driver","_isLocked","_lockOwner","_lockedOwner","_logic","_playerGroup","_playerUID","_response","_vehLockHiveKey","_vehSlot","_nearhome","_lockArr"];
|
||||
//[[[end]]]
|
||||
params [
|
||||
["_vehicle",objNull,[objNull]],
|
||||
@ -33,8 +33,10 @@ _playerUID = getPlayerUID _player;
|
||||
_playerGroup = _player getVariable["GROUP", ""];
|
||||
|
||||
_lockOwner = _playerUID;
|
||||
_lockArr = [_playerUID];
|
||||
if (_playerGroup != "") then {
|
||||
_lockOwner = _playerGroup;
|
||||
_lockArr pushbackunique _playerGroup;
|
||||
};
|
||||
|
||||
_lockedOwner = "-1";
|
||||
@ -68,14 +70,14 @@ _crew = [];
|
||||
_logic = if !(_crew isEqualTo []) then {
|
||||
if (_player in _crew) then {
|
||||
// allow unlock if player is the driver or is inside the vehicle with out a driver.
|
||||
(_player isEqualTo _driver || isNull(_driver) || _lockedOwner == _lockOwner || !alive _driver)
|
||||
(_player isEqualTo _driver || isNull(_driver) || _lockedOwner in _lockArr || !alive _driver)
|
||||
} else {
|
||||
// allow only if player is already the owner as they are not inside the occupied vehicle.
|
||||
(_lockedOwner == _lockOwner)
|
||||
(_lockedOwner in _lockArr)
|
||||
};
|
||||
} else {
|
||||
// vehicle has no crew, so allow only if: unlocked, is already the owner, vehicle has no owner.
|
||||
(!_isLocked || _lockedOwner == _lockOwner || _lockedOwner == "-1")
|
||||
(!_isLocked || _lockedOwner in _lockArr || _lockedOwner == "-1")
|
||||
};
|
||||
|
||||
// Lockout mech
|
||||
|
@ -120,9 +120,9 @@ diag_log "Epoch: Init Connect/Disconnect handlers";
|
||||
onPlayerConnected {}; // seems this is needed or addMissionEventHandler "PlayerConnected" does not work. as of A3 1.60
|
||||
addMissionEventHandler ["PlayerConnected", {
|
||||
params ["_id","_uid","_name","_jip","_owner"];
|
||||
// TODO: diabled STEAMAPI - Vac ban check needs reworked.
|
||||
// "epochserver" callExtension format["001|%1", _uid];
|
||||
// diag_log format["playerConnected:%1", _this];
|
||||
if !(missionNamespace getVariable ["EPOCH_SERVER_READY", false]) exitwith {
|
||||
['kick',_uid,'Server not fully loaded - retry in a few seconds!'] call EPOCH_serverCommand
|
||||
};
|
||||
["PlayerData", _uid, EPOCH_expiresPlayer, [_name]] call EPOCH_fnc_server_hiveSETEX;
|
||||
['Connected', [_uid, _name]] call EPOCH_fnc_server_hiveLog;
|
||||
}];
|
||||
@ -182,12 +182,115 @@ call EPOCH_server_createTeleport;
|
||||
|
||||
diag_log "Epoch: Loading NPC traders";
|
||||
EPOCH_Traders = [];
|
||||
EPOCH_StaticTraders = [];
|
||||
Epoch_DynamicTraders = [];
|
||||
EPOCH_NPCSlotsLimit call EPOCH_server_loadTraders;
|
||||
|
||||
diag_log "Epoch: Spawning NPC traders";
|
||||
call EPOCH_server_spawnTraders;
|
||||
publicvariable "EPOCH_Traders";
|
||||
|
||||
// Start Black Market Traders
|
||||
_StaticBlackMarketIdx = ["CfgBlackMarket", "StaticBlackMarketIdx", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketTraderCount = ["CfgBlackMarket", "BlackMarketTraderCount", [0,0]] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_ShowBlackMarketTraders = ["CfgBlackMarket", "ShowBlackMarketTraders", true] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketMarkerColor = ["CfgBlackMarket", "BlackMarketMarkerColor", "ColorRed"] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketItemsCount = ["CfgBlackMarket", "BlackMarketItemsCount", 100] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketUseLootList = ["CfgBlackMarket", "BlackMarketUseLootList", true] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_BlackMarketExtraItems = ["CfgBlackMarket", "BlackMarketExtraItems", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_Blackmarket_BlackList = ["CfgBlackMarket", "Blackmarket_BlackList", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
|
||||
// Start Calculate The Items for BlackMarkets
|
||||
_lootTableIndex = if (EPOCH_modCUPVehiclesEnabled) then {if (EPOCH_mod_madArma_Enabled) then {3} else {1}} else {if (EPOCH_mod_madArma_Enabled) then {2} else {0}};
|
||||
_lootTableClass = ["CfgLootTable","CfgLootTable_CUP","CfgLootTable_MAD","CfgLootTable_MADCUP"] select _lootTableIndex;
|
||||
if !(EPOCH_forcedLootSpawnTable isEqualTo "") then {
|
||||
_lootTableClass = EPOCH_forcedLootSpawnTable;
|
||||
};
|
||||
_AllowedSpawnItemList = [];
|
||||
_PricingList = (missionConfigFile >> "CfgPricing") call BIS_fnc_getCfgSubClasses;
|
||||
if (_BlackMarketUseLootList) then {
|
||||
_noprice = [];
|
||||
_fncadditems = {
|
||||
_itemsarray = getarray (_this >> "items");
|
||||
{
|
||||
if !((_x select 1) isEqualTo 0) then {
|
||||
if ((_x select 0 select 1) isequalto "CfgLootTable") then {
|
||||
(configfile >> _lootTableClass >> (_x select 0 select 0)) call _fncadditems;
|
||||
}
|
||||
else {
|
||||
if ((_x select 0 select 0) in _PricingList) then {
|
||||
_AllowedSpawnItemList pushbackunique (_x select 0 select 0);
|
||||
}
|
||||
else {
|
||||
if !((_x select 0 select 0) in _noprice) then {
|
||||
diag_log format ["%1 is in your LootTable, but not have a price!!!",(_x select 0 select 0)];
|
||||
_noprice pushback (_x select 0 select 0);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _itemsarray;
|
||||
};
|
||||
{
|
||||
_tables = (getarray (_x >> "tables"));
|
||||
{
|
||||
_check = _x;
|
||||
if !(_check isEqualType []) then {
|
||||
_check = [_x];
|
||||
};
|
||||
(configfile >> _lootTableClass >> (_check select 0)) call _fncadditems;
|
||||
} foreach _tables;
|
||||
} foreach ("true" configclasses (configfile >> "CfgMainTable"));
|
||||
};
|
||||
_arrtmp = +_AllowedSpawnItemList;
|
||||
_arrtmp = _arrtmp + (_BlackMarketExtraItems select {_x in _PricingList});
|
||||
_arrtmp = _arrtmp - _Blackmarket_BlackList;
|
||||
_arrcnttmp = [];
|
||||
{
|
||||
_arrcnttmp pushback _BlackMarketItemsCount;
|
||||
} foreach _arrtmp;
|
||||
// Convert Starter Trader Magazines from mags to rounds
|
||||
{
|
||||
_maxrnd = 1;
|
||||
if ([_x,"cfgMagazines"] call Epoch_fnc_isAny) then {
|
||||
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _x >> "count");
|
||||
};
|
||||
if (_maxrnd > 1) then {
|
||||
_currentStock = (_arrcnttmp select _foreachindex)*_maxrnd;
|
||||
_arrcnttmp set [_foreachindex, _currentStock];
|
||||
};
|
||||
} foreach _arrtmp;
|
||||
|
||||
// Check the spawned BlackMarket Traders and handle them
|
||||
_BlackMarketTraders = [];
|
||||
{
|
||||
if (_foreachindex in _StaticBlackMarketIdx) then {
|
||||
_BlackMarketTraders pushback _x;
|
||||
};
|
||||
} foreach EPOCH_StaticTraders;
|
||||
_BlackMarketTraderCount params [["_minmarkets",0],["_maxmarkets",0]];
|
||||
for "_i" from 1 to (round (_minmarkets + random (_maxmarkets - _minmarkets))) do {
|
||||
if (count Epoch_DynamicTraders > 0) then {
|
||||
_trader = selectrandom Epoch_DynamicTraders;
|
||||
Epoch_DynamicTraders = Epoch_DynamicTraders - [_trader];
|
||||
_BlackMarketTraders pushback _trader;
|
||||
};
|
||||
};
|
||||
|
||||
{
|
||||
if (_ShowBlackMarketTraders) then {
|
||||
{
|
||||
deletemarker _x;
|
||||
} foreach (_x getVariable["MARKER_REF", []]);
|
||||
_markers = ["StaticTrader",getpos _x,"BlackMarket Trader"] call EPOCH_server_createGlobalMarkerSet;
|
||||
_x setVariable["MARKER_REF", _markers];
|
||||
{_x setmarkercolor _BlackMarketMarkerColor;} foreach _markers;
|
||||
};
|
||||
_x setVariable ["AI_ITEMS", [_arrtmp,_arrcnttmp], true];
|
||||
_x setvariable ["Epoch_BlackMarketTrader",true,true];
|
||||
} foreach _BlackMarketTraders;
|
||||
// End Black Market Traders
|
||||
|
||||
if (([_serverSettingsConfig, "ReplaceCarService", false] call EPOCH_fnc_returnConfigEntry)) then {
|
||||
{
|
||||
private _shop = "paintshop" createvehicle (getpos _x);
|
||||
|
@ -30,7 +30,7 @@ _cfg_remoteExecClient = (_config >> "remoteExecClient");
|
||||
_remoteExecClient_NAMES = [_cfg_remoteExecClient, "functions", []] call EPOCH_fnc_returnConfigEntry;
|
||||
|
||||
_cfg_limits = (_config >> "limits");
|
||||
_skn_playerCryptoLimit = [_cfg_limits, "playerCrypto", 250000] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_playerCryptoLimit = [_cfg_limits, "playerCrypto", 1000000] call EPOCH_fnc_returnConfigEntry;
|
||||
|
||||
_cfg_learning = (_config >> "learning");
|
||||
_skn_trustedUsers = [_cfg_learning,"trustedUsers",[]] call EPOCH_fnc_returnConfigEntry;
|
||||
|
@ -26,6 +26,7 @@ EPOCH_staticNPCTraderPos = [];
|
||||
EPOCH_traderStoredVehicles = [];
|
||||
EPOCH_traderStoredVehiclesCnt = [];
|
||||
Epoch_LootedBuildings = [];
|
||||
Epoch_BaseSpawnSkips = [[],[]];
|
||||
|
||||
private _configArray = [
|
||||
["serverRestart", false],
|
||||
|
@ -471,7 +471,7 @@ class CfgLootTable
|
||||
{ { "gyro_wrap_epoch", "magazine" }, 4 },
|
||||
{ { "icecream_epoch", "magazine" }, 3 },
|
||||
{ { "ItemPowderMilk", "magazine" }, 3 },
|
||||
{ { "ItemRicebox", "magazine" }, 3 },
|
||||
{ { "ItemRiceBox", "magazine" }, 3 },
|
||||
{ { "ItemCereals", "magazine" }, 3 },
|
||||
{ { "ItemVitamins", "magazine" }, 3 },
|
||||
{ { "honey_epoch", "magazine" }, 5 },
|
||||
@ -1571,7 +1571,7 @@ class CfgLootTable
|
||||
{
|
||||
items[] = {
|
||||
{ { "U_C_ConstructionCoverall_Red_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
|
||||
{ { "U_C_Paramedic_01_F", "item" }, 1 },
|
||||
@ -2017,7 +2017,7 @@ class CfgLootTable
|
||||
items[] = {
|
||||
{ { "Gems", "CfgLootTable" }, 10 },
|
||||
{ { "Throw", "CfgLootTable" }, 11 },
|
||||
{ { "ThrowExplosive", "magazine" }, 12 },
|
||||
{ { "ThrowExplosive", "CfgLootTable" }, 12 },
|
||||
{ { "MiniGrenade", "magazine" }, 20 },
|
||||
{ { "Medical", "CfgLootTable" }, 21 },
|
||||
{ { "Venom_EPOCH", "magazine" }, 26 }
|
||||
|
@ -471,7 +471,7 @@ class CfgLootTable_CUP
|
||||
{ { "gyro_wrap_epoch", "magazine" }, 4 },
|
||||
{ { "icecream_epoch", "magazine" }, 3 },
|
||||
{ { "ItemPowderMilk", "magazine" }, 3 },
|
||||
{ { "ItemRicebox", "magazine" }, 3 },
|
||||
{ { "ItemRiceBox", "magazine" }, 3 },
|
||||
{ { "ItemCereals", "magazine" }, 3 },
|
||||
{ { "ItemVitamins", "magazine" }, 3 },
|
||||
{ { "honey_epoch", "magazine" }, 5 },
|
||||
@ -1571,7 +1571,7 @@ class CfgLootTable_CUP
|
||||
{
|
||||
items[] = {
|
||||
{ { "U_C_ConstructionCoverall_Red_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
|
||||
{ { "U_C_Paramedic_01_F", "item" }, 1 },
|
||||
@ -2021,7 +2021,7 @@ class CfgLootTable_CUP
|
||||
items[] = {
|
||||
{ { "Gems", "CfgLootTable" }, 10 },
|
||||
{ { "Throw", "CfgLootTable" }, 11 },
|
||||
{ { "ThrowExplosive", "magazine" }, 12 },
|
||||
{ { "ThrowExplosive", "CfgLootTable" }, 12 },
|
||||
{ { "MiniGrenade", "magazine" }, 20 },
|
||||
{ { "Medical", "CfgLootTable" }, 21 },
|
||||
{ { "Venom_EPOCH", "magazine" }, 26 }
|
||||
|
@ -471,7 +471,7 @@ class CfgLootTable_MAD
|
||||
{ { "gyro_wrap_epoch", "magazine" }, 4 },
|
||||
{ { "icecream_epoch", "magazine" }, 3 },
|
||||
{ { "ItemPowderMilk", "magazine" }, 3 },
|
||||
{ { "ItemRicebox", "magazine" }, 3 },
|
||||
{ { "ItemRiceBox", "magazine" }, 3 },
|
||||
{ { "ItemCereals", "magazine" }, 3 },
|
||||
{ { "ItemVitamins", "magazine" }, 3 },
|
||||
{ { "honey_epoch", "magazine" }, 5 },
|
||||
@ -1571,7 +1571,7 @@ class CfgLootTable_MAD
|
||||
{
|
||||
items[] = {
|
||||
{ { "U_C_ConstructionCoverall_Red_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
|
||||
{ { "U_C_Paramedic_01_F", "item" }, 1 },
|
||||
@ -2020,7 +2020,7 @@ class CfgLootTable_MAD
|
||||
items[] = {
|
||||
{ { "Gems", "CfgLootTable" }, 10 },
|
||||
{ { "Throw", "CfgLootTable" }, 11 },
|
||||
{ { "ThrowExplosive", "magazine" }, 12 },
|
||||
{ { "ThrowExplosive", "CfgLootTable" }, 12 },
|
||||
{ { "MiniGrenade", "magazine" }, 20 },
|
||||
{ { "Medical", "CfgLootTable" }, 21 },
|
||||
{ { "Venom_EPOCH", "magazine" }, 26 }
|
||||
|
@ -471,7 +471,7 @@ class CfgLootTable_MADCUP
|
||||
{ { "gyro_wrap_epoch", "magazine" }, 4 },
|
||||
{ { "icecream_epoch", "magazine" }, 3 },
|
||||
{ { "ItemPowderMilk", "magazine" }, 3 },
|
||||
{ { "ItemRicebox", "magazine" }, 3 },
|
||||
{ { "ItemRiceBox", "magazine" }, 3 },
|
||||
{ { "ItemCereals", "magazine" }, 3 },
|
||||
{ { "ItemVitamins", "magazine" }, 3 },
|
||||
{ { "honey_epoch", "magazine" }, 5 },
|
||||
@ -1571,7 +1571,7 @@ class CfgLootTable_MADCUP
|
||||
{
|
||||
items[] = {
|
||||
{ { "U_C_ConstructionCoverall_Red_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Vrana_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Black_F", "item" }, 1 },
|
||||
{ { "U_C_ConstructionCoverall_Blue_F", "item" }, 1 },
|
||||
{ { "U_C_Paramedic_01_F", "item" }, 1 },
|
||||
@ -2020,7 +2020,7 @@ class CfgLootTable_MADCUP
|
||||
items[] = {
|
||||
{ { "Gems", "CfgLootTable" }, 10 },
|
||||
{ { "Throw", "CfgLootTable" }, 11 },
|
||||
{ { "ThrowExplosive", "magazine" }, 12 },
|
||||
{ { "ThrowExplosive", "CfgLootTable" }, 12 },
|
||||
{ { "MiniGrenade", "magazine" }, 20 },
|
||||
{ { "Medical", "CfgLootTable" }, 21 },
|
||||
{ { "Venom_EPOCH", "magazine" }, 26 }
|
||||
|
@ -16,6 +16,11 @@ class CfgSecConf
|
||||
{
|
||||
debug = "false";
|
||||
|
||||
class limits
|
||||
{
|
||||
playerCrypto = 1000000; // Players with more than this amount get automatically banned
|
||||
};
|
||||
|
||||
class vehicles {
|
||||
safeVehicles[] = {"I_UAV_01_F","B_Heli_Transport_01_F","Steerable_Parachute_F","NonSteerable_Parachute_F","Land_Camping_Light_F","container_epoch"};
|
||||
};
|
||||
|
@ -91,7 +91,50 @@ if (isnil "LootMarkersPositions" && isnil "LootMarkers") then {
|
||||
"Land_Tyres_F",
|
||||
"Land_Ind_BoardsPack2",
|
||||
"Land_JunkPile_F",
|
||||
"Land_CratesShabby_F"
|
||||
"Land_CratesShabby_F",
|
||||
"Land_PowerPoleWooden_L_F",
|
||||
"Land_seno_balik",
|
||||
"CinderFloor_EPOCH",
|
||||
"Land_Shed_W02_EP1",
|
||||
"clone_female_static_F",
|
||||
"clone_female_static_F",
|
||||
"CinderWall_EPOCH",
|
||||
"CinderWallGarage_EPOCH",
|
||||
"WoodFloor_EPOCH",
|
||||
"Land_Zed_dira_civil",
|
||||
"Land_Helfenburk_zed",
|
||||
"Land_PowLines_ConcL",
|
||||
"Land_Shed_M01_EP1",
|
||||
"Land_Shed_W03",
|
||||
"Land_Helfenburk_brana",
|
||||
"Land_Vysilac_chodba",
|
||||
"Land_Com_tower_ep1",
|
||||
"Land_Fuelstation_army",
|
||||
"Land_Ind_BoardsPack1",
|
||||
"Land_OrlHot",
|
||||
"Land_Dumruina_mini",
|
||||
"TP_Booth_c_EPOCH",
|
||||
"Land_popelnice",
|
||||
"Land_Ind_Timbers",
|
||||
"Epoch_LootHolder",
|
||||
"Land_A_Crane_02b",
|
||||
"paintshop",
|
||||
"FirePlace_02_EPOCH",
|
||||
"clone_male_static_F",
|
||||
"Land_Atm_01_F",
|
||||
"Land_TTowerSmall_1_F",
|
||||
"Land_vodni_vez",
|
||||
"Land_Kontejner",
|
||||
"Land_Bench_04_F",
|
||||
"Land_Sara_domek_zluty_bez",
|
||||
"Land_Helfenburk_cimburi",
|
||||
"CinderWallHalf_EPOCH",
|
||||
"Land_A_statue02",
|
||||
"CinderWall_window_EPOCH",
|
||||
"Debug_static_F",
|
||||
"Land_HouseV2_04",
|
||||
"Goldenseal_EPOCH",
|
||||
"Land_Vysilac_vez"
|
||||
];
|
||||
_skipstrings = [
|
||||
"land_powerwire",
|
||||
|
22
changelog.md
22
changelog.md
@ -1,6 +1,28 @@
|
||||
# Change Log
|
||||
All changes for [Arma 3](https://arma3.com/) [Epoch Mod](https://epochmod.com) are listed in this changelog.
|
||||
|
||||
## [1.3.3.1] - 2020-09-01
|
||||
### Added
|
||||
- Clear message that the server is not fully loaded when Players login to early
|
||||
- Optional Black Market Traders
|
||||
- Build in RyanZ Zombiespawner (when RyanZ is enabled on the Server)
|
||||
- Trader Filter for useable items on currently equipped weapons
|
||||
|
||||
### Fixed
|
||||
- On farming wracks / cinder, sometimes the more far away object was looted instead of the nearest
|
||||
- Purchased Boats from Traders sometimes spawned damaged
|
||||
- In some cases, purchased Vehicles spawned on top of already existing vehicles -> crashed
|
||||
|
||||
### Changed
|
||||
|
||||
### Server Owners
|
||||
- Added missing predefined variable "Epoch_BaseSpawnSkips" (no issues, just a rpt error)
|
||||
- Krypto Limit from 250000 to 1000000 to prevent unwanted bans
|
||||
- Some loot positions were not in correct syntax
|
||||
- Black Market Traders can be configured within CfgBlackMarket.hpp (within the mission file)
|
||||
- RyanZ Zombiespawner can be configured within epoch_server_RyanZ_Spawner.pbo (server side)
|
||||
- To disable this spawner, you can remove this pbo from your Server
|
||||
|
||||
## [1.3.3.0] - 2020-06-03
|
||||
### Added
|
||||
- Some Dupe fixes
|
||||
|
Loading…
Reference in New Issue
Block a user