mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-15 04:23:13 +03:00
Server Done I Think
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
|
||||
|
||||
waituntil {!isnil "bis_fnc_init"};
|
||||
|
||||
BIS_MPF_remoteExecutionServer = {
|
||||
@@ -7,6 +9,7 @@ BIS_MPF_remoteExecutionServer = {
|
||||
};
|
||||
|
||||
BIS_Effects_Burn = {};
|
||||
dayz_disconnectPlayers = [];
|
||||
server_playerLogin = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerLogin.sqf";
|
||||
server_playerSetup = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSetup.sqf";
|
||||
server_onPlayerDisconnect = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_onPlayerDisconnect.sqf";
|
||||
@@ -21,87 +24,62 @@ server_publishVeh3 = compile preprocessFileLineNumbers "\z\addons\dayz_server
|
||||
server_tradeObj = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_tradeObject.sqf";
|
||||
server_traders = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_traders.sqf";
|
||||
server_playerSync = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerSync.sqf";
|
||||
server_spawnCrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf";
|
||||
//server_spawnCrashSite = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnCrashSite.sqf";
|
||||
server_spawnEvents = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_spawnEvent.sqf";
|
||||
//server_weather = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_weather.sqf";
|
||||
fnc_plyrHit = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fnc_plyrHit.sqf";
|
||||
server_deaths = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_playerDeaths.sqf";
|
||||
server_maintainArea = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_maintainArea.sqf";
|
||||
zombie_findOwner = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_findOwner.sqf";
|
||||
server_updateNearbyObjects = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_updateNearbyObjects.sqf";
|
||||
server_Wildgenerate = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\zombie_Wildgenerate.sqf";
|
||||
server_plantSpawner = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_plantSpawner.sqf";
|
||||
base_fireMonitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\fire_monitor.sqf";
|
||||
server_systemCleanup = compile preprocessFileLineNumbers "\z\addons\dayz_server\system\server_cleanup.sqf";
|
||||
|
||||
spawnComposition = compile preprocessFileLineNumbers "ca\modules\dyno\data\scripts\objectMapper.sqf"; //"\z\addons\dayz_code\compile\object_mapper.sqf";
|
||||
|
||||
/* PVS/PVC - Skaronator */
|
||||
server_sendToClient = compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_sendToClient.sqf";
|
||||
|
||||
//onPlayerConnected {[_uid,_name] call server_onPlayerConnect;};
|
||||
onPlayerDisconnected {[_uid,_name] call server_onPlayerDisconnect;};
|
||||
|
||||
server_updateNearbyObjects = {
|
||||
private["_pos"];
|
||||
_pos = _this select 0;
|
||||
{
|
||||
[_x, "gear"] call server_updateObject;
|
||||
} count nearestObjects [_pos, dayz_updateObjects, 10];
|
||||
server_sendToClient = compile preprocessFileLineNumbers "\z\addons\dayz_server\eventHandlers\server_sendToClient.sqf";
|
||||
server_medicalSync = {
|
||||
_player = _this select 0;
|
||||
_array = _this select 1;
|
||||
|
||||
_player setVariable["USEC_isDead",(_array select 0)]; //0
|
||||
_player setVariable["NORRN_unconscious", (_array select 1)]; //1
|
||||
_player setVariable["USEC_infected",(_array select 2)]; //2
|
||||
_player setVariable["USEC_injured",(_array select 3)]; //3
|
||||
_player setVariable["USEC_inPain",(_array select 4)]; //4
|
||||
_player setVariable["USEC_isCardiac",(_array select 5)]; //5
|
||||
_player setVariable["USEC_lowBlood",(_array select 6)]; //6
|
||||
_player setVariable["USEC_BloodQty",(_array select 7)]; //7
|
||||
// _wounds; //8
|
||||
// [_legs,_arms]; //9
|
||||
_player setVariable["unconsciousTime",(_array select 10)]; //10
|
||||
_player setVariable["blood_type",(_array select 11)]; //11
|
||||
_player setVariable["rh_factor",(_array select 12)]; //12
|
||||
_player setVariable["messing",(_array select 13)]; //13
|
||||
_player setVariable["blood_testdone",(_array select 14)]; //14
|
||||
};
|
||||
|
||||
server_handleZedSpawn = {
|
||||
private["_zed"];
|
||||
_zed = _this select 0;
|
||||
_zed enableSimulation false;
|
||||
dayz_Achievements = {
|
||||
_achievementID = (_this select 0) select 0;
|
||||
_player = (_this select 0) select 1;
|
||||
_playerOwnerID = owner _player;
|
||||
|
||||
_achievements = _player getVariable "Achievements";
|
||||
|
||||
_achievements set [_achievementID,1];
|
||||
|
||||
_player setVariable ["Achievements",_achievements];
|
||||
};
|
||||
|
||||
zombie_findOwner = {
|
||||
private["_unit"];
|
||||
_unit = _this select 0;
|
||||
#ifdef DZE_SERVER_DEBUG
|
||||
diag_log ("CLEANUP: DELETE UNCONTROLLED ZOMBIE: " + (typeOf _unit) + " OF: " + str(_unit) );
|
||||
#endif
|
||||
deleteVehicle _unit;
|
||||
};
|
||||
|
||||
vehicle_handleInteract = {
|
||||
private["_object"];
|
||||
_object = _this select 0;
|
||||
needUpdate_objects = needUpdate_objects - [_object];
|
||||
[_object, "all"] call server_updateObject;
|
||||
};
|
||||
|
||||
array_reduceSizeReverse = {
|
||||
private["_array","_count","_num","_newarray","_startnum","_index"];
|
||||
_array = _this select 0;
|
||||
_newarray = [];
|
||||
_count = _this select 1;
|
||||
_num = count _array;
|
||||
if (_num > _count) then {
|
||||
_startnum = _num - 1;
|
||||
_index = _count - 1;
|
||||
for "_i" from 0 to _index do {
|
||||
_newarray set [(_index-_i),_array select (_startnum - _i)];
|
||||
};
|
||||
_array = _newarray;
|
||||
};
|
||||
_array
|
||||
};
|
||||
|
||||
array_reduceSize = {
|
||||
private ["_array1","_array","_count","_num"];
|
||||
_array1 = _this select 0;
|
||||
_array = _array1 - ["Hatchet_Swing","Machete_Swing","Fishing_Swing","sledge_swing","crowbar_swing","CSGAS"];
|
||||
_count = _this select 1;
|
||||
_num = count _array;
|
||||
if (_num > _count) then {
|
||||
_array resize _count;
|
||||
};
|
||||
_array
|
||||
};
|
||||
|
||||
object_handleServerKilled = {
|
||||
private["_unit","_objectID","_objectUID","_killer"];
|
||||
vehicle_handleServerKilled = {
|
||||
private["_unit","_killer"];
|
||||
_unit = _this select 0;
|
||||
_killer = _this select 1;
|
||||
|
||||
_objectID = _unit getVariable ["ObjectID","0"];
|
||||
_objectUID = _unit getVariable ["ObjectUID","0"];
|
||||
|
||||
[_objectID,_objectUID,_killer] call server_deleteObj;
|
||||
[_unit, "killed"] call server_updateObject;
|
||||
|
||||
_unit removeAllMPEventHandlers "MPKilled";
|
||||
_unit removeAllEventHandlers "Killed";
|
||||
@@ -111,17 +89,32 @@ object_handleServerKilled = {
|
||||
};
|
||||
|
||||
check_publishobject = {
|
||||
private["_allowed","_object","_playername"];
|
||||
private ["_saveObject","_allowed","_allowedObjects","_object","_playername"];
|
||||
|
||||
_object = _this select 0;
|
||||
_playername = _this select 1;
|
||||
_allowed = false;
|
||||
|
||||
if ((typeOf _object) in dayz_allowedObjects) then {
|
||||
//diag_log format ["DEBUG: Object: %1 published by %2 is Safe",_object, _playername];
|
||||
_allowed = true;
|
||||
#ifdef OBJECT_DEBUG
|
||||
diag_log format ["DEBUG: Checking if Object: %1 is allowed, published by %2", _object, _playername];
|
||||
#endif
|
||||
|
||||
if ((typeOf _object) in DayZ_SafeObjects) then {
|
||||
_saveObject = "DayZ_SafeObjects";
|
||||
_allowed = true;
|
||||
};
|
||||
_allowed
|
||||
|
||||
//Buildings
|
||||
if (_object iskindof "DZ_buildables") then {
|
||||
_saveObject = "DZ_buildables";
|
||||
_allowed = true;
|
||||
};
|
||||
|
||||
#ifdef OBJECT_DEBUG
|
||||
diag_log format ["DEBUG: Object: %1 published by %2 is allowed by %3",_object, _playername, _saveObject];
|
||||
#endif
|
||||
|
||||
_allowed
|
||||
};
|
||||
|
||||
//event Handlers
|
||||
@@ -168,387 +161,7 @@ server_hiveReadWrite = {
|
||||
_resultArray
|
||||
};
|
||||
|
||||
server_hiveReadWriteLarge = {
|
||||
private["_key","_resultArray","_data"];
|
||||
_key = _this;
|
||||
_data = "HiveExt" callExtension _key;
|
||||
_resultArray = call compile _data;
|
||||
_resultArray
|
||||
};
|
||||
|
||||
server_checkIfTowed = {
|
||||
private ["_vehicle","_player","_attached"];
|
||||
if (DZE_HeliLift) then {
|
||||
_vehicle = _this select 0;
|
||||
_player = _this select 2;
|
||||
_attached = _vehicle getVariable["attached",false];
|
||||
if (typeName _attached == "OBJECT") then {
|
||||
_player action ["eject", _vehicle];
|
||||
detach _vehicle;
|
||||
_vehicle setVariable["attached",false,true];
|
||||
_attached setVariable["hasAttached",false,true];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
server_characterSync = {
|
||||
private ["_characterID","_playerPos","_playerGear","_playerBackp","_medical","_currentState","_currentModel","_key"];
|
||||
_characterID = _this select 0;
|
||||
_playerPos = _this select 1;
|
||||
_playerGear = _this select 2;
|
||||
_playerBackp = _this select 3;
|
||||
_medical = _this select 4;
|
||||
_currentState = _this select 5;
|
||||
_currentModel = _this select 6;
|
||||
|
||||
_key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,0,0,0,0,_currentState,0,0,_currentModel,0];
|
||||
_key call server_hiveWrite;
|
||||
};
|
||||
|
||||
if(isnil "dayz_MapArea") then {
|
||||
dayz_MapArea = 10000;
|
||||
};
|
||||
if(isnil "DynamicVehicleArea") then {
|
||||
DynamicVehicleArea = dayz_MapArea / 2;
|
||||
};
|
||||
|
||||
// Get all buildings && roads only once TODO: set variables to nil after done if nessicary
|
||||
MarkerPosition = getMarkerPos "center";
|
||||
RoadList = MarkerPosition nearRoads DynamicVehicleArea;
|
||||
|
||||
// Very taxing !!! but only on first startup
|
||||
BuildingList = [];
|
||||
{
|
||||
if (DZE_MissionLootTable) then {
|
||||
if (isClass (missionConfigFile >> "CfgBuildingLoot" >> (typeOf _x))) then
|
||||
{
|
||||
BuildingList set [count BuildingList,_x];
|
||||
};
|
||||
} else {
|
||||
if (isClass (configFile >> "CfgBuildingLoot" >> (typeOf _x))) then
|
||||
{
|
||||
BuildingList set [count BuildingList,_x];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
} count (MarkerPosition nearObjects ["building",DynamicVehicleArea]);
|
||||
|
||||
spawn_vehicles = {
|
||||
private ["_random","_lastIndex","_weights","_index","_vehicle","_velimit","_qty","_isAir","_isShip","_position","_dir","_istoomany","_veh","_objPosition","_marker","_iClass","_itemTypes","_cntWeights","_itemType","_num","_allCfgLoots"];
|
||||
|
||||
if (!isDedicated) exitWith { }; //Be sure the run this
|
||||
|
||||
while {count AllowedVehiclesList > 0} do {
|
||||
// BIS_fnc_selectRandom replaced because the index may be needed to remove the element
|
||||
_index = floor random count AllowedVehiclesList;
|
||||
_random = AllowedVehiclesList select _index;
|
||||
|
||||
_vehicle = _random select 0;
|
||||
_velimit = _random select 1;
|
||||
|
||||
_qty = {_x == _vehicle} count serverVehicleCounter;
|
||||
|
||||
// If under limit allow to proceed
|
||||
if (_qty <= _velimit) exitWith {};
|
||||
|
||||
// vehicle limit reached, remove vehicle from list
|
||||
// since elements cannot be removed from an array, overwrite it with the last element && cut the last element of (as long as order is not important)
|
||||
_lastIndex = (count AllowedVehiclesList) - 1;
|
||||
if (_lastIndex != _index) then {
|
||||
AllowedVehiclesList set [_index, AllowedVehiclesList select _lastIndex];
|
||||
};
|
||||
AllowedVehiclesList resize _lastIndex;
|
||||
};
|
||||
|
||||
if (count AllowedVehiclesList == 0) then {
|
||||
diag_log("DEBUG: unable to find suitable vehicle to spawn");
|
||||
} else {
|
||||
|
||||
// add vehicle to counter for next pass
|
||||
serverVehicleCounter set [count serverVehicleCounter,_vehicle];
|
||||
|
||||
// Find Vehicle Type to better control spawns
|
||||
_isAir = _vehicle isKindOf "Air";
|
||||
_isShip = _vehicle isKindOf "Ship";
|
||||
|
||||
if(_isShip || _isAir) then {
|
||||
if(_isShip) then {
|
||||
// Spawn anywhere on coast on water
|
||||
waitUntil{!isNil "BIS_fnc_findSafePos"};
|
||||
_position = [MarkerPosition,0,DynamicVehicleArea,10,1,2000,1] call BIS_fnc_findSafePos;
|
||||
//diag_log("DEBUG: spawning boat near coast " + str(_position));
|
||||
} else {
|
||||
// Spawn air anywhere that is flat
|
||||
waitUntil{!isNil "BIS_fnc_findSafePos"};
|
||||
_position = [MarkerPosition,0,DynamicVehicleArea,10,0,2000,0] call BIS_fnc_findSafePos;
|
||||
//diag_log("DEBUG: spawning air anywhere flat " + str(_position));
|
||||
};
|
||||
|
||||
|
||||
} else {
|
||||
// Spawn around buildings && 50% near roads
|
||||
if((random 1) > 0.5) then {
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_selectRandom"};
|
||||
_position = RoadList call BIS_fnc_selectRandom;
|
||||
|
||||
_position = _position modelToWorld [0,0,0];
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_findSafePos"};
|
||||
_position = [_position,0,10,10,0,2000,0] call BIS_fnc_findSafePos;
|
||||
|
||||
//diag_log("DEBUG: spawning near road " + str(_position));
|
||||
|
||||
} else {
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_selectRandom"};
|
||||
_position = BuildingList call BIS_fnc_selectRandom;
|
||||
|
||||
_position = _position modelToWorld [0,0,0];
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_findSafePos"};
|
||||
_position = [_position,0,40,5,0,2000,0] call BIS_fnc_findSafePos;
|
||||
|
||||
//diag_log("DEBUG: spawning around buildings " + str(_position));
|
||||
|
||||
};
|
||||
};
|
||||
// only proceed if two params otherwise BIS_fnc_findSafePos failed && may spawn in air
|
||||
if ((count _position) == 2) then {
|
||||
|
||||
_dir = round(random 180);
|
||||
|
||||
_istoomany = _position nearObjects ["AllVehicles",50];
|
||||
if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many vehicles at " + str(_position)); };
|
||||
|
||||
//place vehicle
|
||||
_veh = createVehicle [_vehicle, _position, [], 0, "CAN_COLLIDE"];
|
||||
_veh setdir _dir;
|
||||
_veh setpos _position;
|
||||
|
||||
if(DZEdebug) then {
|
||||
_marker = createMarker [str(_position) , _position];
|
||||
_marker setMarkerShape "ICON";
|
||||
_marker setMarkerType "DOT";
|
||||
_marker setMarkerText _vehicle;
|
||||
};
|
||||
|
||||
// Get position with ground
|
||||
_objPosition = getPosATL _veh;
|
||||
|
||||
clearWeaponCargoGlobal _veh;
|
||||
clearMagazineCargoGlobal _veh;
|
||||
// _veh setVehicleAmmo DZE_vehicleAmmo;
|
||||
|
||||
// Add 0-3 loots to vehicle using random cfgloots
|
||||
_num = floor(random 4);
|
||||
_allCfgLoots = ["trash","civilian","food","generic","medical","military","policeman","hunter","worker","clothes","militaryclothes","specialclothes","trash"];
|
||||
|
||||
for "_x" from 1 to _num do {
|
||||
_iClass = _allCfgLoots call BIS_fnc_selectRandom;
|
||||
|
||||
_itemTypes = [];
|
||||
if (DZE_MissionLootTable) then{
|
||||
{
|
||||
_itemTypes set[count _itemTypes, _x select 0]
|
||||
} count getArray(missionConfigFile >> "cfgLoot" >> _iClass);
|
||||
}
|
||||
else {
|
||||
{
|
||||
_itemTypes set[count _itemTypes, _x select 0]
|
||||
} count getArray(configFile >> "cfgLoot" >> _iClass);
|
||||
};
|
||||
|
||||
_index = dayz_CLBase find _iClass;
|
||||
_weights = dayz_CLChances select _index;
|
||||
_cntWeights = count _weights;
|
||||
|
||||
_index = floor(random _cntWeights);
|
||||
_index = _weights select _index;
|
||||
_itemType = _itemTypes select _index;
|
||||
_veh addMagazineCargoGlobal [_itemType,1];
|
||||
//diag_log("DEBUG: spawed loot inside vehicle " + str(_itemType));
|
||||
};
|
||||
|
||||
[_veh,[_dir,_objPosition],_vehicle,true,"0"] call server_publishVeh;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
spawn_ammosupply = {
|
||||
private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
|
||||
if (isDedicated) then {
|
||||
_WreckList = ["Supply_Crate_DZE"];
|
||||
waitUntil{!isNil "BIS_fnc_selectRandom"};
|
||||
_position = RoadList call BIS_fnc_selectRandom;
|
||||
_position = _position modelToWorld [0,0,0];
|
||||
waitUntil{!isNil "BIS_fnc_findSafePos"};
|
||||
_position = [_position,5,20,5,0,2000,0] call BIS_fnc_findSafePos;
|
||||
if ((count _position) == 2) then {
|
||||
|
||||
_istoomany = _position nearObjects ["All",5];
|
||||
|
||||
if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many at " + str(_position)); };
|
||||
|
||||
_spawnveh = _WreckList call BIS_fnc_selectRandom;
|
||||
|
||||
if(DZEdebug) then {
|
||||
_marker = createMarker [str(_position) , _position];
|
||||
_marker setMarkerShape "ICON";
|
||||
_marker setMarkerType "DOT";
|
||||
_marker setMarkerText str(_spawnveh);
|
||||
};
|
||||
|
||||
_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
|
||||
_veh enableSimulation false;
|
||||
_veh setDir round(random 360);
|
||||
_veh setpos _position;
|
||||
_veh setVariable ["ObjectID","1",true];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
DZE_LocalRoadBlocks = [];
|
||||
|
||||
spawn_roadblocks = {
|
||||
private ["_position","_veh","_istoomany","_marker","_spawnveh","_WreckList"];
|
||||
_WreckList = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"];
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_selectRandom"};
|
||||
if (isDedicated) then {
|
||||
|
||||
_position = RoadList call BIS_fnc_selectRandom;
|
||||
|
||||
_position = _position modelToWorld [0,0,0];
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_findSafePos"};
|
||||
_position = [_position,0,10,5,0,2000,0] call BIS_fnc_findSafePos;
|
||||
|
||||
if ((count _position) == 2) then {
|
||||
// Get position with ground
|
||||
|
||||
_istoomany = _position nearObjects ["All",5];
|
||||
|
||||
if((count _istoomany) > 0) exitWith { diag_log("DEBUG: Too many at " + str(_position)); };
|
||||
|
||||
waitUntil{!isNil "BIS_fnc_selectRandom"};
|
||||
_spawnveh = _WreckList call BIS_fnc_selectRandom;
|
||||
|
||||
if(DZEdebug) then {
|
||||
_marker = createMarker [str(_position) , _position];
|
||||
_marker setMarkerShape "ICON";
|
||||
_marker setMarkerType "DOT";
|
||||
_marker setMarkerText str(_spawnveh);
|
||||
};
|
||||
|
||||
_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
|
||||
_veh enableSimulation false;
|
||||
|
||||
_veh setDir round(random 360); // Randomize placement a bit
|
||||
_veh setpos _position;
|
||||
|
||||
_veh setVariable ["ObjectID","1",true];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
spawn_mineveins = {
|
||||
private ["_position","_veh","_istoomany","_marker","_spawnveh","_positions"];
|
||||
|
||||
if (isDedicated) then {
|
||||
|
||||
_position = [getMarkerPos "center",0,(HeliCrashArea*0.75),10,0,2000,0] call BIS_fnc_findSafePos;
|
||||
|
||||
if ((count _position) == 2) then {
|
||||
|
||||
_positions = selectBestPlaces [_position, 500, "(1 + forest) * (1 + hills) * (1 - houses) * (1 - sea)", 10, 5];
|
||||
|
||||
_position = (_positions call BIS_fnc_selectRandom) select 0;
|
||||
|
||||
// Get position with ground
|
||||
_istoomany = _position nearObjects ["All",10];
|
||||
|
||||
if((count _istoomany) > 0) exitWith { diag_log("DEBUG VEIN: Too many objects at " + str(_position)); };
|
||||
|
||||
if(isOnRoad _position) exitWith { diag_log("DEBUG VEIN: on road " + str(_position)); };
|
||||
|
||||
_spawnveh = ["Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Iron_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Silver_Vein_DZE","Gold_Vein_DZE","Gold_Vein_DZE"] call BIS_fnc_selectRandom;
|
||||
|
||||
if(DZEdebug) then {
|
||||
_marker = createMarker [str(_position) , _position];
|
||||
_marker setMarkerShape "ICON";
|
||||
_marker setMarkerType "DOT";
|
||||
_marker setMarkerText str(_spawnveh);
|
||||
};
|
||||
|
||||
//diag_log("DEBUG: Spawning a crashed " + _spawnveh + " with " + _spawnloot + " at " + str(_position));
|
||||
_veh = createVehicle [_spawnveh,_position, [], 0, "CAN_COLLIDE"];
|
||||
_veh enableSimulation false;
|
||||
|
||||
// Randomize placement a bit
|
||||
_veh setDir round(random 360);
|
||||
_veh setpos _position;
|
||||
|
||||
_veh setVariable ["ObjectID","1",true];
|
||||
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if(isnil "DynamicVehicleDamageLow") then {
|
||||
DynamicVehicleDamageLow = 0;
|
||||
};
|
||||
if(isnil "DynamicVehicleDamageHigh") then {
|
||||
DynamicVehicleDamageHigh = 100;
|
||||
};
|
||||
|
||||
if(isnil "DynamicVehicleFuelLow") then {
|
||||
DynamicVehicleFuelLow = 0;
|
||||
};
|
||||
if(isnil "DynamicVehicleFuelHigh") then {
|
||||
DynamicVehicleFuelHigh = 100;
|
||||
};
|
||||
|
||||
if(isnil "DZE_DiagFpsSlow") then {
|
||||
DZE_DiagFpsSlow = false;
|
||||
};
|
||||
if(isnil "DZE_DiagFpsFast") then {
|
||||
DZE_DiagFpsFast = false;
|
||||
};
|
||||
if(isnil "DZE_DiagVerbose") then {
|
||||
DZE_DiagVerbose = false;
|
||||
};
|
||||
|
||||
dze_diag_fps = {
|
||||
if(DZE_DiagVerbose) then {
|
||||
diag_log format["DEBUG FPS : %1 OBJECTS: %2 : PLAYERS: %3", diag_fps,(count (allMissionObjects "")),(playersNumber west)];
|
||||
} else {
|
||||
diag_log format["DEBUG FPS : %1", diag_fps];
|
||||
};
|
||||
};
|
||||
|
||||
// Damage generator function
|
||||
generate_new_damage = {
|
||||
private ["_damage"];
|
||||
_damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
|
||||
_damage;
|
||||
};
|
||||
|
||||
// Damage generator fuction
|
||||
generate_exp_damage = {
|
||||
private ["_damage"];
|
||||
_damage = ((random(DynamicVehicleDamageHigh-DynamicVehicleDamageLow))+DynamicVehicleDamageLow) / 100;
|
||||
|
||||
// limit this to 85% since vehicle would blow up otherwise.
|
||||
//if(_damage >= 0.85) then {
|
||||
// _damage = 0.85;
|
||||
//};
|
||||
_damage;
|
||||
};
|
||||
onPlayerDisconnected {[_uid,_name] call server_onPlayerDisconnect;};
|
||||
|
||||
server_getDiff = {
|
||||
private["_variable","_object","_vNew","_vOld","_result"];
|
||||
@@ -579,55 +192,16 @@ server_getDiff2 = {
|
||||
_result
|
||||
};
|
||||
|
||||
currentObjectUIDs = [];
|
||||
keyStartNumber = 100000000000;
|
||||
|
||||
dayz_objectUID = {
|
||||
private["_position","_dir","_key","_object"];
|
||||
_object = _this;
|
||||
_position = getPosATL _object;
|
||||
_dir = direction _object;
|
||||
_key = [_dir,_position] call dayz_objectUID2;
|
||||
_key
|
||||
};
|
||||
|
||||
dayz_objectUID2 = {
|
||||
private["_position","_dir","_key"];
|
||||
_dir = _this select 0;
|
||||
_key = "";
|
||||
_position = _this select 1;
|
||||
{
|
||||
_x = _x * 10;
|
||||
if ( _x < 0 ) then { _x = _x * -10 };
|
||||
_key = _key + str(round(_x));
|
||||
} count _position;
|
||||
_key = _key + str(round(_dir));
|
||||
// Make sure the generated key is not a duplicate
|
||||
while {true} do {
|
||||
if !(_key in currentObjectUIDs) exitWith {currentObjectUIDs set [count currentObjectUIDs,_key];};
|
||||
keyStartNumber = keyStartNumber + 1;
|
||||
_key = str keyStartNumber;
|
||||
};
|
||||
_key
|
||||
};
|
||||
|
||||
dayz_objectUID3 = {
|
||||
private["_position","_dir","_key"];
|
||||
_dir = _this select 0;
|
||||
_key = "";
|
||||
_position = _this select 1;
|
||||
{
|
||||
_x = _x * 10;
|
||||
if ( _x < 0 ) then { _x = _x * -10 };
|
||||
_key = _key + str(round(_x));
|
||||
} count _position;
|
||||
_key = _key + str(round(_dir + time));
|
||||
// Make sure the generated key is not a duplicate
|
||||
while {true} do {
|
||||
if !(_key in currentObjectUIDs) exitWith {currentObjectUIDs set [count currentObjectUIDs,_key];};
|
||||
keyStartNumber = keyStartNumber + 1;
|
||||
_key = str keyStartNumber;
|
||||
};
|
||||
private["_p","_d","_key"];
|
||||
_d = _this select 0;
|
||||
_p = _this select 1;
|
||||
_key = format [ "%1%2%3%4",
|
||||
abs round(10 * (_p select 0)),
|
||||
abs round(10 * (_p select 1)),
|
||||
abs round(100 * (_p select 2)),
|
||||
abs round((_d * diag_tickTime) % 1000)
|
||||
];
|
||||
_key
|
||||
};
|
||||
|
||||
@@ -637,307 +211,20 @@ dayz_recordLogin = {
|
||||
_key call server_hiveWrite;
|
||||
};
|
||||
|
||||
dayz_perform_purge = {
|
||||
if(!isNull(_this)) then {
|
||||
_group = group _this;
|
||||
_this removeAllMPEventHandlers "mpkilled";
|
||||
_this removeAllMPEventHandlers "mphit";
|
||||
_this removeAllMPEventHandlers "mprespawn";
|
||||
_this removeAllEventHandlers "FiredNear";
|
||||
_this removeAllEventHandlers "HandleDamage";
|
||||
_this removeAllEventHandlers "Killed";
|
||||
_this removeAllEventHandlers "Fired";
|
||||
_this removeAllEventHandlers "GetOut";
|
||||
_this removeAllEventHandlers "GetIn";
|
||||
_this removeAllEventHandlers "Local";
|
||||
clearVehicleInit _this;
|
||||
deleteVehicle _this;
|
||||
if ((count (units _group) == 0) && (_group != grpNull)) then {
|
||||
deleteGroup _group;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
dayz_perform_purge_player = {
|
||||
|
||||
private ["_countr","_backpack","_backpackType","_backpackWpn","_backpackMag","_objWpnTypes","_objWpnQty","_location","_dir","_holder","_weapons","_magazines"];
|
||||
diag_log ("Purging player: " + str(_this));
|
||||
|
||||
if(!isNull(_this)) then {
|
||||
|
||||
_location = getPosATL _this;
|
||||
_dir = getDir _this;
|
||||
|
||||
_holder = createVehicle ["GraveDZE", _location, [], 0, "CAN_COLLIDE"];
|
||||
_holder setDir _dir;
|
||||
_holder setPosATL _location;
|
||||
|
||||
_holder enableSimulation false;
|
||||
|
||||
_weapons = weapons _this;
|
||||
_magazines = magazines _this;
|
||||
|
||||
// find backpack
|
||||
if(!(isNull unitBackpack _this)) then {
|
||||
_backpack = unitBackpack _this;
|
||||
_backpackType = typeOf _backpack;
|
||||
_backpackWpn = getWeaponCargo _backpack;
|
||||
_backpackMag = getMagazineCargo _backpack;
|
||||
|
||||
_holder addBackpackCargoGlobal [_backpackType,1];
|
||||
|
||||
// add items from backpack
|
||||
_objWpnTypes = _backpackWpn select 0;
|
||||
_objWpnQty = _backpackWpn select 1;
|
||||
_countr = 0;
|
||||
{
|
||||
_holder addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
|
||||
_countr = _countr + 1;
|
||||
} count _objWpnTypes;
|
||||
|
||||
// add backpack magazine items
|
||||
_objWpnTypes = _backpackMag select 0;
|
||||
_objWpnQty = _backpackMag select 1;
|
||||
_countr = 0;
|
||||
{
|
||||
_holder addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
|
||||
_countr = _countr + 1;
|
||||
} count _objWpnTypes;
|
||||
};
|
||||
};
|
||||
|
||||
// add weapons
|
||||
{
|
||||
_holder addWeaponCargoGlobal [_x, 1];
|
||||
} count _weapons;
|
||||
|
||||
// add mags
|
||||
{
|
||||
_holder addMagazineCargoGlobal [_x, 1];
|
||||
} count _magazines;
|
||||
_group = group _this;
|
||||
_this removeAllMPEventHandlers "mpkilled";
|
||||
_this removeAllMPEventHandlers "mphit";
|
||||
_this removeAllMPEventHandlers "mprespawn";
|
||||
_this removeAllEventHandlers "FiredNear";
|
||||
_this removeAllEventHandlers "HandleDamage";
|
||||
_this removeAllEventHandlers "Killed";
|
||||
_this removeAllEventHandlers "Fired";
|
||||
_this removeAllEventHandlers "GetOut";
|
||||
_this removeAllEventHandlers "GetIn";
|
||||
_this removeAllEventHandlers "Local";
|
||||
clearVehicleInit _this;
|
||||
deleteVehicle _this;
|
||||
if ((count (units _group) == 0) && (_group != grpNull)) then {
|
||||
deleteGroup _group;
|
||||
};
|
||||
// _this = nil;
|
||||
};
|
||||
|
||||
|
||||
dayz_removePlayerOnDisconnect = {
|
||||
if(!isNull(_this)) then {
|
||||
_group = group _this;
|
||||
_this removeAllMPEventHandlers "mphit";
|
||||
deleteVehicle _this;
|
||||
deleteGroup (group _this);
|
||||
};
|
||||
};
|
||||
|
||||
server_timeSync = {
|
||||
//Send request
|
||||
private ["_hour","_minute","_date","_key","_result","_outcome"];
|
||||
_key = "CHILD:307:";
|
||||
_result = _key call server_hiveReadWrite;
|
||||
_outcome = _result select 0;
|
||||
if(_outcome == "PASS") then {
|
||||
_date = _result select 1;
|
||||
|
||||
if(dayz_fullMoonNights) then {
|
||||
_hour = _date select 3;
|
||||
_minute = _date select 4;
|
||||
//Force full moon nights
|
||||
_date = [2013,8,3,_hour,_minute];
|
||||
};
|
||||
|
||||
setDate _date;
|
||||
PVDZE_plr_SetDate = _date;
|
||||
publicVariable "PVDZE_plr_SetDate";
|
||||
diag_log ("TIME SYNC: Local Time set to " + str(_date));
|
||||
};
|
||||
};
|
||||
|
||||
// must spawn these
|
||||
server_spawncleanDead = {
|
||||
private ["_deathTime","_delQtyZ","_delQtyP","_qty","_allDead"];
|
||||
_allDead = allDead;
|
||||
_delQtyZ = 0;
|
||||
_delQtyP = 0;
|
||||
{
|
||||
if (local _x) then {
|
||||
if (_x isKindOf "zZombie_Base") then
|
||||
{
|
||||
_x call dayz_perform_purge;
|
||||
uiSleep 0.05;
|
||||
_delQtyZ = _delQtyZ + 1;
|
||||
} else {
|
||||
if (_x isKindOf "CAManBase") then {
|
||||
_deathTime = _x getVariable ["processedDeath", diag_tickTime];
|
||||
if (diag_tickTime - _deathTime > 1800) then {
|
||||
_x call dayz_perform_purge_player;
|
||||
uiSleep 0.025;
|
||||
_delQtyP = _delQtyP + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
uiSleep 0.025;
|
||||
} count _allDead;
|
||||
if (_delQtyZ > 0 || _delQtyP > 0) then {
|
||||
_qty = count _allDead;
|
||||
diag_log (format["CLEANUP: Deleted %1 players && %2 zombies out of %3 dead",_delQtyP,_delQtyZ,_qty]);
|
||||
};
|
||||
};
|
||||
server_cleanupGroups = {
|
||||
if (DZE_DYN_AntiStuck3rd > 3) then { DZE_DYN_GroupCleanup = nil; DZE_DYN_AntiStuck3rd = 0; };
|
||||
if(!isNil "DZE_DYN_GroupCleanup") exitWith { DZE_DYN_AntiStuck3rd = DZE_DYN_AntiStuck3rd + 1;};
|
||||
DZE_DYN_GroupCleanup = true;
|
||||
{
|
||||
if ((count (units _x) == 0) && (_x != grpNull)) then {
|
||||
deleteGroup _x;
|
||||
};
|
||||
uiSleep 0.001;
|
||||
} count allGroups;
|
||||
DZE_DYN_GroupCleanup = nil;
|
||||
};
|
||||
|
||||
server_checkHackers = {
|
||||
if (DZE_DYN_AntiStuck2nd > 3) then { DZE_DYN_HackerCheck = nil; DZE_DYN_AntiStuck2nd = 0; };
|
||||
if(!isNil "DZE_DYN_HackerCheck") exitWith { DZE_DYN_AntiStuck2nd = DZE_DYN_AntiStuck2nd + 1;};
|
||||
DZE_DYN_HackerCheck = true;
|
||||
{
|
||||
if (!((isNil "_x") || {(isNull _x)})) then {
|
||||
if(vehicle _x != _x && !(vehicle _x in PVDZE_serverObjectMonitor) && (isPlayer _x) && !((typeOf vehicle _x) in DZE_safeVehicle)) then {
|
||||
diag_log ("CLEANUP: KILLING A HACKER " + (name _x) + " " + str(_x) + " IN " + (typeOf vehicle _x));
|
||||
(vehicle _x) setDamage 1;
|
||||
_x setDamage 1;
|
||||
uiSleep 0.25;
|
||||
};
|
||||
};
|
||||
uiSleep 0.001;
|
||||
} count allUnits;
|
||||
DZE_DYN_HackerCheck = nil;
|
||||
};
|
||||
|
||||
server_spawnCleanFire = {
|
||||
private ["_delQtyFP","_qty","_missionFires"];
|
||||
_missionFires = allMissionObjects "Land_Fire_DZ";
|
||||
_delQtyFP = 0;
|
||||
{
|
||||
if (local _x) then {
|
||||
deleteVehicle _x;
|
||||
uiSleep 0.025;
|
||||
_delQtyFP = _delQtyFP + 1;
|
||||
};
|
||||
uiSleep 0.001;
|
||||
} count _missionFires;
|
||||
if (_delQtyFP > 0) then {
|
||||
_qty = count _missionFires;
|
||||
diag_log (format["CLEANUP: Deleted %1 fireplaces out of %2",_delQtyFP,_qty]);
|
||||
};
|
||||
};
|
||||
server_spawnCleanLoot = {
|
||||
private ["_created","_delQty","_nearby","_age","_keep","_qty","_missionObjs","_dateNow"];
|
||||
if (DZE_DYN_AntiStuck > 3) then { DZE_DYN_cleanLoot = nil; DZE_DYN_AntiStuck = 0; };
|
||||
if(!isNil "DZE_DYN_cleanLoot") exitWith { DZE_DYN_AntiStuck = DZE_DYN_AntiStuck + 1;};
|
||||
DZE_DYN_cleanLoot = true;
|
||||
|
||||
_missionObjs = allMissionObjects "ReammoBox";
|
||||
_delQty = 0;
|
||||
_dateNow = (DateToNumber date);
|
||||
{
|
||||
if (!isNull _x) then {
|
||||
_keep = _x getVariable["permaLoot", false];
|
||||
if (!_keep) then {
|
||||
_created = _x getVariable["created", -0.1];
|
||||
if (_created == -0.1) then{
|
||||
_x setVariable["created", _dateNow, false];
|
||||
_created = _dateNow;
|
||||
}
|
||||
else {
|
||||
_age = (_dateNow - _created) * 525948;
|
||||
if (_age > 20) then{
|
||||
_nearby = { (isPlayer _x) && (alive _x) } count(_x nearEntities[["CAManBase", "AllVehicles"], 130]);
|
||||
if (_nearby == 0) then{
|
||||
deleteVehicle _x;
|
||||
uiSleep 0.025;
|
||||
_delQty = _delQty + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
uiSleep 0.001;
|
||||
} forEach _missionObjs;
|
||||
if (_delQty > 0) then {
|
||||
_qty = count _missionObjs;
|
||||
diag_log (format["CLEANUP: Deleted %1 Loot Piles out of %2",_delQty,_qty]);
|
||||
};
|
||||
DZE_DYN_cleanLoot = nil;
|
||||
};
|
||||
|
||||
server_spawnCleanAnimals = {
|
||||
private ["_pos","_delQtyAnimal","_qty","_missonAnimals","_nearby"];
|
||||
_missonAnimals = entities "CAAnimalBase";
|
||||
_delQtyAnimal = 0;
|
||||
{
|
||||
if (local _x) then {
|
||||
_x call dayz_perform_purge;
|
||||
uiSleep 0.05;
|
||||
_delQtyAnimal = _delQtyAnimal + 1;
|
||||
} else {
|
||||
if (!alive _x) then {
|
||||
_pos = getPosATL _x;
|
||||
if (count _pos > 0) then {
|
||||
_nearby = {(isPlayer _x) && (alive _x)} count (_pos nearEntities [["CAManBase","AllVehicles"], 130]);
|
||||
if (_nearby==0) then {
|
||||
_x call dayz_perform_purge;
|
||||
uiSleep 0.05;
|
||||
_delQtyAnimal = _delQtyAnimal + 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
uiSleep 0.001;
|
||||
} forEach _missonAnimals;
|
||||
if (_delQtyAnimal > 0) then {
|
||||
_qty = count _missonAnimals;
|
||||
diag_log (format["CLEANUP: Deleted %1 Animals out of %2",_delQtyAnimal,_qty]);
|
||||
};
|
||||
};
|
||||
|
||||
server_logUnlockLockEvent = {
|
||||
private["_player", "_obj", "_objectID", "_objectUID", "_statusText", "_PUID", "_status", "_clientID", "_type"];
|
||||
_player = _this select 0;
|
||||
_obj = _this select 1;
|
||||
_status = _this select 2;
|
||||
_type = typeOf _obj;
|
||||
if (isNull _player) then {diag_log "ERROR: server_logUnlockLockEvent called with Null player object";};
|
||||
_clientID = owner _player;
|
||||
_PUID = [_player] call FNC_GetPlayerUID;
|
||||
_statusText = if (_status) then {"LOCKED"} else {"UNLOCKED"};
|
||||
dayz_reseed = {
|
||||
private ["_Loc","_i","_radius","_Ref"];
|
||||
_Loc = _this select 0;
|
||||
_Ref = _this select 1;
|
||||
|
||||
if (!isNull _obj) then {
|
||||
_objectID = _obj getVariable["ObjectID", "0"];
|
||||
_objectUID = _obj getVariable["ObjectUID", "0"];
|
||||
|
||||
if (_status) then {[_obj, "gear"] call server_updateObject;};
|
||||
diag_log format["%6 %5: ID:%1 UID:%2 BY %3(%4)",_objectID,_objectUID,name _player,_PUID,_statusText,_type];
|
||||
dze_waiting = "success";
|
||||
_clientID publicVariableClient "dze_waiting";
|
||||
} else {
|
||||
diag_log format["ERROR: %4 BY %1(%2) IS NULL AND COULD NOT BE %3 (THIS SHOULD NOT HAPPEN)",name _player,_PUID,_statusText,_type];
|
||||
dze_waiting = "fail";
|
||||
_clientID publicVariableClient "dze_waiting";
|
||||
};
|
||||
diag_log(str(_Loc));
|
||||
|
||||
//_lootspawner =[[10416.695, 4198.4634],[7982.2563, 1419.8256],[10795.93, 1419.8263],[7966.083, 4088.7463],[9259.7266, 2746.1985],[5200.5234, 3915.3274],[6494.1665, 2572.7798],[5216.6968, 1246.407],[2564.7244, 3915.3296],[3858.3674, 2572.782],[2580.8977, 1246.4092],[13398.995, 4400.5874],[12242.025, 2948.3196],[13551.842, 1832.2257],[14870.512, 3009.5117],[-178.19415, 1062.4478],[1099.2754, 2388.8206],[-194.36755, 3731.3679],[10394.215, 8322.1719],[7959.7759, 5543.5342],[10773.449, 5543.5342],[7943.6025, 8212.4551],[9237.2461, 6869.9063],[5178.043, 8039.0361],[6471.686, 6696.4883],[5194.2163, 5370.1152],[2542.2439, 8039.0381],[3835.887, 6696.4902],[2558.4172, 5370.1172],[13376.514, 8524.2969],[12219.544, 7072.0273],[13529.361, 5955.9336],[14848.032, 7133.2197],[-200.67474, 5186.1563],[1076.7949, 6512.5283],[-216.84814, 7855.0771],[10293.751, 12197.736],[7859.312, 9419.0996],[10672.988, 9419.0996],[7843.1387, 12088.021],[9136.7822, 10745.474],[5077.5791, 11914.601],[6371.2222, 10572.052],[5093.7524, 9245.6816],[2441.78, 11914.604],[3735.4231, 10572.055],[2457.9534, 9245.6816],[13276.053, 12399.861],[12119.08, 10947.596],[13428.897, 9831.501],[14747.566, 11008.786],[-301.13867, 9061.7207],[976.33112, 10388.096],[-317.31201, 11730.642],[10271.271, 16321.429],[7836.8315, 13542.813],[10650.506, 13542.813],[7820.6582, 16211.718],[9114.3018, 14869.175],[5055.0986, 16038.3],[6348.7417, 14695.758],[5071.272, 13369.392],[2419.2996, 16038.305],[3712.9426, 14695.76],[2435.4729, 13369.392],[13253.568, 16523.553],[12096.6, 15071.295],[13406.416, 13955.209],[14725.089, 15132.486],[-323.61914, 13185.43],[953.85059, 14511.8],[-339.79248, 15854.346]];
|
||||
//{
|
||||
_radius = 1500;
|
||||
dayz_lootspawner = [_Loc,_radius,_Ref] spawn server_lootSpawner;
|
||||
waitUntil {scriptDone dayz_lootspawner};
|
||||
//} foreach dayz_grid;
|
||||
};
|
||||
|
||||
call compile preprocessFileLineNumbers "\z\addons\dayz_server\init\Epoch_Init.sqf";
|
||||
call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\fa_hiveMaintenance.sqf";
|
||||
Reference in New Issue
Block a user