Files
DayZ-Epoch/SQF/dayz_server/compile/server_swapObject.sqf
AirwavesMan 673c705aeb Add upgradable safes and lockboxes
- Safes and lockboxes can be upgraded now.
- A winter lockbox version was added too. The current model and icon will be replaced later for the new lockbox.
- Calling Child 308 on the DB has no room for storing coins, this is why we need to update coins and gear after swaping the object. Same for upgrade vehicle
2020-09-12 01:18:57 +02:00

118 lines
4.5 KiB
Plaintext

private ["_gearClasses","_coins","_class","_uid","_charID","_object","_worldspace","_key","_allowed","_obj","_inv","_objectID","_objectUID","_proceed","_activatingplayer","_clientKey","_exitReason","_playerUID","_weapons","_magazines","_backpacks"];
if (count _this < 8) exitWith {diag_log format ["Server_SwapObject error: Wrong parameter format from player %1",_this select 5];};
_charID = _this select 0;
_object = _this select 1;
_worldspace = _this select 2;
_class = _this select 3;
_obj = _this select 4;
_activatingplayer = _this select 5;
_inv = _this select 6;
_clientKey = _this select 7;
_proceed = false;
_objectID = "0";
_objectUID = "0";
_playerUID = getPlayerUID _activatingPlayer;
_exitReason = [_this,"SwapObject",(_worldspace select 1),_clientKey,_playerUID,_activatingPlayer] call server_verifySender;
if (_exitReason != "") exitWith {diag_log _exitReason};
if (!isNull(_obj)) then {
// Find objectID
_objectID = _obj getVariable ["ObjectID","0"];
// Find objectUID
_objectUID = _obj getVariable ["ObjectUID","0"];
if !(DZE_GodModeBase) then {
_obj removeAllMPEventHandlers "MPKilled";
};
if ((_class isKindOf "Land_A_tent" || {_class in DZE_isNewStorage}) && !(_class in DZE_isLockedStorageUpgrade)) then {
_weapons = getWeaponCargo _obj;
_magazines = getMagazineCargo _obj;
_backpacks = getBackpackCargo _obj;
_inv = [_weapons,_magazines,_backpacks];
};
if (_class in DZE_isLockedStorageUpgrade) then {
_weapons = _obj getVariable ["WeaponCargo",[]];
_magazines = _obj getVariable ["MagazineCargo",[]];
_backpacks = _obj getVariable ["BackpackCargo",[]];
_inv = [_weapons,_magazines,_backpacks];
};
if (Z_SingleCurrency && {_class in DZE_MoneyStorageClasses}) then {
_coins = _obj getVariable ["cashMoney",0];
};
// Remove old object
deleteVehicle _obj;
_proceed = true;
};
if (isNull(_object)) then {
_proceed = false;
};
if (_objectID == "0" && {_objectUID == "0"}) then {
_proceed = false;
} else {
[_objectID,_objectUID,_obj] call server_deleteObjDirect;
};
_allowed = [_object, "Server"] call check_publishobject;
if (!_allowed || !_proceed) exitWith {
if(!isNull(_object)) then {
deleteVehicle _object;
};
diag_log ("Invalid object swap by playerUID:" + _playerUID);
};
// Publish variables
_object setVariable ["CharacterID",_charID,true];
//_object setVariable ["ObjectUID",_objectUID,true];
_object setVariable ["OEMPos",(_worldspace select 1),true];
//diag_log ("PUBLISH: Attempt " + str(_object));
//get UID
_uid = _worldspace call dayz_objectUID2;
//Send request
_key = str formatText["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0, _charID, _worldspace call AN_fnc_formatWorldspace, _inv, [], 0,_uid];
//diag_log ("HIVE: WRITE: "+ str(_key));
_key call server_hiveWrite;
_object setVariable ["lastUpdate",diag_tickTime];
_object setVariable ["ObjectUID", _uid,true];
// _object setVariable ["CharacterID",_charID,true];
if (DZE_GodModeBase && {!(_class in DZE_GodModeBaseExclude)}) then {
_object addEventHandler ["HandleDamage",{false}];
} else {
_object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
};
_gearClasses = ["Wooden_shed2_DZ","WoodShack2_DZ","StorageShed2_DZ","GunRack2_DZ","WoodCrate2_DZ","TentStorage0","TentStorage1","TentStorage2","TentStorage3","TentStorage4""DomeTentStorage0","DomeTentStorage1","DomeTentStorage2","DomeTentStorage3","DomeTentStorage4","DesertTentStorage0","DesertTentStorage1","DesertTentStorage2","DesertTentStorage3","DesertTentStorage4","StashSmall1","StashSmall2","StashSmall3","StashSmall4","StashMedium","StashMedium1","StashMedium2","StashMedium3","StashMedium4"];
if (count _inv > 0 && {_class in _gearClasses}) then {
[_weapons,_magazines,_backpacks,_object] call fn_addCargo;
};
if (_class in DZE_isLockedStorageUpgrade) then {
_object setVariable ["WeaponCargo",_weapons,false];
_object setVariable ["MagazineCargo",_magazines,false];
_object setVariable ["BackpackCargo",_backpacks,false];
};
// Test disabling simulation server side on buildables only.
_object enableSimulation false;
dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
if (Z_SingleCurrency && {(_coins > 0) && {_class in DZE_MoneyStorageClasses}}) then {
_object setVariable ["cashMoney",_coins,true];
_key = format["CHILD:309:%1:",_uid] + str _inv + ":" + str _coins + ":";
_key call server_hiveWrite;
};
diag_log format["PUBLISH: Player %1(%2) upgraded or downgraded object to %3 with UID:%4 @%5",(_activatingPlayer call fa_plr2str),_playerUID,_class,_uid,((_worldspace select 1) call fa_coor2str)];