bug fix related to HC issues.

1. fixed issues with vehicles not unlocking when released to players when HC was connected.
2. did a major rework of vehicle monitor and a few other bits of code.
This commit is contained in:
Ghostrider-GRG- 2018-08-05 14:04:18 -04:00
parent 1db215a176
commit d72357bdc7
23 changed files with 285 additions and 230 deletions

View File

@ -1,10 +1,15 @@
////////////////////////////////////////////
// Delete and change Mission Markers
// by Ghostrider-GFG-
//////////////////////////////////////////
// delete a marker
/*
Killed handler for _units
By Ghostrider-GRG-
//diag_log format["blck_fnc_deleteMarker:: _this = %1",_this];
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private["_markerName"];
_markerName = _this select 0;
deleteMarker _markerName;

View File

@ -1,6 +1,15 @@
/*
Set Alive AI Count
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_mArray","_count"];

View File

@ -1,10 +1,15 @@
////////////////////////////////////////////
// Create, delete and change Mission Markers
// 7/10/15
// by Ghostrider-GRG-
//////////////////////////////////////////
// spawn a temporary marker to indicate the position of a 'completed' mission
// this will not show to JIP players
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private["_location","_MainMarker","_name"];
//diag_log format["blck_fnc_missionCompleteMarker:: _this = %1",_this];

View File

@ -1,8 +1,15 @@
////////////////////////////////////////////
// Create Mission Markers
// by Ghostrider-GRG-
//////////////////////////////////////////
// spawn a round marker of a size and color specified in passed parameters
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private["_blck_fn_configureRoundMarker"];
_blck_fn_configureRoundMarker = {

View File

@ -1,3 +1,16 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
diag_log format["_fnc_HC_XferGroup:: _this = %1",_this];
private["_group","_client","_unit","_tempEH"];
_group = _this select 0;
@ -9,11 +22,5 @@ _client = clientOwner;
_tempEH = ["reloaded",_unit addEventHandler ["reloaded", {_this call compile preprocessfilelinenumbers blck_EH_unitWeaponReloaded;}]];
_localEH pushBack _tempEH;
_x setVariable["localEH",_localEH,true];
if(_unit != vehicle _unit) then
{
//diag_log format["_fnc_HC_XferGroup: _unit %1 is in vehicle %2",_unit, vehicle _unit];
blck_HC_monitoredVehicles pushBack (vehicle _unit);
//diag_log format["_fnc_HC_XferGroup: blck_HC_monitoredVehicles = %1", blck_HC_monitoredVehicles];
};
}forEach (units _group);
diag_log format["blckHC:: group %1 transferred to HC %1",_group,_client];

View File

@ -1,19 +1,15 @@
/*
blck_fnc_HC_XferGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf";
//blck_fnc_HC_XferVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferVehicle.sqf";
blck_fnc_onPlayerDisconnected = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_onPlayerDisconnected.sqf";
//blck_fnc_HC_groupsAssigned = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_groupsAssigned.sqf";
blck_fnc_HC_monitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HCmonitor.sqf";
blck_fnc_HC_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_vehicleMonitor.sqf";
blck_fnc_monitorHC = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_monitorHC.sqf";
blck_fnc_passToHCs = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_passToHCs.sqf";
blck_fnc_HC_getListConnected = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_getListConnected.sqf";
blck_fnc_HC_leastBurdened = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_leastBurdened.sqf";
blck_fnc_HC_countGroupsAssigned = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_countGroupsAssigned.sqf";
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//blck_fnc_HC_countGroupsAssigned =
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_HC"];
private["_result"];

View File

@ -1,9 +1,18 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
//blck_fnc_HC_getListConnected =
private _hcs = entities "HeadlessClient_F";
//diag_log format["_fnc_HC_getListConected: _hcs = %1",_hcs];
_hcs
private _hcs = [];
{
if !(_x in _hcs) then {_hcs pushBack _x};
}forEach entities "HeadlessClient_F";
_hcs

View File

@ -1,18 +1,19 @@
/*
* passToHCs.sqf
*
* In the mission editor, name the Headless Clients "HC", "HC2", "HC3" without the quotes
*
* In the mission init.sqf, call passToHCs.sqf with:
* execVM "passToHCs.sqf";
*
* It seems that the dedicated server and headless client processes never use more than 20-22% CPU each.
* With a dedicated server and 3 headless clients, that's about 88% CPU with 10-12% left over. Far more efficient use of your processing power.
*
*/
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
private _clientId = clientOwner;
private _groupsOwned = {groupOwner _x isEqualTo _clientId)} count allGroups;
//diag_log format["_fnc_HC_groupsAssigned:: %1 groups running on client %2",_groupsOwned,_clientId];
_groupsOwned
//[_clientId,_groupsOwned] remoteExec ["blck_fnc_updateClientGroupCounts",2];
_clientId = clientOwner;
_allGroups = allGroups;
_groupsOwned = {groupOwner _x isEqualTo _clientId)} count allGroups;
[_clientId,_groupsOwned] remoteExec ["blck_fnc_updateClientGroupCounts",2];
diag_log format["_fnc_HC_groupsAssigned:: %1 groups running on client %2",_groupsOwned,_clientId];

View File

@ -1,23 +1,20 @@
/*
blck_fnc_HC_XferGroup = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferGroup.sqf";
//blck_fnc_HC_XferVehicle = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_XferVehicle.sqf";
blck_fnc_onPlayerDisconnected = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_onPlayerDisconnected.sqf";
//blck_fnc_HC_groupsAssigned = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_groupsAssigned.sqf";
blck_fnc_HC_monitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HCmonitor.sqf";
blck_fnc_HC_vehicleMonitor = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_vehicleMonitor.sqf";
blck_fnc_monitorHC = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_monitorHC.sqf";
blck_fnc_passToHCs = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_passToHCs.sqf";
blck_fnc_HC_getListConnected = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_getListConnected.sqf";
blck_fnc_HC_leastBurdened = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_leastBurdened.sqf";
blck_fnc_HC_countGroupsAssigned = compileFinal preprocessFileLineNumbers "\q\addons\custom_server\Compiles\HC\GMS_fnc_HC_countGroupsAssigned.sqf";
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//blck_fnc_HC_leastBurdened =
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_HC_List"];
private["_result","_fewestGroupsAssigned","_leastBurdened","_groupsAssigned"];
if (count _HC_List == 0) exitWith {_result = objNull; _result};
if (count _HC_List == 1) exitWith {_result = _HC_List select 0; _result}:
private["_result","_fewestGroupsAssigned","_leastBurdened","_groupsAssigned"];
_fewestGroupsAssigned = [_HC_List select 0] call blck_fnc_HC_countGroupsAssigned;
_leastBurdened = _HC_List select 0;
{
@ -28,5 +25,5 @@ _leastBurdened = _HC_List select 0;
_fewestGroupsAssigned = _groupsAssigned;
};
}forEach _HC_List;
//diag_log format["_fnc_leastBurdened:: _fewestGroupsAssigned = %1 and _leastBurdened = %2",_fewestGroupsAssigned,_leastBurdened];
diag_log format["_fnc_leastBurdened:: _fewestGroupsAssigned = %1 and _leastBurdened = %2",_fewestGroupsAssigned,_leastBurdened];
_leastBurdened

View File

@ -1,8 +1,17 @@
/*
Killed handler for _units
By Ghostrider-GRG-
vehicles = count blck_HC_monitoredVehicles;
*/
diag_log "_fnc_HC_monitor.sqf";
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
diag_log "_fnc_HC_monitor.sqf <RUNNING>";
_blckGroups = 0;
_otherGroups = 0;
_totalGroups = 0;
@ -11,28 +20,6 @@ diag_log "_fnc_HC_monitor.sqf";
_timer3min = 0;
while {true} do
{
if (diag_tickTime > _timerOneSec) then
{
_timerOneSec = diag_tickTime + 1;
[] call blck_fnc_HC_vehicleMonitor;
};
if (diag_tickTime > _timerSixtySec) then
{
_timerSixtySec = diag_tickTime + 60;
private _theGroups = blck_HC_monitoredGroups;
{
if (isNull _x) then {blck_HC_monitoredGroups = blck_HC_monitoredGroups - [_x]};
if ( {alive _x} count (units _x) == 0) then { blck_HC_monitoredGroups = blck_HC_monitoredGroups - [_x]};
} forEach _theGroups;
//_blckGroups = count blck_HC_monitoredGroups;
//_totalGroups = {(groupOwner _x) isEqualTo clientOwner} count allGroups;
//_totalGroups = _blckGroups + _otherGroups;
//diag_log format["blckHC:: headless client %1 ",_blckGroups,_otherGroups];
};
if (diag_tickTime > _timer3min) then
{
_timer3min = diag_tickTime + 300;
diag_log format["blckHC:: headless client %1 | time stamp %2 | %3 fps | _blckGroups = %4 _otherGroups = %5 | vehicles %6",clientOwner,diag_tickTime,diag_fps, count blck_HC_monitoredGroups,{ ((groupOwner _x) isEqualTo clientOwner) && !(_x getVariable["blck_group",true])} count allGroups, count blck_HC_monitoredVehicles ];
};
uiSleep 1;
};

View File

@ -1,3 +1,16 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_name","_owner"];
//diag_log format["_fnc_onPlayerDisconnected triggered with _name = %1 and _owner = %2",_name,_owner];
private["_HCownerids","_groupLocalEH","_vehicleLocalEH"];

View File

@ -1,52 +1,67 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
if (!isServer) exitWith {};
blck_fnc_countGroupsAssigned = {
params["_HC"];
private["_result"];
_result = {(groupOwner _x) == (owner _HC)} count allGroups;
//diag_log format["_fnc_countGroupsAssigned = %1",_result];
_result
};
//diag_log format["_fnc_passToHCs:: function called at server time %1",diag_tickTime];
private["_numTransfered","_clientId","_allGroups","_groupsOwned","_idHC","_id","_swap","_rc"];
blck_connectedHCs = call blck_fnc_HC_getListConnected;
diag_log format["_fnc_passToHCs:: blck_connectedHCs = %1 | count _HCs = %2 | server FPS = %3",blck_connectedHCs,count blck_connectedHCs,diag_fps];
_numTransfered = 0;
_idHC = -2;
blck_connectedHCs = call blck_fnc_HC_getListConnected; // Double check on this function; seems overly complicated.
//diag_log format["_fnc_passToHCs:: blck_connectedHCs = %1 | count _HCs = %2 | server FPS = %3",blck_connectedHCs,count blck_connectedHCs,diag_fps];
if ( (count blck_connectedHCs) > 0) then
{
_idHC = [blck_connectedHCs] call blck_fnc_HC_leastBurdened;
diag_log format["passToHCs: evaluating passTos for HC %1 || owner HC = %2",_idHC, owner _idHC];
//diag_log format["passToHCs: evaluating passTos for HC %1 || owner HC = %2",_idHC, owner _idHC];
{
// Pass the AI
_numTransfered = 0;
if (_x getVariable["blck_group",false]) then
{
if ((leader _x) != vehicle (leader _x)) then
//diag_log format["group belongs to blckeagls mission system so time check if we should transfer it"];
//diag_log format["Owner of group %1 is %2",_x,groupOwner _x];
if ((groupOwner _x) == 2) then
{
private _v = vehicle (leader _x);
blck_monitoredVehicles = blck_monitoredVehicles - [_v];
blck_HC_monitoredVehicles pushBack _v;
};
//diag_log format["group belongs to blckeagls mission system so time to transfer it"];
if ((typeName _x) isEqualTo "GROUP") then
{
_id = groupOwner _x;
//diag_log format["Owner of group %1 is %2",_x,_id];
if (_id > 2) then
//diag_log format["blckeagls group %1 is on the server: we should be moved to HC %2 with _idHC %3",_x,_idHC];
_x setVariable["owner",owner _idHC];
_x setVariable["Group",group (driver _x)),true]
private _sgor = _x setGroupOwner (owner _idHC);
//diag_log format["setGroupOwner returned %1",_sgor];
//diag_log format["_veh %1 variable owner set to %2",getVariable _veh["owner",-1]];
//diag_log format["_veh %1 Group set to %2",_veh getVariable["Group",grpNull]];
if (_sgor) then
{
//diag_log format["group %1 is already assigned to an HC with _id of %2",_x,_id];
_swap = false;
} else {
//diag_log format["group %1 should be moved to HC %2 with _idHC %3",_x,_idHC];
_x setVariable["owner",owner _idHC];
_rc = _x setGroupOwner (owner _idHC);
[_x] remoteExec["blck_fnc_HC_XferGroup",_idHC];
if ( _rc ) then
{
_numTransfered = _numTransfered + 1;
//diag_log format["group %1 transferred to %2",_x, groupOwner _x];
} else {
//diag_log format["something went wrong with the transfer of group %1",_x];
};
_numTransfered = _numTransfered + 1;
//diag_log format["group %1 transferred to %2",_x, groupOwner _x];
} else {
//diag_log format["something went wrong with the transfer of group %1",_x];
};
};
} else {
//diag_log format["group %1 does not belong to blckeagls mission system",_x];
};
} forEach (allGroups);
//diag_log format["_passToHCs:: %1 groups transferred to HC %2",_numTransfered,_idHC];
_numTransfered = 0;
diag_log format["[blckeagls] _passToHCs:: %1 groups transferred to HC %2",_numTransfered,_idHC];
//_numTransfered = 0;
// Note : the owner of a vehicle is the owner of the driver so vehicles are automatically transferred to the HC when the group to which the driver is assigned is transferred.
} else {

View File

@ -70,7 +70,7 @@ if ( (count _missionGroups > 0) && _noAIGroups > 0) then
else
{
_newAI = units _newGroup;
blck_monitoredMissionAIGroups pushback _newGroup;
//blck_monitoredMissionAIGroups pushback _newGroup;
#ifdef blck_debugMode
if (blck_debugLevel >= 2) then
{

View File

@ -74,10 +74,10 @@ if (_missionPatrolVehicles isEqualTo []) then
{
_abort = true;
};
if !(isNull _vehGroup) then
{
blck_monitoredMissionAIGroups pushBack _vehGroup;
};
//if !(isNull _vehGroup) then
//{
//blck_monitoredMissionAIGroups pushBack _vehGroup;
//};
#ifdef blck_debugMode

View File

@ -21,19 +21,7 @@ if (_unit getVariable["blck_cleanupAt",-1] > 0) exitWith {};
//diag_log format["_fnc_processAIKills:: function called with _this = %1",_this];
_unit setVariable ["blck_cleanupAt", (diag_tickTime) + blck_bodyCleanUpTimer, true];
//diag_log format["_fnc_processAIKills: _unit = %1 | vehicle unit = %2",_unit, vehicle _unit];
/*
if (_unit != (vehicle _unit) then
{
diag_log format["_fnc_processAIKills: evaluating status of crew of vehicle %1",vehicle _unit]
if ( {alive _x} count (crew (vehicle _unit)) < 1) then
{
diag_log format["_fnc_processAIKills: all crew dead, releasing vehicle"];
[vehicle _unit] call blck_fnc_releaseVehicleToPlayers;
} else {
diag_log format["_fnc_processAIKills: vehicle %1 still has %2 crew alive",vehicle _unit, {alive _x} crew (vehicle _unit)];
};
};
*/
blck_deadAI pushback _unit;
_group = group _unit;
[_unit] joinSilent grpNull;
@ -65,8 +53,8 @@ if ((diag_tickTime - _lastkill) < 240) then
_killer setVariable["blck_kills",0];
};
_unit action ["Eject", vehicle _unit];
//_unit action ["Eject", vehicle _unit];
[_unit, ["Eject", vehicle _unit]] remoteExec ["action",(owner _unit)];
if (blck_useKillMessages) then
{
_weapon = currentWeapon _killer;

View File

@ -67,6 +67,6 @@ for "_i" from 1 to _numAI do
};
blck_monitoredMissionAIGroups pushback _paraGroup;
//blck_monitoredMissionAIGroups pushback _paraGroup;
_paraGroup

View File

@ -11,6 +11,6 @@
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
//#include "\q\addons\custom_server\Configs\blck_defines.hpp";
diag_log format["_EH_processAIVehicleKill: _this = %1",_this];
//diag_log format["_EH_processAIVehicleKill: _this = %1",_this];
if !(isDedicated) exitWith {};
_this call blck_fnc_processAIVehicleKill;

View File

@ -1,8 +1,16 @@
//_fn_destroyVehicleAndCrew = {
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
//private["_crew"];
//_crew = crew _veh;
//diag_log format["_fn_destroyVehicleAndCrew: called for _veh = %1",_veh];
{[_x] call blck_fnc_deleteAI;} forEach (crew _veh);
[_veh] call blck_fnc_deleteAIvehicle;

View File

@ -1,23 +1,50 @@
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
//blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
_veh setVehicleLock "UNLOCKED" ;
//_v setVariable["releasedToPlayers",true];
//[_v] call blck_fnc_emptyObject;
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
//diag_log format["_fnc_releaseVehicleToPlayersl: _veh = %1 | (owner _veh) = %2",_veh,(owner _veh)];
//diag_log format["_fnc_releaseVehicleToPlayersl: initial lock state of vehicle 51 = %2",_veh,locked _veh];
//_veh setVehicleLock "UNLOCKED" ;
_locked = true;
_count = 0;
_timeIn = diag_tickTime;
while {_count < 2} do
{
//diag_log format["_fnc_releaseVehicleToPlayersl: attempting to unlock vehicle %1",_veh];
[_veh,"UNLOCKED"] remoteExec ["setVehicleLock",0]; // unlock on all clients so we don't have to worry about any change of ownership when the driver is ejected.
// a bit of bandwidth seems worth ensuring that vehicles do in fact get unlocked.
uiSleep 0.1;
_count = _count + 1;
diag_log format["_fnc_releaseVehicleToPlayersl: locked state of vehicle %1 = ^%2",_veh, locked _veh];
//if ((_veh locked) isEqualTo "UNLOCKED" || (diag_tickTime - _timeIn) > 5) then {_locked = false};
};
// {player setAmmo [primaryWeapon player, 1];} remoteExec ["bis_fnc_call", 0];
//{[_veh setVehicleLock "UNLOCKED"];} remoteExec ["BIS_fnc_call",(owner _veh)];
{
_veh removealleventhandlers _x;
} forEach ["GetIn","GetOut","fired","hit","hitpart","reloaded","dammaged","HandleDamage"];
{
_veh removeAllMPEventHandlers _x;
} forEach ["MPHit","MPKilled"];
_veh setVariable["blck_releasedAt",diag_tickTime,true];
_veh setVariable["blck_DeleteAt",diag_tickTime + blck_vehicleDeleteTimer,true];
if ((damage _veh) > 0.5) then {_veh setDamage 0.5};
//diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1 and blck_deleteAT = %2",_veh, _veh getVariable["blck_DeleteAt",0]];
if ((damage _veh) > 0.6) then {_veh setDamage 0.6};
#ifdef blck_debugMode
if (blck_debugLevel > 2) then
{
diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_veh];
};
#endif
//diag_log format["_fnc_vehicleMonitor:: case of patrol vehicle released to players where vehicle = %1",_veh];

View File

@ -1,6 +1,18 @@
//_fn_reloadAmmo = {
/*
Killed handler for _units
By Ghostrider-GRG-
--------------------------
License
--------------------------
All the code and information provided here is provided under an Attribution Non-Commercial ShareAlike 4.0 Commons License.
http://creativecommons.org/licenses/by-nc-sa/4.0/
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
params["_veh"];
private ["_crew","_mag","_allMags","_cnt"];
// https://community.bistudio.com/wiki/fullCrew

View File

@ -149,7 +149,7 @@ if !(isNull _grpPilot) then
};
#endif
blck_monitoredMissionAIGroups pushBack _grpPilot;
//blck_monitoredMissionAIGroups pushBack _grpPilot;
};
//diag_log format["[blckeagls] _fnc_spawnMissionHeli:: _patrolHeli %1 | _grpPilot %2 | _abort %3",_patrolHeli,_grpPilot,_abort];
_return = [_patrolHeli,units _grpPilot,_abort];

View File

@ -11,29 +11,13 @@
*/
#include "\q\addons\custom_server\Configs\blck_defines.hpp";
//diag_log format["_fnc_vehicleMonitor: starting function at diag_tickTime = %1",diag_tickTime];
#ifdef blck_debugMode
//diag_log format["_fnc_vehicleMonitor:: blck_debugMode defined"];
#endif
private ["_vehList","_veh","_isEmplaced","_ownerIsPlayer","_allCrewDead","_deleteNow","_missionCompleted","_evaluate","_cleanupTimer"];
private ["_vehList","_veh","_isEmplaced","_ownerIsPlayer","_allCrewDead","_deleteNow","_evaluate"];
_vehList = +blck_monitoredVehicles;
#ifdef blck_debugMode
if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 and blck_monitoredVehicles %3",diag_tickTime,_vehList,blck_monitoredVehicles];};
#endif
//diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 and blck_monitoredVehicles %3",diag_tickTime,_vehList,blck_monitoredVehicles];
// Check for any vehicles no longer on an HC
{
if ( (owner _x) == 2) then
{
// vehicle no longer on headless client
blck_HC_monitoredVehicles - blck_HC_monitoredVehicles - [_x];
blck_monitoredVehicles pushBack _x;
};
} forEach blck_HC_monitoredVehicles;
//diag_log format["_fnc_vehicleMonitor:: function called at %1 with _vehList %2 ",diag_tickTime,_vehList,blck_monitoredVehicles];
{
/*
@ -41,34 +25,33 @@ if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: function c
_isEmplaced
_ownerIsPlayer
_allCrewDead
_deleteNow
_handleReloadRefuel (0)
_scheduleDeletion (2) [_allCrewDead && !_isEmplaced && !_scheduled] // all vehicles other than statics
_disableNow and schedule for deletion (1) [_allCrewDead && _isEmplaced] // emplaced weapons
_deleteNow (3)
_releaseToPlayer (4) [_allCrewDead && !_isEmplaced && _ownerIsPlayer]
_default (5) reload rearm
*/
//diag_log format["_fnc_vehicleMonitor: evaluating vehicle %1",_x];
if (local _x) then
if (true) then
{
private["_veh","_isEmplaced","_ownerIsPlayer","_allCrewDead","_deleteNow","_evaluate"];
_veh = _x; // (purely for clarity at this point, _x could be used just as well)
_isEmplaced = _veh getVariable["GRG_vehType","none"] isEqualTo "emplaced";
_ownerIsPlayer = if (owner _veh > 2 && !(owner _veh in blck_connectedHCs)) then {true} else {false};
_allCrewDead = if (({alive _x} count (crew _veh)) == 0) then {true} else {false};
//diag_log format["_fnc_vehicleMonitor: _allCrewDead = %1",_allCrewDead];
_deletenow = false;
if ( (_veh getVariable["blck_DeleteAt",0] > 0) && (diag_tickTime > (_veh getVariable "blck_DeleteAt"))) then {_deleteNow = true};
_missionCompleted = if (_veh getVariable["missionCompleted",0] != 0) then {true} else {false};
_evaluate = true;
if (_ownerIsPlayer) then
_evaluate = 0;
if (_allCrewDead && _isEmplaced && (_veh getVariable["blck_deleteAt",0] == 0)) then {_evaluate = 1};
if (_allCrewDead && !(_isEmplaced) && (_veh getVariable["blck_deleteAt",0] == 0)) then {_evaluate = 2};
if ((_veh getVariable["blck_deleteAt",0] > 0) && (diag_tickTime > (_veh getVariable["blck_deleteAt",0]))) then {_evaluate = 3};
if (/*_ownerIsPlayer*/ (owner _veh > 2) && !(owner _veh in blck_connectedHCs)) then {_evaluate = 4};
//diag_log format["_fnc_vehicleMonitor: vehicle = %1 | owner = %2 | crew = %2",_veh, owner _veh, {alive _x} count (crew _veh)];
switch (_evaluate) do
{
// disable further monitoring and mark to never be deleted.
_evaluate = false;
_veh setVariable["blck_DeleteAt",0];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
//diag_log format["_fnc_vehicleMonitor: vehicle %1 now owned by player %2",_veh, owner _veh];
};
if (_allCrewDead && _evaluate) then
{
if (_isEmplaced) then
{
case 0:{[_veh] call blck_fnc_reloadVehicleAmmo;};
case 1:{
if (blck_killEmptyStaticWeapons) then
{
#ifdef blck_debugMode
@ -79,37 +62,23 @@ if (blck_debugLevel > 2) then {diag_log format["_fnc_vehicleMonitor:: function c
}else {
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
_evaluate = false;
} else {
};
case 2:{
if (blck_killEmptyAIVehicles) then
{
_veh setDamage 0.7;
_veh setVariable["blck_DeleteAt",diag_tickTime + 60];
} else {
//diag_log format["_fnc_vehicleMonitor:: case of RELEASE where vehicle = %1 and Vehicle is typeOf %2",_veh, typeOf _veh];
[_veh] call blck_fnc_releaseVehicleToPlayers;
};
_evaluate = false;
};
};
if (_missionCompleted && !(_allCrewDead)) then
{
//diag_log format["_fnc_vehicleMonitor:: case of mission vehicle with AI alive at mission end: schedule destruction with _veh = %1 and typeOf _veh = %2",_veh, typeOf _veh];
_cleanupTimer = _veh getVariable["blck_DeleteAt",0]; // The time delete to deleting any alive AI units
if (_cleanupTimer == 0) then {_veh setVariable["blck_DeleteAt",diag_tickTime + blck_vehicleDeleteTimer]};
_evaluate = false;
};
if (_evaluate) then
{
[_veh] call blck_fnc_reloadVehicleAmmo;
};
if (_deleteNow) then
{
[_veh] call blck_fnc_destroyVehicleAndCrew;
_evaluate = false;
case 3:{
[_veh] call blck_fnc_destroyVehicleAndCrew;
};
case 4:{
_veh setVariable["blck_DeleteAt",nil];
blck_monitoredVehicles = blck_monitoredVehicles - [_veh];
};
};
};
}forEach _vehList;

View File

@ -12,7 +12,7 @@
*/
#include"\q\addons\custom_server\Configs\blck_defines.hpp";
blck_debugON = false;
blck_debugON = true;
blck_debugLevel = 0; // Sets level of detail for debugging info - WIP.
blck_minFPS = 8;
@ -36,8 +36,8 @@ blck_connectedHCs = [];
blck_missionMarkers = [];
blck_groupsOnHC = [];
blck_vehiclesOnHC = [];
blck_HC_monitoredVehicles = [];
blck_HC_monitoredGroups = [];
//blck_HC_monitoredVehicles = [];
//blck_HC_monitoredGroups = [];
#ifdef useDynamicSimulation
"Group" setDynamicSimulationDistance 1800;
enableDynamicSimulationSystem true;