more updates to how mission vehicles are spawned, monitored and cleaned up.

This commit is contained in:
Ghostrider-DbD- 2016-10-25 09:57:52 -04:00
parent 8d8d082a17
commit 210c837618
9 changed files with 114 additions and 66 deletions

View File

@ -0,0 +1,23 @@
// Configures a mission vehicle
// by Ghostrider-DBD-
// Last Updated 10/25/16
params["_veh"];
clearWeaponCargoGlobal _veh;
clearMagazineCargoGlobal _veh;
clearBackpackCargoGlobal _veh;
clearItemCargoGlobal _veh;
_veh setVehicleLock "LOCKEDPLAYER";
_veh addEventHandler ["GetIn",{
private["_unit","_veh"];
_unit = _this select 2;
_veh = _this select 0;
if (isPlayer _unit) then
{
_unit action ["eject",_veh];
cutText ["You are not allowed to enter that vehicle at this time","PLAIN DOWN"];
};
}];
_veh

View File

@ -1,6 +1,6 @@
// Spawns a vehicle or emplaced weapons, man's it, and destroys it when the AI gets out.
// Spawns an emplaced weapons, man's it, and saves it to an array of monitored vehicles.
// by Ghostrider-DBD-
// Last Updated 9-10-16
// Last Updated 10-25-16
private["_emplaced","_safepos","_emp","_gunner"];
params["_pos","_emplacedGroup","_emplacedTypes",["_minDist",20],["_maxDist",35] ];
@ -9,28 +9,13 @@ if (isNull _emplacedGroup) exitWith {};
_safepos = [_pos,_minDist,_maxDist,0,0,20,0] call BIS_fnc_findSafePos;
_emplaced = selectRandom _emplacedTypes;
_emp = createVehicle[_emplaced, _safepos, [], 0, "NONE"];
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
//_emp call EPOCH_server_vehicleInit;
_emp call EPOCH_server_setVToken;
};
clearWeaponCargoGlobal _emp;
clearMagazineCargoGlobal _emp;
clearBackpackCargoGlobal _emp;
clearItemCargoGlobal _emp;
_emp addEventHandler ["GetOut",{(_this select 0) setDamage 1;}];
_emp addEventHandler ["GetIn",{(_this select 0) setDamage 1;}];
_emp = [_emplaced,_safepos] call blck_fnc_spawnVehicle;
_emp setVariable["DBD_vehType","emplaced"];
_gunner = (units _emplacedGroup) select 0;
_gunner moveingunner _emp;
_emp setVehicleLock "LOCKEDPLAYER";
[_emp] spawn blck_fnc_vehicleMonitor;
//diag_log format["spawnEmplaced.sqf: Emplaced weapon %1 spawned"];
[_emp] call blck_fnc_configureMissionVehicle;
waitUntil { count crew _emp > 0};
blck_missionVehicles pushback _emp;
diag_log format["spawnEmplaced.sqf: Emplaced weapon %1 spawned"];
_emp

View File

@ -5,36 +5,20 @@
Last modified 10-24-16
*/
private["_veh"];
private["_veh","_modType"];
params["_vehType","_pos"];
//_vehType = _this select 0; // type of vehicle to be spawned
//_pos = _this select 1; // position at which vehicle is to be spawned
//diag_log format["spawnVehicle.sqf: _this = %1",_this];
diag_log format["spawnVehicle.sqf: _this = %1",_this];
_veh = createVehicle[_vehType, _pos, [], 0, "NONE"];
uisleep 0.1;
private["_modType"];
_modType = call blck_getModType;
if (_modType isEqualTo "Epoch") then
{
//_veh call EPOCH_server_vehicleInit;
_veh call EPOCH_server_setVToken;
};
clearWeaponCargoGlobal _veh;
clearMagazineCargoGlobal _veh;
clearBackpackCargoGlobal _veh;
clearItemCargoGlobal _veh;
_veh setVehicleLock "LOCKEDPLAYER";
[_veh] spawn blck_fnc_vehicleMonitor;
_veh addEventHandler ["GetIn",{ // forces player to be ejected if he/she tries to enter the vehicle
private ["_theUnit"];
_theUnit = _this select 2;
if (isPlayer _theUnit) then
{
_theUnit action ["Eject", vehicle _theUnit];
};
}];
[_veh] call blck_fnc_configureMissionVehicle;
_veh

View File

@ -7,20 +7,7 @@
Copyright 2016
Last updated 8-14-16
*/
/*
fn_setWaypoints =
{
private["_group","_center"];
_group = _this select 0; // The group to which waypoints should be assigned
_center = _this select 1; // center of the mission area
while {(count (waypoints _group)) > 0} do
{
deleteWaypoint ((waypoints _group) select 0);
};
[_center,50,100,_group] call blck_fnc_setupWaypoints;
};
*/
private["_vehType","_safepos","_veh"];
params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_maxDis",45],["_group",grpNull] ];
//_pos Center of the mission area
@ -29,9 +16,6 @@ params["_center","_pos",["_vehType","I_G_Offroad_01_armed_F"],["_minDis",30],["_
//_maxDis = maximum distance from the center of the mission for vehicle waypoints
//_groupForVehiclePatrol = The group with which to man the vehicle
//diag_log format["spawnVehiclePatrol:: _pos %1 _vehTypes %2",_pos,_vehType];
//diag_log format["spawnVehiclePatrol:: _minDis %1 _maxDis %2 _groupForVehiclePatrol %3",_minDis,_maxDis,_groupForVehiclePatrol];
if (isNull _group) exitWith {};
_safepos = [_pos,0,25,0,0,20,0] call BIS_fnc_findSafePos;
@ -74,5 +58,7 @@ for "_i" from 1 to _count do
};
_wp = _group addWaypoint [_pos, 25];
_wp setWaypointType "CYCLE";
waitUntil { count crew _veh > 0};
blck_missionVehicles pushback _veh;
_veh

View File

@ -16,7 +16,7 @@ _count = 0;
waitUntil { count crew _veh > 0};
//diag_log format["vehicle Manned %1",_veh];
uiSleep 60;
while { (getDammage _veh > 0) && ({alive _x} count crew _veh > 0)} do
while { (getDammage _veh < 1) && ({alive _x} count crew _veh > 0)} do
{ //diag_log format["vehicleMonitor: vehicle crew consists of %1", crew _veh];
//diag_log format["vehicleMonitor: number of crew alive is %1", {alive _x} count crew _veh];
_veh setVehicleAmmo 1;
@ -44,7 +44,7 @@ while { (getDammage _veh > 0) && ({alive _x} count crew _veh > 0)} do
//diag_log format["vehiclemonitor.sqf all crew for vehicle %1 are dead",_veh];
if (typeOf _veh in blck_staticWeapons) then // always destroy mounted weapons
if (_veh getVariable["DBD_vehType","null"] isEqualTo "emplaced") then // always destroy mounted weapons
{
//diag_log format["vehicleMonitor.sqf: _veh %1 is (in blck_staticWeapons) = true",_veh];
_veh setDamage 1;

View File

@ -0,0 +1,68 @@
/*
Handle the case that all AI assigned to a vehicle are dead.
Allows players to enter and use the vehicle when appropriate
or otherwise destroys the vehicle.
By Ghostrider-DBD-
Copyright 2016
Last updated 8-14-16
*/
diag_log "----<< [blckeagls] VEHICLE MONITOR STARTED >>";
while {true} do
{
private _vehList = blck_missionVehicles;
uiSleep 3;
{
private ["_veh"];
_veh = _x;
if ({alive _x} count crew _veh < 1) then
{
if (_veh getVariable["DBD_vehType","none"] isEqualTo "emplaced") then
{
[_veh] spawn {uiSleep 1;(_this select 0) setDamage 1;};
blck_missionVehicles = blck_missionVehicles - [_veh];
if (blck_debugOn) then{
diag_log format["_fnc_vehicleMonitor:: deleting emplaced weapon %1",_veh];
};
}else {
if (blck_killEmptyAIVehicles) then
{
blck_missionVehicles = blck_missionVehicles - [_veh];
[_veh] spawn {
params["_v"];
//diag_log format["vehicleMonitor.sqf:: case of patrol vehicle: _veh %1 is about to be killed with getAllHitPointsDamage = %2",_v, (getAllHitPointsDamage _v)];
uiSleep 20;
{
_v setHitPointDamage [_x, 1];
diag_log format["vehicleMonitor: hitpart %1 for vehicle %1 set to 1",_x,_v];
} forEach ["HitLFWheel","HitRFWheel","HitEngine","HitLBWheel","HitRBWheel","HitTurret","HitGun"];
if (blck_debugOn) then
{
diag_log format["_fnc_vehicleMonitor:: damage applied to a patrol vehicle -- >> current damage for vehicle %1 is = %2",_v, (getAllHitPointsDamage _v)];
};
uiSleep 60;
if (blck_debugOn) then {
diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle:deleting vehicle _veh",_v];
};
deleteVehicle _v;
};
} else {
//diag_log format["vehicleMonitor.sqf: make vehicle available to players; stripping eventHandlers from_veh %1",_veh];
blck_missionVehicles = blck_missionVehicles - [_veh];
_veh removealleventhandlers "GetIn";
_veh removealleventhandlers "GetOut";
_veh setVehicleLock "UNLOCKED" ;
if (blck_debugOn) then
{
diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_veh];
};
};
};
} else {
_veh setVehicleAmmo 1;
_veh setFuel 1;
};
}forEach _vehList;
};

View File

@ -46,13 +46,14 @@ blck_fnc_setupWaypoints = compileFinal preprocessFileLineNumbers "\q\addons\cus
blck_fnc_spawnEmplacedWeapon = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnEmplaced.sqf"; // Self-evident
blck_fnc_spawnVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehicle.sqf"; // Spawn a temporary vehicle of a specified type at a specific position
blck_fnc_spawnVehiclePatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnVehiclePatrol.sqf"; // Spawn an AI vehicle control and have it patrol the mission perimeter
blck_fnc_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitor.sqf"; // Process events wherein all AI in a vehicle are killed
//blck_fnc_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitor.sqf"; // Process events wherein all AI in a vehicle are killed
//blck_fnc_spawnMissionVehicles = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_spawnMissionVehicles.sqf"; // Spawn non-AI vehicles at missions; these will be filled with loot following the parameters in the composition array for the mission
blck_fnc_Reinforcements = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_reinforcements.sqf";
blck_spawnHeliParaTroops = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_heliSpawnParatroops.sqf";
blck_spawnHeliParaCrate = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_heliSpawnCrate.sqf";
blck_spawnHeliPatrol = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Reinforcements\GMS_fnc_heliSpawnPatrol.sqf";
blck_fnc_protectVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_protectVehicle.sqf";
blck_fnc_configureMissionVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_configureMissionVehicle.sqf";
// functions to support Units
blck_fnc_removeGear = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\Units\GMS_fnc_removeGear.sqf"; // Strip an AI unit of all gear.

View File

@ -6,7 +6,7 @@
Last modified 10/17/16
*/
//blck_variablesLoaded = false;
blck_debugON = false;
blck_debugON = true;
blck_debugLevel = 3;
blck_minFPS = 13;
@ -26,6 +26,7 @@ blck_oldMissionObjects = [];
blck_pendingMissions = [];
blck_activeMissions = [];
blck_deadAI = [];
blck_missionVehicles = [];
// Arrays for use during cleanup of alive AI at some time after the end of a mission
DBD_HeliCrashSites = [];

View File

@ -8,8 +8,8 @@ Credits to Vampire, Narines, KiloSwiss, blckeagls, theFUCHS, lazylink, Mark311 w
Thanks to cyncrwler for testing and bug fixes.
*/
private ["_version","_versionDate"];
_blck_version = "6.3 Build 9";
_blck_versionDate = "10-23-16 1:00 AM";
_blck_version = "6.4 Build 9";
_blck_versionDate = "10-25-16 7:00 PM";
private["_blck_loadingStartTime"];
_blck_loadingStartTime = diag_tickTime;
@ -84,7 +84,7 @@ if (blck_enableBlueMissions == 1) then
{
[_missionListBlue,_pathBlue,"BlueMarker","blue",blck_TMin_Blue,blck_TMax_Blue] spawn blck_fnc_missionTimer;//Starts minor mission system (Blue Map Markers)
};
[] execVM "\q\addons\custom_server\Compiles\Vehicles\GMS_fnc_vehicleMonitorLoop.sqf";
diag_log "[blckeagls] >>--- Completed initialization";
blck_Initialized = true;