mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
Animated Heli Crashes
This commit is contained in:
parent
8a412c0da1
commit
05ececddc1
@ -26,6 +26,7 @@ forceRestartTime = 14400; // 4 hour restarts
|
|||||||
},
|
},
|
||||||
// { 1800, "PaydayEvent", 0, 2},
|
// { 1800, "PaydayEvent", 0, 2},
|
||||||
// { 1200, "MessageServer", 0, 2},
|
// { 1200, "MessageServer", 0, 2},
|
||||||
|
{ 1200, "HeliCrash", 0 , 2, -1, {} ,{"VR"}},
|
||||||
{ 2700, "AirDrop", 0 , 2, -1, {} ,{"VR"}},
|
{ 2700, "AirDrop", 0 , 2, -1, {} ,{"VR"}},
|
||||||
{ 2400, "EarthQuake", 0 , 2, -1, {} ,{"VR"}},
|
{ 2400, "EarthQuake", 0 , 2, -1, {} ,{"VR"}},
|
||||||
{ 2700, "Satellite", 0 , 2, -1, {} ,{"VR"}},
|
{ 2700, "Satellite", 0 , 2, -1, {} ,{"VR"}},
|
||||||
|
@ -216,9 +216,9 @@ class CfgMarkerSets
|
|||||||
};
|
};
|
||||||
class HeliCrash {
|
class HeliCrash {
|
||||||
markerArray[] = {
|
markerArray[] = {
|
||||||
{"","ICON","EpochActive_Circle","ColorOrange",1,{0.6,0.6}},
|
{"","ICON","EpochActive_Circle","ColorYellow",1,{0.6,0.6}},
|
||||||
{"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}},
|
{"","ICON","EpochBG_Circle","ColorWhite",0.15,{0.6,0.6}},
|
||||||
{"","ICON","EpochHeli2","ColorOrange",1,{0.5,0.5}}
|
{"","ICON","EpochHeli2","ColorYellow",1,{0.5,0.5}}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
//[[[cog import generate_private_arrays ]]]
|
//[[[cog import generate_private_arrays ]]]
|
||||||
private ["_config","_debug","_exit","_loop","_lootItemArray","_lootItemWeightedArray","_lootTable","_lootTableClass","_lootTableIndex","_loots","_magazineSize","_mags","_maxLoot","_maxPayout","_minLoot","_pricingConfig","_quan","_randomItem","_randomItemArray","_randomizeMagazineAmmoCount","_weightedItemArray"];
|
private ["_config","_debug","_exit","_loop","_lootItemArray","_lootItemWeightedArray","_lootTable","_lootTableClass","_lootTableIndex","_loots","_magazineSize","_mags","_maxLoot","_maxPayout","_minLoot","_pricingConfig","_quan","_randomItem","_randomItemArray","_randomizeMagazineAmmoCount","_weightedItemArray"];
|
||||||
//[[[end]]]
|
//[[[end]]]
|
||||||
params ["_object","_type",["_forceSpawn",false],["_pos",[]] ];
|
params ["_object","_type",["_forceSpawn",false],["_pos",[]],["_scatter",[]]];
|
||||||
_debug = true;
|
_debug = true;
|
||||||
_pricingConfig = 'CfgPricing' call EPOCH_returnConfig;
|
_pricingConfig = 'CfgPricing' call EPOCH_returnConfig;
|
||||||
|
|
||||||
@ -25,11 +25,12 @@ if !(EPOCH_forcedLootSpawnTable isEqualTo "") then {
|
|||||||
_lootTableClass = EPOCH_forcedLootSpawnTable;
|
_lootTableClass = EPOCH_forcedLootSpawnTable;
|
||||||
};
|
};
|
||||||
_randomizeMagazineAmmoCount = ["CfgEpochClient", "randomizeMagazineAmmoCount", true] call EPOCH_fnc_returnConfigEntryV2;
|
_randomizeMagazineAmmoCount = ["CfgEpochClient", "randomizeMagazineAmmoCount", true] call EPOCH_fnc_returnConfigEntryV2;
|
||||||
if (isnull _object && !(_pos isequalto [])) then {
|
if (isnull _object && !(_pos isequalto []) && (_scatter isequalto [])) then {
|
||||||
_object = createVehicle ["groundWeaponHolder",_pos,[],0,"CAN_COLLIDE"];
|
_object = createVehicle ["groundWeaponHolder",_pos,[],0,"CAN_COLLIDE"];
|
||||||
_object setPosATL _pos;
|
_object setPosATL _pos;
|
||||||
};
|
};
|
||||||
if !(isNull _object) then{
|
if (!isNull _object || !(_scatter isequalto [])) then{
|
||||||
|
_scatter params [["_doScatter",false],["_ScatterRadiusArr",[6,12]]];
|
||||||
_lootTable = ["CfgMainTable", _type, "tables"] call EPOCH_fnc_weightedArray;
|
_lootTable = ["CfgMainTable", _type, "tables"] call EPOCH_fnc_weightedArray;
|
||||||
if !(_lootTable isEqualTo []) then {
|
if !(_lootTable isEqualTo []) then {
|
||||||
_loots = [];
|
_loots = [];
|
||||||
@ -41,6 +42,11 @@ if !(isNull _object) then{
|
|||||||
_loots pushBack (selectRandomWeighted _lootTable);
|
_loots pushBack (selectRandomWeighted _lootTable);
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
|
if (_doScatter) then {
|
||||||
|
_randomPos = [_pos,_ScatterRadiusArr call BIS_fnc_randomInt,[0,359] call BIS_fnc_randomInt] call BIS_fnc_relPos;
|
||||||
|
_object = createVehicle ["groundweaponholder",_randomPos,[],0,"CAN_COLLIDE"];
|
||||||
|
_object setPosATL [_randomPos select 0, _randomPos select 1, 0.1];
|
||||||
|
};
|
||||||
_lootItemWeightedArray = [_lootTableClass, _x, "items"] call EPOCH_fnc_weightedArray;
|
_lootItemWeightedArray = [_lootTableClass, _x, "items"] call EPOCH_fnc_weightedArray;
|
||||||
if !(_lootItemWeightedArray isEqualTo[]) then {
|
if !(_lootItemWeightedArray isEqualTo[]) then {
|
||||||
_randomItemArray = selectRandomWeighted _lootItemWeightedArray;
|
_randomItemArray = selectRandomWeighted _lootItemWeightedArray;
|
||||||
|
141
Sources/epoch_server_events/EpochEvents/HeliCrash.sqf
Normal file
141
Sources/epoch_server_events/EpochEvents/HeliCrash.sqf
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
_cfgEpoch = configFile >> "CfgEpoch" >> worldname;
|
||||||
|
_debug = if(getNumber(_cfgEpoch >> "debugHeliCrashes") isEqualTo 1)then{true}else{false};
|
||||||
|
_limit = getNumber(_cfgEpoch >> "maxSpawnedHeliCrashes");
|
||||||
|
_counter = missionNameSpace getVariable["EPOCH_HeliCrashCounter",0];
|
||||||
|
_others = missionNameSpace getVariable["EPOCH_HeliCrashes", [[0,0,0]] ];
|
||||||
|
_distFromOthers = getNumber(_cfgEpoch >> "distFromOtherHeliCrashes");
|
||||||
|
|
||||||
|
//STOP THE SCRIPT AND EXIT IF THE COUNTER IS TOO HIGH.
|
||||||
|
if (_counter >= _limit) exitWith {
|
||||||
|
if (_debug) then {diag_log "DEBUG: suppressed HELICRASH spawn over limit"};
|
||||||
|
};
|
||||||
|
|
||||||
|
// decrease chance with more players
|
||||||
|
if (count (allplayers select {alive _x}) == 0) exitwith {};
|
||||||
|
_chance = 0.1 + (linearConversion [1, 100, (count allPlayers), 0, 0.5, true]);
|
||||||
|
if ((random 1) < _chance) then {
|
||||||
|
_position = [0,0,0];
|
||||||
|
for "_i" from 0 to 100 step 1 do {
|
||||||
|
_position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 5, 0, 1000, 0] call BIS_fnc_findSafePos;
|
||||||
|
_goodPos = true;
|
||||||
|
_goodPos = [_position, true, true, false, _others, _distFromOthers] call EPOCH_server_isNearChecks;
|
||||||
|
if(_goodPos)then{
|
||||||
|
_i = 100;
|
||||||
|
}else{
|
||||||
|
_position = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if ((count _position) == 2) then{
|
||||||
|
_values = getArray(_cfgEpoch >> "availableHeliCrashes");
|
||||||
|
if (_values isEqualTo []) exitwith {
|
||||||
|
if (_debug) then {diag_log "DEBUG: suppressed HELICRASH no HeliClasses defined"};
|
||||||
|
};
|
||||||
|
_veharray = selectrandom _values;
|
||||||
|
_startpos = [_position, 0, 3000, 5, 0, 1000, 0] call BIS_fnc_findSafePos;
|
||||||
|
if ((count _startpos) > 2) then {
|
||||||
|
_startpos = [3000,3000];
|
||||||
|
};
|
||||||
|
_startpos set [2,600];
|
||||||
|
_veh = createVehicle [_veharray select 0, _startpos, [], 0, "FLY"];
|
||||||
|
_veh setpos _startpos;
|
||||||
|
_veh call EPOCH_server_setVToken;
|
||||||
|
_group = creategroup east;
|
||||||
|
_unit = _group createUnit["I_Soldier_EPOCH", [0,0,0], [], 0, "FORM"];
|
||||||
|
_unit moveInDriver _veh;
|
||||||
|
_veh flyinheight 200;
|
||||||
|
for '_i' from 0 to 3 do {
|
||||||
|
_group move _position;
|
||||||
|
uisleep 30;
|
||||||
|
};
|
||||||
|
_time = diag_ticktime;
|
||||||
|
waituntil {uisleep 0.5; !(surfaceiswater (getpos _veh)) || diag_ticktime - _time > 60};
|
||||||
|
deletevehicle _unit;
|
||||||
|
uisleep 2;
|
||||||
|
_veh setdamage 1;
|
||||||
|
_starttime = diag_ticktime;
|
||||||
|
waituntil {uisleep 0.25; ((getpos _veh) select 2) < 2 || diag_ticktime > _starttime+30};
|
||||||
|
_pos = getposatl _veh;
|
||||||
|
_pos set [2,0];
|
||||||
|
deletevehicle _veh;
|
||||||
|
uisleep 0.5;
|
||||||
|
if !(surfaceiswater _pos) then {
|
||||||
|
_veh = createVehicle [_veharray select 1, _pos, [], 0, "CAN_COLLIDE"];
|
||||||
|
_veh setvectorup [0,0,1];
|
||||||
|
_veh setPosatl _pos;
|
||||||
|
[objnull,"HeliCrash",false,_pos,[true,[6,12]]] call EPOCH_serverLootObject;
|
||||||
|
// Place markers and get decay, compromised and original colors
|
||||||
|
_markers = [];
|
||||||
|
_originalColors = [];
|
||||||
|
_showMarkers = if(getNumber(_cfgEpoch >> "showHeliCrashMarkers") isEqualTo 1)then{true}else{false};
|
||||||
|
_decayMarkerColor = getText(_cfgEpoch >> "heliCrashDecayMarkerColor");
|
||||||
|
_compromisedColor = getText(_cfgEpoch >> "heliCrashCompromisedColor");
|
||||||
|
if (_showMarkers) then{
|
||||||
|
_markers = ["HeliCrash",_pos] call EPOCH_server_createGlobalMarkerSet;
|
||||||
|
{
|
||||||
|
_originalColors pushBack (getMarkerColor _x);
|
||||||
|
}forEach _markers;
|
||||||
|
|
||||||
|
// Check for HeightenedPlayerVsPlayer false and remove comprimised coloring
|
||||||
|
if!(getNumber(_cfgEpoch >> "HeightenedPlayerVsPlayer") isEqualTo 1)then{
|
||||||
|
_compromisedColor = getMarkerColor (_markers select 0);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Tick Counter +1
|
||||||
|
_counter = _counter + 1;
|
||||||
|
missionNameSpace setVariable["EPOCH_HeliCrashCounter",_counter];
|
||||||
|
|
||||||
|
// ADD POSITION TO OTHERS ARRAY
|
||||||
|
missionNameSpace setVariable["EPOCH_HeliCrashes", _others + [_pos]];
|
||||||
|
|
||||||
|
// SEND EVENT TO MONITOR
|
||||||
|
_decayTime = getNumber(_cfgEpoch >> "HeliCrashDecayTime");
|
||||||
|
_serverSettingsConfig = configFile >> "CfgEpochServer";
|
||||||
|
_timeMultiplier = ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry);
|
||||||
|
_rEvents = missionNameSpace getVariable["EPOCH_RunningEvents",[]];
|
||||||
|
_thisEvent = [_pos, [_veh], [], "EPOCH_HeliCrashCounter", diag_tickTime, (_decayTime * _timeMultiplier), _showMarkers, _markers, _originalColors, _decayMarkerColor, _compromisedColor];
|
||||||
|
missionNameSpace setVariable["EPOCH_RunningEvents",_rEvents + [_thisEvent]];
|
||||||
|
|
||||||
|
_effects = [];
|
||||||
|
{
|
||||||
|
_x params ["_distance","_effect","_sleep"];
|
||||||
|
{
|
||||||
|
if (!isnull _x) then {
|
||||||
|
deletevehicle _x;
|
||||||
|
};
|
||||||
|
} foreach _effects;
|
||||||
|
if (isnull _veh) exitwith {};
|
||||||
|
_effects = [];
|
||||||
|
_fireArray = switch _effect do {
|
||||||
|
case "FIRE_BIG": {
|
||||||
|
["BigDestructionFire","BigDestructionSmoke"]
|
||||||
|
};
|
||||||
|
case "SMOKE_MID": {
|
||||||
|
["","MediumSmoke"]
|
||||||
|
};
|
||||||
|
case "SMOKE_BIG": {
|
||||||
|
["","BigDestructionSmoke"]
|
||||||
|
};
|
||||||
|
default {[]};
|
||||||
|
};
|
||||||
|
if !(_fireArray isEqualTo []) then {
|
||||||
|
_fireArray params ["_fire","_smoke"];
|
||||||
|
if (_fire != "") then {
|
||||||
|
_eFire = "#particlesource" createVehicle (position _veh) ;
|
||||||
|
_eFire setParticleClass _fire;
|
||||||
|
_eFire attachto [_veh, [0,0,-1]];
|
||||||
|
_effects pushback _eFire;
|
||||||
|
};
|
||||||
|
if (_smoke != "") then {
|
||||||
|
_eSmoke = "#particlesource" createVehicle (position _veh);
|
||||||
|
_eSmoke setParticleClass _smoke;
|
||||||
|
_eSmoke attachto [_veh, [0,0,-1]];
|
||||||
|
_effects pushback _eSmoke;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
waituntil {uisleep _sleep; !((_pos nearentities _distance) select {isplayer _x} isequalto []) || isnull _veh};
|
||||||
|
} foreach [[200,"FIRE_BIG",15],[100,"SMOKE_BIG",5],[50,"SMOKE_MID",2]];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -183,9 +183,10 @@ class CfgEpoch
|
|||||||
showHeliCrashMarkers = 1;
|
showHeliCrashMarkers = 1;
|
||||||
maxSpawnedHeliCrashes = 4;
|
maxSpawnedHeliCrashes = 4;
|
||||||
distFromOtherHeliCrashes = 2000;
|
distFromOtherHeliCrashes = 2000;
|
||||||
|
HeliCrashDecayTime = 2400;
|
||||||
heliCrashDecayMarkerColor = "ColorBrown"; // decay changes icon (_markers select 2)
|
heliCrashDecayMarkerColor = "ColorBrown"; // decay changes icon (_markers select 2)
|
||||||
heliCrashCompromisedColor = "ColorRed"; // compromised changes active surround (_markers select 0)
|
heliCrashCompromisedColor = "ColorRed"; // compromised changes active surround (_markers select 0)
|
||||||
availableHeliCrashes[] = {"Land_Wreck_Heli_Attack_01_F","Land_Wreck_Heli_Attack_02_F"};
|
availableHeliCrashes[] = {{"O_Heli_Attack_02_F","Land_Wreck_Heli_Attack_02_F"},{"B_Heli_Attack_01_F","Land_Wreck_Heli_Attack_01_F"}};
|
||||||
heliCrashCustomLocs[] = {};
|
heliCrashCustomLocs[] = {};
|
||||||
|
|
||||||
propsPos[] = {
|
propsPos[] = {
|
||||||
|
@ -598,6 +598,31 @@ class CfgMainTable
|
|||||||
{ "Grenades", 2 }
|
{ "Grenades", 2 }
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
class HeliCrash
|
||||||
|
{
|
||||||
|
lootMin = 10;
|
||||||
|
LootMax = 20;
|
||||||
|
tables[] = {
|
||||||
|
{ "SniperRifle", 1 },
|
||||||
|
{ "Generic", 5 },
|
||||||
|
{ "Sodas", 4 },
|
||||||
|
{ "CanFood", 4 },
|
||||||
|
{ "Rifle", 3 },
|
||||||
|
{ "Machinegun", 2 },
|
||||||
|
{ "Tools", 2 },
|
||||||
|
{ "Pistols", 3 },
|
||||||
|
{ "Scopes", 2 },
|
||||||
|
{ "Bipods", 2 },
|
||||||
|
{ "Muzzles", 2 },
|
||||||
|
{ "Medical", 2 },
|
||||||
|
{ "Explosives", 2 },
|
||||||
|
{ "HighExplosives", 1 },
|
||||||
|
{ "Backpack", 1 },
|
||||||
|
{ "Uniforms", 1 },
|
||||||
|
{ "Vests", 1 },
|
||||||
|
{ "HeadgearArmored", 2 }
|
||||||
|
};
|
||||||
|
};
|
||||||
class Mission_Payout1
|
class Mission_Payout1
|
||||||
{
|
{
|
||||||
lootMin = 4;
|
lootMin = 4;
|
||||||
|
Loading…
Reference in New Issue
Block a user