172 lines
6.0 KiB
Plaintext
172 lines
6.0 KiB
Plaintext
|
// Developed by [GZA] David for German Zombie Apocalypse Servers (https://zombieapo.eu/)
|
||
|
// Rewritten by salival (https://github.com/oiad)
|
||
|
|
||
|
private ["_amount","_backPackCount","_backPackGear","_cargoAmount","_charID","_control","_counter","_display","_enoughMoney","_gearCount","_hasKey","_isLimitArray","_itemText","_items","_keyName","_limit","_magazineCount","_matchedCount","_moneyInfo","_name","_overLimit","_storedVehicles","_success","_typeName","_typeOf","_vehicle","_vehicleID","_vehicleUID","_wealth","_weaponsCount","_woGear","_playerNear","_ownerPUID","_plotCheck"];
|
||
|
|
||
|
disableSerialization;
|
||
|
|
||
|
_display = findDisplay 2800;
|
||
|
_control = ((findDisplay 2800) displayCtrl 2802);
|
||
|
|
||
|
_vehicle = vg_vehicleList select (lbCurSel _control);
|
||
|
_typeOf = typeOf _vehicle;
|
||
|
_isLimitArray = typeName vg_limit == "ARRAY";
|
||
|
|
||
|
_overLimit = false;
|
||
|
_matchedCount = 0;
|
||
|
_storedVehicles = [];
|
||
|
|
||
|
{if (_typeOf isKindOf _x) exitWith {_overLimit = true;}} count vg_blackListed;
|
||
|
if (_overLimit) exitWith {localize "STR_CL_VG_BLACKLISTED" call dayz_rollingMessages;};
|
||
|
|
||
|
{
|
||
|
if (typeName _x == "ARRAY") then {
|
||
|
_storedVehicles set [count _storedVehicles,_x select 1];
|
||
|
};
|
||
|
} count vg_vehicleList;
|
||
|
|
||
|
_gearCount = {
|
||
|
private ["_counter"];
|
||
|
_counter = 0;
|
||
|
{_counter = _counter + _x;} count _this;
|
||
|
_counter
|
||
|
};
|
||
|
|
||
|
if (_isLimitArray) then {
|
||
|
{
|
||
|
_typeName = _x select 0;
|
||
|
_limit = _x select 1;
|
||
|
if (typeName _x == "ARRAY") then {
|
||
|
if (_typeOf isKindOf _typeName) then {
|
||
|
{
|
||
|
if (_x isKindOf _typeName) then {_matchedCount = _matchedCount +1};
|
||
|
if (_matchedCount >= _limit) then {_overLimit = true;};
|
||
|
} count _storedVehicles;
|
||
|
};
|
||
|
};
|
||
|
if (_overLimit) exitWith {};
|
||
|
} count vg_limit;
|
||
|
} else {
|
||
|
if (count _storedVehicles >= vg_limit) then {_overLimit = true;};
|
||
|
};
|
||
|
|
||
|
if (_overLimit) exitWith {
|
||
|
if (_isLimitArray) then {
|
||
|
systemChat localize "STR_CL_VG_LIMIT_ARRAY";
|
||
|
} else {
|
||
|
systemChat localize "STR_CL_VG_LIMIT_NUMBER";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
vg_vehicleList = nil;
|
||
|
|
||
|
_woGear = _this select 0;
|
||
|
closeDialog 0;
|
||
|
if (!vg_storeWithGear && !_woGear) exitWith {localize "STR_CL_VG_NOSTOREWITHGEAR" call dayz_rollingMessages;};
|
||
|
|
||
|
_charID = _vehicle getVariable ["CharacterID","0"];
|
||
|
_vehicleID = _vehicle getVariable ["ObjectID","0"];
|
||
|
_vehicleUID = _vehicle getVariable ["ObjectUID","0"];
|
||
|
_weaponsCount = ((getWeaponCargo _vehicle) select 1) call _gearCount;
|
||
|
_magazineCount = ((getMagazineCargo _vehicle) select 1) call _gearCount;
|
||
|
_backPackCount = ((getBackpackCargo _vehicle) select 1) call _gearCount;
|
||
|
_cargoAmount = (_weaponsCount + _magazineCount + _backPackCount);
|
||
|
|
||
|
if (_vehicleID == "1" || _vehicleUID == "1") exitWith {localize "STR_CL_VG_STORE_MISSION" call dayz_rollingMessages;};
|
||
|
if (isNull DZE_myVehicle || !local DZE_myVehicle) exitWith {localize "STR_EPOCH_PLAYER_245" call dayz_rollingMessages;};
|
||
|
|
||
|
_hasKey = false;
|
||
|
|
||
|
_items = items player;
|
||
|
dayz_myBackpack = unitBackpack player;
|
||
|
|
||
|
if (!isNull dayz_myBackpack) then {
|
||
|
_backPackGear = (getWeaponCargo dayz_myBackpack) select 0;
|
||
|
_items = _items + _backPackGear;
|
||
|
};
|
||
|
|
||
|
if (_charID != "0") then {
|
||
|
{
|
||
|
if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in DZE_itemKeys) then {
|
||
|
if (str(getNumber(configFile >> "CfgWeapons" >> _x >> "keyid")) == _charID) then {
|
||
|
_keyName = _x;
|
||
|
_hasKey = true;
|
||
|
};
|
||
|
};
|
||
|
} count _items;
|
||
|
} else {
|
||
|
_hasKey = true;
|
||
|
};
|
||
|
|
||
|
if (vg_requireKey && {!_hasKey}) exitWith {localize "STR_CL_VG_REQUIRE_KEY" call dayz_rollingMessages;};
|
||
|
|
||
|
_name = getText(configFile >> "cfgVehicles" >> _typeOf >> "displayName");
|
||
|
|
||
|
{
|
||
|
if (_typeOf isKindOf (_x select 0)) exitWith {_amount = _x select 1};
|
||
|
} forEach vg_price;
|
||
|
|
||
|
if (_cargoAmount > 0) then {_amount = _amount + (_cargoAmount * vg_pricePer);};
|
||
|
|
||
|
if (!isNil "sk_dualCurrency") then {_amount = if (z_singleCurrency) then {_amount * 10} else {_amount};};
|
||
|
|
||
|
/*
|
||
|
_playerNear = {isPlayer _x && (_x != player)} count (([_vehicle] call FNC_GetPos) nearEntities ["CAManBase", 15]) > 0;
|
||
|
if (_playerNear) exitWith {localize "STR_CL_VG_PLAYERNEARVEHICLE" call dayz_rollingMessages;};
|
||
|
*/
|
||
|
|
||
|
if (count (crew _vehicle) > 0) exitWith {localize "STR_CL_VG_PLAYERINVEHICLE" call dayz_rollingMessages;};
|
||
|
|
||
|
_enoughMoney = false;
|
||
|
_moneyInfo = [false,[],[],[],0];
|
||
|
_wealth = player getVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),0];
|
||
|
|
||
|
if (Z_SingleCurrency) then {
|
||
|
_enoughMoney = (_wealth >= _amount);
|
||
|
} else {
|
||
|
Z_Selling = false;
|
||
|
if (Z_AllowTakingMoneyFromVehicle) then {false call Z_checkCloseVehicle};
|
||
|
_moneyInfo = _amount call Z_canAfford;
|
||
|
_enoughMoney = _moneyInfo select 0;
|
||
|
};
|
||
|
|
||
|
_success = if (Z_SingleCurrency) then {true} else {[player,_amount,_moneyInfo,true,0] call Z_payDefault};
|
||
|
|
||
|
if (!_success && {_enoughMoney}) exitWith {systemChat localize "STR_EPOCH_TRADE_GEAR_AND_BAG_FULL"};
|
||
|
|
||
|
if (_enoughMoney) then {
|
||
|
_success = if (Z_SingleCurrency) then {_amount <= _wealth} else {[player,_amount,_moneyInfo,false,0] call Z_payDefault};
|
||
|
if (_success) then {
|
||
|
if (Z_SingleCurrency) then {player setVariable [(["cashMoney","globalMoney"] select Z_persistentMoney),(_wealth - _amount),true];};
|
||
|
|
||
|
[_vehicle,true] call local_lockUnlock;
|
||
|
DZE_myVehicle = objNull;
|
||
|
|
||
|
PVDZE_storeVehicle = if (vg_tiedToPole) then {
|
||
|
_plotCheck = [player,false] call FNC_find_plots;
|
||
|
_ownerPUID = if (_plotCheck select 1 > 0) then {(_plotCheck select 2) getVariable ["ownerPUID","0"]} else {dayz_playerUID};
|
||
|
[_vehicle,player,_woGear,_ownerPUID]
|
||
|
} else {
|
||
|
[_vehicle,player,_woGear]
|
||
|
};
|
||
|
|
||
|
publicVariableServer "PVDZE_storeVehicle";
|
||
|
waitUntil {!isNil "PVDZE_storeVehicleResult"};
|
||
|
|
||
|
PVDZE_storeVehicle = nil;
|
||
|
PVDZE_storeVehicleResult = nil;
|
||
|
|
||
|
format[localize "STR_CL_VG_VEHICLE_STORED",_name] call dayz_rollingMessages;
|
||
|
if (vg_removeKey && {_charID != "0"}) then {[player,_keyName,1] call BIS_fnc_invRemove;};
|
||
|
} else {
|
||
|
systemChat localize "STR_EPOCH_TRADE_DEBUG";
|
||
|
};
|
||
|
} else {
|
||
|
_itemText = if (Z_SingleCurrency) then {CurrencyName} else {[_amount,true] call z_calcCurrency};
|
||
|
if (Z_SingleCurrency) then {
|
||
|
systemChat format[localize "STR_CL_VG_NEED_COINS",[_amount] call BIS_fnc_numberText,_itemText,_name];
|
||
|
} else {
|
||
|
systemChat format[localize "STR_CL_VG_NEED_BRIEFCASES",_itemText,_name];
|
||
|
};
|
||
|
};
|