mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 20:13:13 +03:00
Merge pull request #953 from vbawol/zabn-buildings-before-cars
Zabn buildings before cars
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
private ["_nul","_result","_pos","_wsDone","_dir","_block","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_intentory","_hitPoints","_fuel","_damage","_date","_key","_outcome","_vehLimit","_hiveResponse","_objectCount","_codeCount","_objectArray","_hour","_minute","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0"];
|
private ["_nul","_result","_pos","_wsDone","_dir","_block","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_intentory","_hitPoints","_fuel","_damage","_date","_key","_outcome","_vehLimit","_hiveResponse","_objectCount","_codeCount","_hour","_minute","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0"];
|
||||||
|
|
||||||
dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version");
|
dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version");
|
||||||
dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
|
dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
|
||||||
@@ -49,201 +49,217 @@ if (isServer and isNil "sm_done") then {
|
|||||||
_i = 99; // break
|
_i = 99; // break
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_BuildingQueue = [];
|
||||||
|
_objectQueue = [];
|
||||||
|
|
||||||
_objectArray = [];
|
|
||||||
if ((_hiveResponse select 0) == "ObjectStreamStart") then {
|
if ((_hiveResponse select 0) == "ObjectStreamStart") then {
|
||||||
_objectCount = _hiveResponse select 1;
|
_objectCount = _hiveResponse select 1;
|
||||||
diag_log ("HIVE: Commence Object Streaming...");
|
diag_log ("HIVE: Commence Object Streaming...");
|
||||||
for "_i" from 1 to _objectCount do {
|
for "_i" from 1 to _objectCount do {
|
||||||
_hiveResponse = _key call server_hiveReadWriteLarge;
|
_hiveResponse = _key call server_hiveReadWriteLarge;
|
||||||
_objectArray set [_i - 1, _hiveResponse];
|
|
||||||
//diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
|
//diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]);
|
||||||
|
|
||||||
|
_type = _hiveResponse select 2;
|
||||||
|
|
||||||
|
switch true do {
|
||||||
|
case (_type isKindOf "ModularItems"): {
|
||||||
|
_BuildingQueue set [(count _BuildingQueue),_hiveResponse];
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
_objectQueue set [(count _objectQueue),_hiveResponse];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
diag_log ("HIVE: got " + str(count _objectArray) + " objects");
|
_count = (count _objectQueue) + (count _BuildingQueue);
|
||||||
|
diag_log ("HIVE: got " + str(_count) + " objects");
|
||||||
};
|
};
|
||||||
|
|
||||||
// # START OF STREAMING #
|
_spawnSort = [_BuildingQueue,_objectQueue]; // Put arrays in order that you wish them to spawn
|
||||||
_countr = 0;
|
|
||||||
|
// # NOW SPAWN OBJECTS #
|
||||||
_totalvehicles = 0;
|
_totalvehicles = 0;
|
||||||
{
|
{
|
||||||
//Parse Array
|
|
||||||
_countr = _countr + 1;
|
|
||||||
|
|
||||||
_idKey = _x select 1;
|
|
||||||
_type = _x select 2;
|
|
||||||
_ownerID = _x select 3;
|
|
||||||
|
|
||||||
_worldspace = _x select 4;
|
|
||||||
_intentory= _x select 5;
|
|
||||||
_hitPoints= _x select 6;
|
|
||||||
_fuel = _x select 7;
|
|
||||||
_damage = _x select 8;
|
|
||||||
|
|
||||||
_dir = 0;
|
|
||||||
_pos = [0,0,0];
|
|
||||||
_wsDone = false;
|
|
||||||
if (count _worldspace >= 2) then
|
|
||||||
{
|
{
|
||||||
_dir = _worldspace select 0;
|
_idKey = _x select 1;
|
||||||
if (count (_worldspace select 1) == 3) then {
|
_type = _x select 2;
|
||||||
_pos = _worldspace select 1;
|
_ownerID = _x select 3;
|
||||||
_wsDone = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
if (!_wsDone) then {
|
|
||||||
if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
|
|
||||||
_pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
|
|
||||||
if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
|
|
||||||
diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_damage < 1) then {
|
_worldspace = _x select 4;
|
||||||
//diag_log format["OBJ: %1 - %2", _idKey,_type];
|
_intentory= _x select 5;
|
||||||
|
_hitPoints= _x select 6;
|
||||||
|
_fuel = _x select 7;
|
||||||
|
_damage = _x select 8;
|
||||||
|
|
||||||
//Create it
|
_dir = 0;
|
||||||
_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
|
_pos = [0,0,0];
|
||||||
_object setVariable ["lastUpdate",time];
|
_wsDone = false;
|
||||||
_object setVariable ["ObjectID", _idKey, true];
|
if (count _worldspace >= 2) then
|
||||||
|
{
|
||||||
_lockable = 0;
|
_dir = _worldspace select 0;
|
||||||
if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
|
if (count (_worldspace select 1) == 3) then {
|
||||||
_lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
|
_pos = _worldspace select 1;
|
||||||
};
|
_wsDone = true;
|
||||||
|
}
|
||||||
// fix for leading zero issues on safe codes after restart
|
};
|
||||||
if (_lockable == 4) then {
|
|
||||||
_codeCount = (count (toArray _ownerID));
|
|
||||||
if(_codeCount == 3) then {
|
|
||||||
_ownerID = format["0%1", _ownerID];
|
|
||||||
};
|
|
||||||
if(_codeCount == 2) then {
|
|
||||||
_ownerID = format["00%1", _ownerID];
|
|
||||||
};
|
|
||||||
if(_codeCount == 1) then {
|
|
||||||
_ownerID = format["000%1", _ownerID];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if (_lockable == 3) then {
|
|
||||||
_codeCount = (count (toArray _ownerID));
|
|
||||||
if(_codeCount == 2) then {
|
|
||||||
_ownerID = format["0%1", _ownerID];
|
|
||||||
};
|
|
||||||
if(_codeCount == 1) then {
|
|
||||||
_ownerID = format["00%1", _ownerID];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
_object setVariable ["CharacterID", _ownerID, true];
|
|
||||||
|
|
||||||
clearWeaponCargoGlobal _object;
|
if (!_wsDone) then {
|
||||||
clearMagazineCargoGlobal _object;
|
if (count _worldspace >= 1) then { _dir = _worldspace select 0; };
|
||||||
// _object setVehicleAmmo DZE_vehicleAmmo;
|
_pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos;
|
||||||
|
if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; };
|
||||||
if ((typeOf _object) in dayz_allowedObjects) then {
|
diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos));
|
||||||
_object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
|
|
||||||
// Test disabling simulation server side on buildables only.
|
|
||||||
_object enableSimulation false;
|
|
||||||
// used for inplace upgrades and lock/unlock of safe
|
|
||||||
_object setVariable ["OEMPos", _pos, true];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_object setdir _dir;
|
|
||||||
_object setposATL _pos;
|
|
||||||
_object setDamage _damage;
|
|
||||||
|
|
||||||
if (count _intentory > 0) then {
|
if (_damage < 1) then {
|
||||||
if (_type in DZE_LockedStorage) then {
|
//diag_log format["OBJ: %1 - %2", _idKey,_type];
|
||||||
// Fill variables with loot
|
|
||||||
_object setVariable ["WeaponCargo", (_intentory select 0), true];
|
|
||||||
_object setVariable ["MagazineCargo", (_intentory select 1), true];
|
|
||||||
_object setVariable ["BackpackCargo", (_intentory select 2), true];
|
|
||||||
} else {
|
|
||||||
|
|
||||||
//Add weapons
|
|
||||||
_objWpnTypes = (_intentory select 0) select 0;
|
|
||||||
_objWpnQty = (_intentory select 0) select 1;
|
|
||||||
_countr = 0;
|
|
||||||
{
|
|
||||||
if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
|
|
||||||
_x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
|
|
||||||
};
|
|
||||||
_isOK = isClass(configFile >> "CfgWeapons" >> _x);
|
|
||||||
if (_isOK) then {
|
|
||||||
_block = getNumber(configFile >> "CfgWeapons" >> _x >> "stopThis") == 1;
|
|
||||||
if (!_block) then {
|
|
||||||
_object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
_countr = _countr + 1;
|
|
||||||
} forEach _objWpnTypes;
|
|
||||||
|
|
||||||
//Add Magazines
|
//Create it
|
||||||
_objWpnTypes = (_intentory select 1) select 0;
|
_object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];
|
||||||
_objWpnQty = (_intentory select 1) select 1;
|
_object setVariable ["lastUpdate",time];
|
||||||
_countr = 0;
|
_object setVariable ["ObjectID", _idKey, true];
|
||||||
{
|
|
||||||
if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
|
|
||||||
if (_x == "ItemTent") then { _x = "ItemTentOld" };
|
|
||||||
_isOK = isClass(configFile >> "CfgMagazines" >> _x);
|
|
||||||
if (_isOK) then {
|
|
||||||
_block = getNumber(configFile >> "CfgMagazines" >> _x >> "stopThis") == 1;
|
|
||||||
if (!_block) then {
|
|
||||||
_object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
_countr = _countr + 1;
|
|
||||||
} forEach _objWpnTypes;
|
|
||||||
|
|
||||||
//Add Backpacks
|
_lockable = 0;
|
||||||
_objWpnTypes = (_intentory select 2) select 0;
|
if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then {
|
||||||
_objWpnQty = (_intentory select 2) select 1;
|
_lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable");
|
||||||
_countr = 0;
|
|
||||||
{
|
|
||||||
_isOK = isClass(configFile >> "CfgVehicles" >> _x);
|
|
||||||
if (_isOK) then {
|
|
||||||
_block = getNumber(configFile >> "CfgVehicles" >> _x >> "stopThis") == 1;
|
|
||||||
if (!_block) then {
|
|
||||||
_object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
_countr = _countr + 1;
|
|
||||||
} forEach _objWpnTypes;
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
if (_object isKindOf "AllVehicles") then {
|
|
||||||
{
|
|
||||||
_selection = _x select 0;
|
|
||||||
_dam = _x select 1;
|
|
||||||
if (_selection in dayZ_explosiveParts and _dam > 0.8) then {_dam = 0.8};
|
|
||||||
[_object,_selection,_dam] call object_setFixServer;
|
|
||||||
} forEach _hitpoints;
|
|
||||||
|
|
||||||
_object setFuel _fuel;
|
// fix for leading zero issues on safe codes after restart
|
||||||
|
if (_lockable == 4) then {
|
||||||
if (!((typeOf _object) in dayz_allowedObjects)) then {
|
_codeCount = (count (toArray _ownerID));
|
||||||
|
if(_codeCount == 3) then {
|
||||||
//_object setvelocity [0,0,1];
|
_ownerID = format["0%1", _ownerID];
|
||||||
_object call fnc_veh_ResetEH;
|
};
|
||||||
|
if(_codeCount == 2) then {
|
||||||
if(_ownerID != "0" and !(_object isKindOf "Bicycle")) then {
|
_ownerID = format["00%1", _ownerID];
|
||||||
_object setvehiclelock "locked";
|
};
|
||||||
|
if(_codeCount == 1) then {
|
||||||
|
_ownerID = format["000%1", _ownerID];
|
||||||
};
|
};
|
||||||
|
|
||||||
_totalvehicles = _totalvehicles + 1;
|
|
||||||
|
|
||||||
// total each vehicle
|
|
||||||
serverVehicleCounter set [count serverVehicleCounter,_type];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (_lockable == 3) then {
|
||||||
|
_codeCount = (count (toArray _ownerID));
|
||||||
|
if(_codeCount == 2) then {
|
||||||
|
_ownerID = format["0%1", _ownerID];
|
||||||
|
};
|
||||||
|
if(_codeCount == 1) then {
|
||||||
|
_ownerID = format["00%1", _ownerID];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_object setVariable ["CharacterID", _ownerID, true];
|
||||||
|
|
||||||
|
clearWeaponCargoGlobal _object;
|
||||||
|
clearMagazineCargoGlobal _object;
|
||||||
|
// _object setVehicleAmmo DZE_vehicleAmmo;
|
||||||
|
|
||||||
|
if ((typeOf _object) in dayz_allowedObjects) then {
|
||||||
|
_object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}];
|
||||||
|
// Test disabling simulation server side on buildables only.
|
||||||
|
_object enableSimulation false;
|
||||||
|
// used for inplace upgrades and lock/unlock of safe
|
||||||
|
_object setVariable ["OEMPos", _pos, true];
|
||||||
|
};
|
||||||
|
|
||||||
|
_object setdir _dir;
|
||||||
|
_object setposATL _pos;
|
||||||
|
_object setDamage _damage;
|
||||||
|
|
||||||
|
if (count _intentory > 0) then {
|
||||||
|
if (_type in DZE_LockedStorage) then {
|
||||||
|
// Fill variables with loot
|
||||||
|
_object setVariable ["WeaponCargo", (_intentory select 0), true];
|
||||||
|
_object setVariable ["MagazineCargo", (_intentory select 1), true];
|
||||||
|
_object setVariable ["BackpackCargo", (_intentory select 2), true];
|
||||||
|
} else {
|
||||||
|
|
||||||
|
//Add weapons
|
||||||
|
_objWpnTypes = (_intentory select 0) select 0;
|
||||||
|
_objWpnQty = (_intentory select 0) select 1;
|
||||||
|
_countr = 0;
|
||||||
|
{
|
||||||
|
if(_x in (DZE_REPLACE_WEAPONS select 0)) then {
|
||||||
|
_x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x);
|
||||||
|
};
|
||||||
|
_isOK = isClass(configFile >> "CfgWeapons" >> _x);
|
||||||
|
if (_isOK) then {
|
||||||
|
_block = getNumber(configFile >> "CfgWeapons" >> _x >> "stopThis") == 1;
|
||||||
|
if (!_block) then {
|
||||||
|
_object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_countr = _countr + 1;
|
||||||
|
} forEach _objWpnTypes;
|
||||||
|
|
||||||
|
//Add Magazines
|
||||||
|
_objWpnTypes = (_intentory select 1) select 0;
|
||||||
|
_objWpnQty = (_intentory select 1) select 1;
|
||||||
|
_countr = 0;
|
||||||
|
{
|
||||||
|
if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow
|
||||||
|
if (_x == "ItemTent") then { _x = "ItemTentOld" };
|
||||||
|
_isOK = isClass(configFile >> "CfgMagazines" >> _x);
|
||||||
|
if (_isOK) then {
|
||||||
|
_block = getNumber(configFile >> "CfgMagazines" >> _x >> "stopThis") == 1;
|
||||||
|
if (!_block) then {
|
||||||
|
_object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_countr = _countr + 1;
|
||||||
|
} forEach _objWpnTypes;
|
||||||
|
|
||||||
|
//Add Backpacks
|
||||||
|
_objWpnTypes = (_intentory select 2) select 0;
|
||||||
|
_objWpnQty = (_intentory select 2) select 1;
|
||||||
|
_countr = 0;
|
||||||
|
{
|
||||||
|
_isOK = isClass(configFile >> "CfgVehicles" >> _x);
|
||||||
|
if (_isOK) then {
|
||||||
|
_block = getNumber(configFile >> "CfgVehicles" >> _x >> "stopThis") == 1;
|
||||||
|
if (!_block) then {
|
||||||
|
_object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
_countr = _countr + 1;
|
||||||
|
} forEach _objWpnTypes;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_object isKindOf "AllVehicles") then {
|
||||||
|
{
|
||||||
|
_selection = _x select 0;
|
||||||
|
_dam = _x select 1;
|
||||||
|
if (_selection in dayZ_explosiveParts and _dam > 0.8) then {_dam = 0.8};
|
||||||
|
[_object,_selection,_dam] call object_setFixServer;
|
||||||
|
} forEach _hitpoints;
|
||||||
|
|
||||||
|
_object setFuel _fuel;
|
||||||
|
|
||||||
|
if (!((typeOf _object) in dayz_allowedObjects)) then {
|
||||||
|
|
||||||
|
//_object setvelocity [0,0,1];
|
||||||
|
_object call fnc_veh_ResetEH;
|
||||||
|
|
||||||
|
if(_ownerID != "0" and !(_object isKindOf "Bicycle")) then {
|
||||||
|
_object setvehiclelock "locked";
|
||||||
|
};
|
||||||
|
|
||||||
|
_totalvehicles = _totalvehicles + 1;
|
||||||
|
|
||||||
|
// total each vehicle
|
||||||
|
serverVehicleCounter set [count serverVehicleCounter,_type];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
//Monitor the object
|
||||||
|
PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
|
||||||
};
|
};
|
||||||
|
} forEach _x;
|
||||||
//Monitor the object
|
} forEach _spawnSort;
|
||||||
PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object];
|
|
||||||
};
|
// # END SPAWN OBJECTS #
|
||||||
} forEach _objectArray;
|
|
||||||
// # END OF STREAMING #
|
|
||||||
|
|
||||||
|
|
||||||
// preload server traders menu data into cache
|
// preload server traders menu data into cache
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user