Jump to content

[Alpha Release] Single Currency 3.0 & Storage DEFAULT HIVE ( No global banking).


Recommended Posts

Ok, so after many many hours of testing and bugging other server owners i've finally found a fix for the glitch so i can now let everyone know how it is done and how to prevent it.

 

To perform the glitch (Using Safe as example) requires 2 people.

Unlock the safe

Have a second player stand by with the 'Money Storage' option highlighted ready to click.

Lock the safe

As the person locking the safe bends down to perform the action, have the second player open the 'Money Storage' and keep the dialog open.

Allow the safe to lock and ask the person locking to move away. (To confirm the locking is complete)

Then ask the player with the Bank dialog open to enter any number and click 'Withdraw'

The player will then be given the amount they entered.

 

The reason this works is because of the following function in the ZSCinit.sqf:

 

BankDialogWithdrawAmount = {

private ["_amount","_bank","_wealth"];
 
_amount = parseNumber (_this select 0);
_bank = ZSC_CurrentStorage getVariable ["bankMoney", 0];
_wealth = player getVariable["cashMoney",0];
_vehicleType = typeOf ZSC_CurrentStorage; 
_displayName = getText  (configFile >> "CfgVehicles" >> _vehicleType >> "displayName");
 
if (_amount < 1 or _amount > _bank) exitWith {
cutText [format["You can not withdraw more than is in the %1.",_displayName], "PLAIN DOWN"];
};
 
player setVariable["cashMoney",(_wealth + _amount),true];
ZSC_CurrentStorage setVariable["bankMoney",(_bank - _amount),true];
 
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
 
PVDZE_veh_Update = [ZSC_CurrentStorage,"gear"];
publicVariableServer "PVDZE_veh_Update";
 
cutText [format["You have withdrawn %1 %2 out of the %3", [_amount] call BIS_fnc_numberText, CurrencyName,_displayName], "PLAIN DOWN"];
};

 

This function performs 1 vital check before giving you any money. It checks to see if the amount of coins entered into the dialog is less than 0 OR more than the amount of money in the object.

 

if (_amount < 1 or _amount > _bank) exitWith {

cutText [format["You can not withdraw more than is in the %1.",_displayName], "PLAIN DOWN"];
};

However _bank is the bank value of the UNLOCKED safe. So when the safe becomes LOCKED _bank effectively becomes null. And you can't have a number greater than null (Apparently) 

 

So when you type in a number, it doesnt have a _bank value to check against so it allows you to withdraw any amount of money.

 

The way i have fixed this is quite simple (Even though it took me over 8 hours to figure it out -.-)

 

Simply replace the entire function with the following:

 

 

BankDialogWithdrawAmount = {

private ["_amount","_bank","_wealth"];
 
_amount = parseNumber (_this select 0);
_bank = ZSC_CurrentStorage getVariable ["bankMoney", 0];
_wealth = player getVariable["cashMoney",0];
_vehicleType = typeOf ZSC_CurrentStorage; 
_displayName = getText  (configFile >> "CfgVehicles" >> _vehicleType >> "displayName");
 
//Check to see if the storage is still there.
if (!isNull ZSC_CurrentStorage) then {
 
if (_amount < 1 or _amount > _bank) exitWith {
cutText [format["You can not withdraw more than is in the %1.",_displayName], "PLAIN DOWN"];
};
 
player setVariable["cashMoney",(_wealth + _amount),true]; //Gives player number entered. If statement above checks for amount on object that doesnt exist.
ZSC_CurrentStorage setVariable["bankMoney",(_bank - _amount),true];
 
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
 
PVDZE_veh_Update = [ZSC_CurrentStorage,"gear"];
publicVariableServer "PVDZE_veh_Update";
 
cutText [format["You have withdrawn %1 %2 out of the %3", [_amount] call BIS_fnc_numberText, CurrencyName,_displayName], "PLAIN DOWN"];
 
} else {cutText ["The Vault you are trying to withdraw money from no longer exists or has been locked!", "PLAIN DOWN"];
 
};
};

 

All i have done is added an if statement to check to see if the object still exists before checking the withdraw amount, If the object is no longer there (has been locked) it exits with an error message. I've tested this on my server and i can't see any issues. The withdraw function works fine with normal use of locked storage, and if i try to perform the glitch it throws an error message at me instead of giving me infinite coins. 

 

If anyone could please check this for me, it would be much appreciated. I'm not the best at script writing and i may have overlooked something crucial. But this fix has worked for my particular glitch.

Link to comment
Share on other sites

This is because these traders are not standing on the ground. You can fix this by following these directions : 

 

Replace 

if (player distance _oldPosition <= 1) then {

with

if ((position player) distance _oldPosition <= 1) then {

in ALL of these files

 

  • ZSC\actions\trade_any_bicycle.sqf
  • ZSC\actions\trade_any_boat.sqf
  • ZSC\actions\trade_any_vehicle.sqf
  • ZSC\actions\trade_backpacks.sqf
  • ZSC\actions\trade_items.sqf       [ 2 times! ]
  • ZSC\actions\trade_weapons.sqf

 

Thanks to BangL

The Above Says 2 times, only have one !  i do have trade_items_wo_db.sqf but it doesn't have that line to change, was this just an error ??

Link to comment
Share on other sites

In my ZSC\actions\trade_items.sqf I had two instances of : if (player distance _oldPosition <= 1) then {

 

First one at line 64

Second one at line 146

 

They both need to be changed. 

 

Here is my file for reference : 

 

if(InstantTrading) then {
 
private ["_qty","_buy_o_sell","_playerCash","_needed","_started","_finished","_animState","_isMedic","_abort","_removed","_tradeCounter","_traderID","_total_trades","_activatingPlayer","_finish_trade","_name","_textPart","_price","_emptySlots","_free_magazine_slots"];
 
if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_103") , "PLAIN DOWN"] };
 
DZE_ActionInProgress = true;
 
_buy_o_sell = (_this select 3) select 4;
_activatingPlayer = player;
 
if(_buy_o_sell == "buy") then {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 0;
_textPart = (_this select 3) select 6;
_price = (_this select 3) select 3;
_traderID = (_this select 3) select 7;
_emptySlots = [player] call BIS_fnc_invSlotsEmpty;
_free_magazine_slots = _emptySlots select 4;
_tradeCounter = 0;
 
if(_free_magazine_slots < 1) exitWith {
cutText [(localize "STR_DAYZ_CODE_2"), "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
 
_playerCash = player getVariable ["cashMoney",0];
_total_trades = floor(_playerCash / _price);
 
if (_total_trades < 1) exitWith {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
call _finish_trade;
};
 
if (_total_trades > _free_magazine_slots) then {
_total_trades = _free_magazine_slots;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
 
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
private["_newPosition","_finished","_oldPosition"];
 
if(isNil "_oldPosition") then { _oldPosition = position player;};
_finished = false;
sleep 2;
if ((position player) distance _oldPosition <= 1) then {
_finished = true;
};
 
if (!_finished) exitWith {
            DZE_ActionInProgress = false;
            r_autoTrade = false;
            cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
if (_playerCash >= _price) then {
_playerCash = player getVariable ["cashMoney",0];
player setVariable["cashMoney",(_playerCash - _price),true];
player addMagazine _name;
_abort = false;
cutText [format["Traded %1 %2 for %3",_price,CurrencyName,_textPart], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,0,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
 
DZE_ActionInProgress = false;
 
} else {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 1;
_textPart = (_this select 3) select 5;
_price = (_this select 3) select 2;
_traderID = (_this select 3) select 7;
 
_qty = {_x == _name} count magazines player;
 
_removed = 0;
_tradeCounter = 0;
 
_total_trades = _qty;
if (_total_trades < 1) exitWith {
cutText [format["You do not have a %1", _textPart], "PLAIN DOWN"];
call _finish_trade;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
private["_newPosition","_finished","_oldPosition"];
 
if(isNil "_oldPosition") then { _oldPosition = position player;};
_finished = false;
sleep 2;
if ((position player) distance _oldPosition <= 1) then {
_finished = true;
};
 
if (!_finished) exitWith {
            DZE_ActionInProgress = false;
            r_autoTrade = false;
            cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
 
_removed = ([player,_name,1] call BIS_fnc_invRemove);
if (_removed > 0) then {
_playerCash = player getVariable ["cashMoney",0]; 
player setVariable["cashMoney",(_playerCash + _price),true];
cutText [format[("Traded %1 for %2 %3"),_textPart,_price,CurrencyName], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader City"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,1,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
cutText [format["Something went wrong. Could not remove %1 from inventory", _name], "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
DZE_ActionInProgress = false;
};
 
DZE_ActionInProgress = false;
 
} else {
 
private ["_qty","_buy_o_sell","_playerCash","_needed","_started","_finished","_animState","_isMedic","_abort","_removed","_tradeCounter","_traderID","_total_trades","_activatingPlayer","_finish_trade","_name","_textPart","_price","_emptySlots","_free_magazine_slots"];
 
if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_103") , "PLAIN DOWN"] };
 
DZE_ActionInProgress = true;
 
_buy_o_sell = (_this select 3) select 4;
_activatingPlayer = player;
 
if(_buy_o_sell == "buy") then {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 0;
_textPart = (_this select 3) select 6;
_price = (_this select 3) select 3;
_traderID = (_this select 3) select 7;
_emptySlots = [player] call BIS_fnc_invSlotsEmpty;
_free_magazine_slots = _emptySlots select 4;
_tradeCounter = 0;
 
if(_free_magazine_slots < 1) exitWith {
cutText [(localize "STR_DAYZ_CODE_2"), "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
 
_playerCash = player getVariable ["cashMoney",0];
_total_trades = floor(_playerCash / _price);
 
if (_total_trades < 1) exitWith {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
call _finish_trade;
};
 
if (_total_trades > _free_magazine_slots) then {
_total_trades = _free_magazine_slots;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
 
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
player playActionNow "Medic";
 
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
 
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
 
r_doLoop = false;
 
if (!_finished) exitWith {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
if (_playerCash >= _price) then {
_playerCash = player getVariable ["cashMoney",0];
player setVariable["cashMoney",(_playerCash - _price),true];
player addMagazine _name;
_abort = false;
cutText [format["Traded %1 %2 for %3",_price,CurrencyName,_textPart], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,0,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
 
DZE_ActionInProgress = false;
 
} else {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 1;
_textPart = (_this select 3) select 5;
_price = (_this select 3) select 2;
_traderID = (_this select 3) select 7;
 
_qty = {_x == _name} count magazines player;
 
_removed = 0;
_tradeCounter = 0;
 
_total_trades = _qty;
if (_total_trades < 1) exitWith {
cutText [format["You do not have a %1", _textPart], "PLAIN DOWN"];
call _finish_trade;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
player playActionNow "Medic";
 
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
 
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
 
if (!_finished) exitWith { 
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
 
_removed = ([player,_name,1] call BIS_fnc_invRemove);
if (_removed > 0) then {
_playerCash = player getVariable ["cashMoney",0]; 
player setVariable["cashMoney",(_playerCash + _price),true];
cutText [format[("Traded %1 for %2 %3"),_textPart,_price,CurrencyName], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader City"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,1,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
cutText [format["Something went wrong. Could not remove %1 from inventory", _name], "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
DZE_ActionInProgress = false;
};
 
DZE_ActionInProgress = false;
 
}
;

Link to comment
Share on other sites

In my ZSC\actions\trade_items.sqf I had two instances of : if (player distance _oldPosition <= 1) then {

 

First one at line 64

Second one at line 146

 

They both need to be changed. 

 

Here is my file for reference : 

 

if(InstantTrading) then {
 
private ["_qty","_buy_o_sell","_playerCash","_needed","_started","_finished","_animState","_isMedic","_abort","_removed","_tradeCounter","_traderID","_total_trades","_activatingPlayer","_finish_trade","_name","_textPart","_price","_emptySlots","_free_magazine_slots"];
 
if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_103") , "PLAIN DOWN"] };
 
DZE_ActionInProgress = true;
 
_buy_o_sell = (_this select 3) select 4;
_activatingPlayer = player;
 
if(_buy_o_sell == "buy") then {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 0;
_textPart = (_this select 3) select 6;
_price = (_this select 3) select 3;
_traderID = (_this select 3) select 7;
_emptySlots = [player] call BIS_fnc_invSlotsEmpty;
_free_magazine_slots = _emptySlots select 4;
_tradeCounter = 0;
 
if(_free_magazine_slots < 1) exitWith {
cutText [(localize "STR_DAYZ_CODE_2"), "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
 
_playerCash = player getVariable ["cashMoney",0];
_total_trades = floor(_playerCash / _price);
 
if (_total_trades < 1) exitWith {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
call _finish_trade;
};
 
if (_total_trades > _free_magazine_slots) then {
_total_trades = _free_magazine_slots;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
 
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
private["_newPosition","_finished","_oldPosition"];
 
if(isNil "_oldPosition") then { _oldPosition = position player;};
_finished = false;
sleep 2;
if ((position player) distance _oldPosition <= 1) then {
_finished = true;
};
 
if (!_finished) exitWith {
            DZE_ActionInProgress = false;
            r_autoTrade = false;
            cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
if (_playerCash >= _price) then {
_playerCash = player getVariable ["cashMoney",0];
player setVariable["cashMoney",(_playerCash - _price),true];
player addMagazine _name;
_abort = false;
cutText [format["Traded %1 %2 for %3",_price,CurrencyName,_textPart], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,0,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
 
DZE_ActionInProgress = false;
 
} else {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 1;
_textPart = (_this select 3) select 5;
_price = (_this select 3) select 2;
_traderID = (_this select 3) select 7;
 
_qty = {_x == _name} count magazines player;
 
_removed = 0;
_tradeCounter = 0;
 
_total_trades = _qty;
if (_total_trades < 1) exitWith {
cutText [format["You do not have a %1", _textPart], "PLAIN DOWN"];
call _finish_trade;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
private["_newPosition","_finished","_oldPosition"];
 
if(isNil "_oldPosition") then { _oldPosition = position player;};
_finished = false;
sleep 2;
if ((position player) distance _oldPosition <= 1) then {
_finished = true;
};
 
if (!_finished) exitWith {
            DZE_ActionInProgress = false;
            r_autoTrade = false;
            cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
 
_removed = ([player,_name,1] call BIS_fnc_invRemove);
if (_removed > 0) then {
_playerCash = player getVariable ["cashMoney",0]; 
player setVariable["cashMoney",(_playerCash + _price),true];
cutText [format[("Traded %1 for %2 %3"),_textPart,_price,CurrencyName], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader City"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,1,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
cutText [format["Something went wrong. Could not remove %1 from inventory", _name], "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
DZE_ActionInProgress = false;
};
 
DZE_ActionInProgress = false;
 
} else {
 
private ["_qty","_buy_o_sell","_playerCash","_needed","_started","_finished","_animState","_isMedic","_abort","_removed","_tradeCounter","_traderID","_total_trades","_activatingPlayer","_finish_trade","_name","_textPart","_price","_emptySlots","_free_magazine_slots"];
 
if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_103") , "PLAIN DOWN"] };
 
DZE_ActionInProgress = true;
 
_buy_o_sell = (_this select 3) select 4;
_activatingPlayer = player;
 
if(_buy_o_sell == "buy") then {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 0;
_textPart = (_this select 3) select 6;
_price = (_this select 3) select 3;
_traderID = (_this select 3) select 7;
_emptySlots = [player] call BIS_fnc_invSlotsEmpty;
_free_magazine_slots = _emptySlots select 4;
_tradeCounter = 0;
 
if(_free_magazine_slots < 1) exitWith {
cutText [(localize "STR_DAYZ_CODE_2"), "PLAIN DOWN"];
DZE_ActionInProgress = false;
};
 
_playerCash = player getVariable ["cashMoney",0];
_total_trades = floor(_playerCash / _price);
 
if (_total_trades < 1) exitWith {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
call _finish_trade;
};
 
if (_total_trades > _free_magazine_slots) then {
_total_trades = _free_magazine_slots;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
 
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
player playActionNow "Medic";
 
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
 
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
 
r_doLoop = false;
 
if (!_finished) exitWith {
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
if (_playerCash >= _price) then {
_playerCash = player getVariable ["cashMoney",0];
player setVariable["cashMoney",(_playerCash - _price),true];
player addMagazine _name;
_abort = false;
cutText [format["Traded %1 %2 for %3",_price,CurrencyName,_textPart], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,0,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
_needed =  _price - _playerCash;
cutText [format[(localize "str_epoch_player_184"),_needed,CurrencyName] , "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
 
DZE_ActionInProgress = false;
 
} else {
 
_finish_trade = {
{player removeAction _x} forEach s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
DZE_ActionInProgress = false;
dayzTradeResult = nil;
};
 
_name = (_this select 3) select 1;
_textPart = (_this select 3) select 5;
_price = (_this select 3) select 2;
_traderID = (_this select 3) select 7;
 
_qty = {_x == _name} count magazines player;
 
_removed = 0;
_tradeCounter = 0;
 
_total_trades = _qty;
if (_total_trades < 1) exitWith {
cutText [format["You do not have a %1", _textPart], "PLAIN DOWN"];
call _finish_trade;
};
 
_abort = false;
 
for "_x" from 1 to _total_trades do {
_tradeCounter = _tradeCounter + 1;
 
if(_total_trades == 1) then { 
cutText [(localize "STR_EPOCH_PLAYER_105"), "PLAIN DOWN"];
} else {
cutText [format[(localize "STR_EPOCH_PLAYER_187"),_tradeCounter,_total_trades], "PLAIN DOWN"];
};
 
player playActionNow "Medic";
 
r_interrupt = false;
_animState = animationState player;
r_doLoop = true;
_started = false;
_finished = false;
 
while {r_doLoop} do {
_animState = animationState player;
_isMedic = ["medic",_animState] call fnc_inString;
if (_isMedic) then {
_started = true;
};
if (_started and !_isMedic) then {
r_doLoop = false;
_finished = true;
};
if (r_interrupt) then {
r_doLoop = false;
};
sleep 0.1;
};
r_doLoop = false;
 
if (!_finished) exitWith { 
r_interrupt = false;
if (vehicle player == player) then {
[objNull, player, rSwitchMove,""] call RE;
player playActionNow "stop";
};
cutText [(localize "str_epoch_player_106") , "PLAIN DOWN"];
};
 
if (_finished) then {
 
_removed = ([player,_name,1] call BIS_fnc_invRemove);
if (_removed > 0) then {
_playerCash = player getVariable ["cashMoney",0]; 
player setVariable["cashMoney",(_playerCash + _price),true];
cutText [format[("Traded %1 for %2 %3"),_textPart,_price,CurrencyName], "PLAIN DOWN"];
PVDZE_plr_Save = [player,(magazines player),true,true] ;
publicVariableServer "PVDZE_plr_Save";
if (isNil "_name") then { _name = "Unknown Item"; };
if (isNil "inTraderCity") then {
inTraderCity = "Unknown Trader City"; 
} else {
if (inTraderCity == "Any") then {
inTraderCity = "Unknown Trader"; 
};
};
PVDZE_obj_Trade = [_activatingPlayer,_traderID,1,_name,inTraderCity,CurrencyName,_price];
publicVariableServer "PVDZE_obj_Trade";
} else {
cutText [format["Something went wrong. Could not remove %1 from inventory", _name], "PLAIN DOWN"];
_abort = true;
};
};
sleep 1;
if(_abort) exitWith {};
};
DZE_ActionInProgress = false;
};
 
DZE_ActionInProgress = false;
 
}
;

I see said the blind Squirrel ! Thanks again ElDubya  

Blind-Squirrel-Finds-a-Nut-small.jpg

Link to comment
Share on other sites

Everyone,

 

How do we go about adding coins to loot boxes at AI missions or would it be easier to just allow the players to take the briefcases to vendors in town and convert it from briefcases to gold coins?  Also, if possible how to add Coins to the AI "Check Wallet" function with a random amount which is controlled by a min and max amount of course :)

 

Thanks,

steamROLLER

Link to comment
Share on other sites

I've been having this error .. Think I just found the issue ?? Everything appears to work anyway
 

if( isNil "ZSC_Overwrite_PackVault" || ZSC_Overwrite_PackVault)then{
player_pac>
16:07:46   Error position: <ZSC_Overwrite_PackVault)then{
player_pac>
16:07:46   Error Undefined variable in expression: zsc_overwrite_packvault
16:07:46 File mpmissions\__cur_mp.Napf\ZSC\gold\ZSCinit.sqf, line 23
 
and This is is in the ZSCconfig.sqf 

 // if TRUE: Overwrites yours player_unlockVault.sqf with default 1 + edits. | IF False: Change content yourself @ step D
ZSC_Overwrite_UnLockVault = false;
 
 // if TRUE: Overwrites yours player_lockVault.sqf with default 1 + edits. | IF False: Change content yourself @ step D
ZSC_Overwrite_LockVault = false;
 
I did edit all these my self  all the steps in D..and not used zupas due to P4L and checked and re-check looks correct ! :(

Below is My Self Actions SPOILER
 

scriptName "Functions\misc\fn_selfActions.sqf";


/***********************************************************
ADD ACTIONS FOR SELF
- Function
- [] call fnc_usec_selfActions;
************************************************************/
private ["_isWreckBuilding","_temp_keys","_magazinesPlayer","_isPZombie","_vehicle","_inVehicle","_hasFuelE","_hasRawMeat","_hasKnife","_hasToolbox","_onLadder","_nearLight","_canPickLight","_canDo","_text","_isHarvested","_isVehicle","_isVehicletype","_isMan","_traderType","_ownerID","_isAnimal","_isDog","_isZombie","_isDestructable","_isTent","_isFuel","_isAlive","_Unlock","_lock","_buy","_dogHandle","_lieDown","_warn","_hastinitem","_allowedDistance","_menu","_menu1","_humanity_logic","_low_high","_cancel","_metals_trader","_traderMenu","_isWreck","_isRemovable","_isDisallowRepair","_rawmeat","_humanity","_speed","_dog","_hasbottleitem","_isAir","_isShip","_playersNear","_findNearestGens","_findNearestGen","_IsNearRunningGen","_cursorTarget","_isnewstorage","_itemsPlayer","_ownerKeyId","_typeOfCursorTarget","_hasKey","_oldOwner","_combi","_key_colors","_player_deleteBuild","_player_flipveh","_player_lockUnlock_crtl","_player_butcher","_player_studybody","_player_cook","_player_boil","_hasFuelBarrelE","_hasHotwireKit","_player_SurrenderedGear","_isSurrendered","_isModular","_isModularDoor","_ownerKeyName","_temp_keys_names","_hasAttached","_allowTow","_liftHeli","_found","_posL","_posC","_height","_liftHelis","_attached","_playerUID","_characterID"];

if (DZE_ActionInProgress) exitWith {}; // Do not allow if any script is running.

_vehicle = vehicle player;
_isPZombie = player isKindOf "PZombie_VB";
_inVehicle = (_vehicle != player);

_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
_canDo = (!r_drag_sqf && !r_player_unconscious && !_onLadder);

_nearLight = nearestObject [player,"LitObject"];
_canPickLight = false;
if (!isNull _nearLight) then {
if (_nearLight distance player < 4) then {
_canPickLight = isNull (_nearLight getVariable ["owner",objNull]);
};
};

//Grab Flare
if (_canPickLight && !dayz_hasLight && !_isPZombie) then {
if (s_player_grabflare < 0) then {
_text = getText (configFile >> "CfgAmmo" >> (typeOf _nearLight) >> "displayName");
s_player_grabflare = player addAction [format[localize "str_actions_medical_15",_text], "\z\addons\dayz_code\actions\flare_pickup.sqf",_nearLight, 1, false, true, "", ""];
s_player_removeflare = player addAction [format[localize "str_actions_medical_17",_text], "\z\addons\dayz_code\actions\flare_remove.sqf",_nearLight, 1, false, true, "", ""];
};
} else {
player removeAction s_player_grabflare;
player removeAction s_player_removeflare;
s_player_grabflare = -1;
s_player_removeflare = -1;
};

if (DZE_HeliLift) then {
_hasAttached = _vehicle getVariable["hasAttached",false];
if(_inVehicle && (_vehicle isKindOf "Air") && ((([_vehicle] call FNC_getPos) select 2) < 30) && (speed _vehicle < 5) && (typeName _hasAttached == "OBJECT")) then {
if (s_player_heli_detach < 0) then {
dayz_myLiftVehicle = _vehicle;
s_player_heli_detach = dayz_myLiftVehicle addAction ["Detach Vehicle","\z\addons\dayz_code\actions\player_heliDetach.sqf",[dayz_myLiftVehicle,_hasAttached],2,false,true,"",""];
};
} else {
dayz_myLiftVehicle removeAction s_player_heli_detach;
s_player_heli_detach = -1;
};
};

if(DZE_HaloJump) then {
if(_inVehicle && (_vehicle isKindOf "Air") && ((([_vehicle] call FNC_getPos) select 2) > 400)) then {
if (s_halo_action < 0) then {
DZE_myHaloVehicle = _vehicle;
s_halo_action = DZE_myHaloVehicle addAction [localize "STR_EPOCH_ACTIONS_HALO","\z\addons\dayz_code\actions\halo_jump.sqf",[],2,false,true,"",""];
};
} else {
DZE_myHaloVehicle removeAction s_halo_action;
s_halo_action = -1;
};
};

if (!DZE_ForceNameTagsOff) then {
if (s_player_showname < 0 && !_isPZombie) then {
if (DZE_ForceNameTags) then {
s_player_showname = 1;
player setVariable["DZE_display_name",true,true];
} else {
s_player_showname = player addAction [localize "STR_EPOCH_ACTIONS_NAMEYES", "\z\addons\dayz_code\actions\display_name.sqf",true, 0, true, false, "",""];
s_player_showname1 = player addAction [localize "STR_EPOCH_ACTIONS_NAMENO", "\z\addons\dayz_code\actions\display_name.sqf",false, 0, true, false, "",""];
};
};
};

if(_isPZombie) then {
if (s_player_callzombies < 0) then {
s_player_callzombies = player addAction [localize "STR_EPOCH_ACTIONS_RAISEHORDE", "\z\addons\dayz_code\actions\call_zombies.sqf",player, 5, true, false, "",""];
};
if (DZE_PZATTACK) then {
call pz_attack;
DZE_PZATTACK = false;
};
if (s_player_pzombiesvision < 0) then {
s_player_pzombiesvision = player addAction [localize "STR_EPOCH_ACTIONS_NIGHTVIS", "\z\addons\dayz_code\actions\pzombie\pz_vision.sqf", [], 4, false, true, "nightVision", "_this == _target"];
};
if (!isNull cursorTarget && (player distance cursorTarget < 3)) then { //Has some kind of target
_isAnimal = cursorTarget isKindOf "Animal";
_isZombie = cursorTarget isKindOf "zZombie_base";
_isHarvested = cursorTarget getVariable["meatHarvested",false];
_isMan = cursorTarget isKindOf "Man";
// Pzombie Gut human corpse || animal
if (!alive cursorTarget && (_isAnimal || _isMan) && !_isZombie && !_isHarvested) then {
if (s_player_pzombiesfeed < 0) then {
s_player_pzombiesfeed = player addAction [localize "STR_EPOCH_ACTIONS_FEED", "\z\addons\dayz_code\actions\pzombie\pz_feed.sqf",cursorTarget, 3, true, false, "",""];
};
} else {
player removeAction s_player_pzombiesfeed;
s_player_pzombiesfeed = -1;
};
} else {
player removeAction s_player_pzombiesfeed;
s_player_pzombiesfeed = -1;
};
};

// Increase distance only if AIR || SHIP
_allowedDistance = 4;
_isAir = cursorTarget isKindOf "Air";
_isShip = cursorTarget isKindOf "Ship";
if(_isAir || _isShip) then {
_allowedDistance = 8;
};

if (!isNull cursorTarget && !_inVehicle && !_isPZombie && (player distance cursorTarget < _allowedDistance) && _canDo) then { //Has some kind of target

// set cursortarget to variable
_cursorTarget = cursorTarget;

// get typeof cursortarget once
_typeOfCursorTarget = typeOf _cursorTarget;

// hintsilent _typeOfCursorTarget;

_isVehicle = _cursorTarget isKindOf "AllVehicles";
_isVehicletype = _typeOfCursorTarget in ["ATV_US_EP1","ATV_CZ_EP1"];
_isnewstorage = _typeOfCursorTarget in DZE_isNewStorage;

// get items && magazines only once
_magazinesPlayer = magazines player;

//boiled Water
_hasbottleitem = "ItemWaterbottle" in _magazinesPlayer;
_hastinitem = false;
{
if (_x in _magazinesPlayer) then {
_hastinitem = true;
};
} count boil_tin_cans;
_hasFuelE = "ItemJerrycanEmpty" in _magazinesPlayer;
_hasFuelBarrelE = "ItemFuelBarrelEmpty" in _magazinesPlayer;
_hasHotwireKit = "ItemHotwireKit" in _magazinesPlayer;

_itemsPlayer = items player;

_temp_keys = [];
_temp_keys_names = [];
// find available keys
_key_colors = ["ItemKeyYellow","ItemKeyBlue","ItemKeyRed","ItemKeyGreen","ItemKeyBlack"];
{
if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _x)) in _key_colors) then {
_ownerKeyId = getNumber(configFile >> "CfgWeapons" >> _x >> "keyid");
_ownerKeyName = getText(configFile >> "CfgWeapons" >> _x >> "displayName");
_temp_keys_names set [_ownerKeyId,_ownerKeyName];
_temp_keys set [count _temp_keys,str(_ownerKeyId)];
};
} count _itemsPlayer;

_hasKnife = "ItemKnife" in _itemsPlayer;
_hasToolbox = "ItemToolbox" in _itemsPlayer;

_playerUID = getPlayerUID player;
_isMan = _cursorTarget isKindOf "Man";
_traderType = _typeOfCursorTarget;
_ownerID = _cursorTarget getVariable ["ownerPUID","0"];
_characterID = _cursorTarget getVariable ["CharacterID","0"];
_isAnimal = _cursorTarget isKindOf "Animal";
_isDog = (_cursorTarget isKindOf "DZ_Pastor" || _cursorTarget isKindOf "DZ_Fin");
_isZombie = _cursorTarget isKindOf "zZombie_base";
_isDestructable = _cursorTarget isKindOf "BuiltItems";
_isWreck = _typeOfCursorTarget in DZE_isWreck;
_isWreckBuilding = _typeOfCursorTarget in DZE_isWreckBuilding;
_isModular = _cursorTarget isKindOf "ModularItems";
_isModularDoor = _typeOfCursorTarget in ["Land_DZE_WoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_GarageWoodDoor","CinderWallDoor_DZ","CinderWallDoorSmall_DZ"];

_isRemovable = _typeOfCursorTarget in DZE_isRemovable;
_isDisallowRepair = _typeOfCursorTarget in ["M240Nest_DZ"];

_isTent = _cursorTarget isKindOf "TentStorage";

_isAlive = alive _cursorTarget;

_text = getText (configFile >> "CfgVehicles" >> _typeOfCursorTarget >> "displayName");

_rawmeat = meatraw;
_hasRawMeat = false;
{
if (_x in _magazinesPlayer) then {
_hasRawMeat = true;
};
} count _rawmeat;

_isFuel = false;
if (_hasFuelE || _hasFuelBarrelE) then {
{
if(_cursorTarget isKindOf _x) exitWith {_isFuel = true;};
} count dayz_fuelsources;
};

// diag_log ("OWNERID = " + _ownerID + " CHARID = " + dayz_characterID + " " + str(_ownerID == dayz_characterID));

// logic vars
_player_flipveh = false;
_player_deleteBuild = false;
_player_lockUnlock_crtl = false;

if (_canDo && (speed player <= 1) && (_cursorTarget isKindOf "Plastic_Pole_EP1_DZ")) then {
if (s_player_plotManagement < 0) then {
_adminList = ["0152"]; // Add admins here if you admins to able to manage all plotpoles
_owner = _cursorTarget getVariable ["ownerPUID","0"];
_friends = _cursorTarget getVariable ["plotfriends", []];
_fuid = [];
{
_friendUID = _x select 0;
_fuid = _fuid + [_friendUID];
} forEach _friends;
_allowed = [_owner];
_allowed = [_owner] + _adminList + _fuid;
if((getPlayerUID player) in _allowed)then{
s_player_plotManagement = player addAction ["Manage Plot", "plotManagement\initPlotManagement.sqf", [], 5, false];
};
};
if (s_player_maintain_area < 0) then {
s_player_maintain_area = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTAREA"], "\z\addons\dayz_code\actions\maintain_area.sqf", "maintain", 5, false];
s_player_maintain_area_preview = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_MAINTPREV"], "\z\addons\dayz_code\actions\maintain_area.sqf", "preview", 5, false];
};
} else {
player removeAction s_player_plotManagement;
s_player_plotManagement = -1;
player removeAction s_player_maintain_area;
s_player_maintain_area = -1;
player removeAction s_player_maintain_area_preview;
s_player_maintain_area_preview = -1;
};

// CURSOR TARGET ALIVE
if(_isAlive) then {

//Allow player to delete objects
if(_isDestructable || _isWreck || _isRemovable || _isWreckBuilding) then {
if(_hasToolbox && "ItemCrowbar" in _itemsPlayer) then {
_player_deleteBuild = true;
};
};

//diag_log format["fn_selfactions remove: [PlayerUID = %1] [OwnerID = %2] [is Modular: %3] [Object: %4]", _playerUID, _ownerID,_isModular, cursortarget];

//Allow owners to delete modulars

diag_log format["fn_actons: [PlayerUID: %1] [_ownerID: %2] [_isModular: %3] [typeOfCursorTarget: %4]",_playerUID, _ownerID, _isModular, _typeOfCursorTarget];

if(_isModular) then {
if(_hasToolbox && "ItemCrowbar" in _itemsPlayer) then {
_findNearestPoles = nearestObjects[player, ["Plastic_Pole_EP1_DZ"], DZE_PlotPole select 0];
_IsNearPlot = count (_findNearestPoles);
_fuid = [];
_allowed = [];
if(_IsNearPlot > 0)then{
_thePlot = _findNearestPoles select 0;
_owner = _thePlot getVariable ["ownerPUID","010"];
_friends = _thePlot getVariable ["plotfriends", []];
{
_friendUID = _x select 0;
_fuid = _fuid + [_friendUID];
} forEach _friends;
_allowed = [_owner];
_allowed = [_owner] + _fuid;
if ( _playerUID in _allowed && _ownerID in _allowed ) then {
_player_deleteBuild = true;
};
}else{
if(_ownerID == _playerUID)then{
_player_deleteBuild = true;
};
};
};
};
//Allow owners to delete modular doors without locks
if(_isModularDoor) then {
if(_hasToolbox && "ItemCrowbar" in _itemsPlayer) then {
_findNearestPoles = nearestObjects[player, ["Plastic_Pole_EP1_DZ"], DZE_PlotPole select 0];
_IsNearPlot = count (_findNearestPoles);
_fuid = [];
_allowed = [];
if(_IsNearPlot > 0)then{
_thePlot = _findNearestPoles select 0;
_owner = _thePlot getVariable ["ownerPUID","010"];
_friends = _thePlot getVariable ["plotfriends", []];
{
_friendUID = _x select 0;
_fuid = _fuid + [_friendUID];
} forEach _friends;
_allowed = [_owner];
_allowed = [_owner] + _fuid;
if ( _playerUID in _allowed && _ownerID in _allowed) then {
_player_deleteBuild = true;
};
}else{
if(_ownerID == _playerUID)then{
_player_deleteBuild = true;
};
};
};
};
// CURSOR TARGET VEHICLE
if(_isVehicle) then {

//flip vehicle small vehicles by your self && all other vehicles with help nearby
if (!(canmove _cursorTarget) && (player distance _cursorTarget >= 2) && (count (crew _cursorTarget))== 0 && ((vectorUp _cursorTarget) select 2) < 0.5) then {
_playersNear = {isPlayer _x} count (player nearEntities ["CAManBase", 6]);
if(_isVehicletype || (_playersNear >= 2)) then {
_player_flipveh = true;
};
};


if(!_isMan && _characterID != "0" && !(_cursorTarget isKindOf "Bicycle")) then {
_player_lockUnlock_crtl = true;
};

};

};

if(_player_deleteBuild) then {
if (s_player_deleteBuild < 0) then {
s_player_deleteBuild = player addAction [format[localize "str_actions_delete",_text], "Custom\PlotForLifev2\remove.sqf",_cursorTarget, 1, true, true, "", ""];
};
} else {
player removeAction s_player_deleteBuild;
s_player_deleteBuild = -1;
};

if (DZE_HeliLift) then {
_liftHeli = objNull;
_found = false;

_allowTow = false;
if ((count (crew _cursorTarget)) == 0) then {
{
if(!_allowTow) then {
_allowTow = _cursorTarget isKindOf _x;
};
} count DZE_HeliAllowToTow;
};

//diag_log format["CREW: %1 ALLOW: %2",(count (crew _cursorTarget)),_allowTow];

if (_allowTow) then {
_liftHelis = nearestObjects [player, DZE_HeliAllowTowFrom, 15];
{
if(!_found) then {
_posL = [_x] call FNC_getPos;
_posC = [_cursorTarget] call FNC_getPos;
_height = (_posL select 2) - (_posC select 2);
_hasAttached = _x getVariable["hasAttached",false];
if(_height < 15 && _height > 5 && (typeName _hasAttached != "OBJECT")) then {
if(((abs((_posL select 0) - (_posC select 0))) < 10) && ((abs((_posL select 1) - (_posC select 1))) < 10)) then {
_liftHeli = _x;
_found = true;
};
};
};
} count _liftHelis;
};

//diag_log format["HELI: %1 TARGET: %2",_found,_cursorTarget];

_attached = _cursorTarget getVariable["attached",false];
if(_found && _allowTow && _canDo && !locked _cursorTarget && !_isPZombie && (typeName _attached != "OBJECT")) then {
if (s_player_heli_lift < 0) then {
s_player_heli_lift = player addAction ["Attach to Heli", "\z\addons\dayz_code\actions\player_heliLift.sqf",[_liftHeli,_cursorTarget], -10, false, true, "",""];
};
} else {
player removeAction s_player_heli_lift;
s_player_heli_lift = -1;
};
};

// Allow Owner to lock && unlock vehicle
if(_player_lockUnlock_crtl) then {
if (s_player_lockUnlock_crtl < 0) then {
_hasKey = _characterID in _temp_keys;
_oldOwner = (_characterID == dayz_playerUID);
if(locked _cursorTarget) then {
if(_hasKey || _oldOwner) then {
_Unlock = player addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\unlock_veh.sqf",[_cursorTarget,(_temp_keys_names select (parseNumber _characterID))], 2, true, true, "", ""];
s_player_lockunlock set [count s_player_lockunlock,_Unlock];
s_player_lockUnlock_crtl = 1;
} else {
if(_hasHotwireKit) then {
_Unlock = player addAction [format[localize "STR_EPOCH_ACTIONS_HOTWIRE",_text], "\z\addons\dayz_code\actions\hotwire_veh.sqf",_cursorTarget, 2, true, true, "", ""];
} else {
_Unlock = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_VEHLOCKED"], "",_cursorTarget, 2, true, true, "", ""];
};
s_player_lockunlock set [count s_player_lockunlock,_Unlock];
s_player_lockUnlock_crtl = 1;
};
} else {
if(_hasKey || _oldOwner) then {
_lock = player addAction [format[localize "STR_EPOCH_ACTIONS_LOCK",_text], "\z\addons\dayz_code\actions\lock_veh.sqf",_cursorTarget, 1, true, true, "", ""];
s_player_lockunlock set [count s_player_lockunlock,_lock];
s_player_lockUnlock_crtl = 1;
};
};
};

} else {
{player removeAction _x} count s_player_lockunlock;s_player_lockunlock = [];
s_player_lockUnlock_crtl = -1;
};

if(DZE_AllowForceSave) then {
//Allow player to force save
if((_isVehicle || _isTent) && !_isMan) then {
if (s_player_forceSave < 0) then {
s_player_forceSave = player addAction [format[localize "str_actions_save",_text], "\z\addons\dayz_code\actions\forcesave.sqf",_cursorTarget, 1, true, true, "", ""];
};
} else {
player removeAction s_player_forceSave;
s_player_forceSave = -1;
};
};



If(DZE_AllowCargoCheck) then {
if((_isVehicle || _isTent || _isnewstorage) && _isAlive && !_isMan && !locked _cursorTarget) then {
if (s_player_checkGear < 0) then {
s_player_checkGear = player addAction [localize "STR_EPOCH_PLAYER_CARGO", "\z\addons\dayz_code\actions\cargocheck.sqf",_cursorTarget, 1, true, true, "", ""];
};
} else {
player removeAction s_player_checkGear;
s_player_checkGear = -1;
};
};


//flip vehicle small vehicles by your self && all other vehicles with help nearby
if(_player_flipveh) then {
if (s_player_flipveh < 0) then {
s_player_flipveh = player addAction [format[localize "str_actions_flipveh",_text], "\z\addons\dayz_code\actions\player_flipvehicle.sqf",_cursorTarget, 1, true, true, "", ""];
};
} else {
player removeAction s_player_flipveh;
s_player_flipveh = -1;
};

//Allow player to fill jerrycan
if((_hasFuelE || _hasFuelBarrelE) && _isFuel) then {
if (s_player_fillfuel < 0) then {
s_player_fillfuel = player addAction [localize "str_actions_self_10", "\z\addons\dayz_code\actions\jerry_fill.sqf",[], 1, false, true, "", ""];
};
} else {
player removeAction s_player_fillfuel;
s_player_fillfuel = -1;
};

// logic vars for addactions
_player_butcher = false;
_player_studybody = false;
_player_SurrenderedGear = false;

// CURSOR TARGET NOT ALIVE
if (!_isAlive) then {

// Gut animal/zed
if((_isAnimal || _isZombie) && _hasKnife) then {
_isHarvested = _cursorTarget getVariable["meatHarvested",false];
if (!_isHarvested) then {
_player_butcher = true;
};
};

// Study body
if (_isMan && !_isZombie && !_isAnimal) then {
_player_studybody = true;
}
} else {
// unit alive

// gear access on surrendered player
if(_isMan && !_isZombie && !_isAnimal) then {
_isSurrendered = _cursorTarget getVariable ["DZE_Surrendered",false];
if (_isSurrendered) then {
_player_SurrenderedGear = true;
};
};
};


// Human Gut animal || zombie
if (_player_butcher) then {
if (s_player_butcher < 0) then {
if(_isZombie) then {
s_player_butcher = player addAction [localize "STR_EPOCH_ACTIONS_GUTZOM", "\z\addons\dayz_code\actions\gather_zparts.sqf",_cursorTarget, 0, true, true, "", ""];
} else {
s_player_butcher = player addAction [localize "str_actions_self_04", "\z\addons\dayz_code\actions\gather_meat.sqf",_cursorTarget, 3, true, true, "", ""];
};
};
} else {
player removeAction s_player_butcher;
s_player_butcher = -1;
};

// Study Body
if (_player_studybody) then {
if (s_player_studybody < 0) then {
s_player_studybody = player addAction [(""+("Check Wallet") + ""), "ZSC\actions\check_wallet.sqf",_cursorTarget, 0, false, true, "",""];
};
} else {
player removeAction s_player_studybody;
s_player_studybody = -1;
};
//Remove CLOTHES
if (_isMan and !_isAlive and !_isZombie and !_isAnimal) then {
if (s_clothes < 0) then {
s_clothes = player addAction [("" + ("Take Clothes") + ""), "zupa\skins\removeclothes.sqf",cursorTarget, 1, false, true, "",""];
};
} else {
player removeAction s_clothes;
s_clothes = -1;
};
// logic vars
_player_cook = false;
_player_boil = false;

// CURSOR TARGET IS FIRE
if (inflamed _cursorTarget) then {

//Fireplace Actions check
if (_hasRawMeat) then {
_player_cook = true;
};

// Boil water
if (_hasbottleitem && _hastinitem) then {
_player_boil = true;
};
};

if (_player_SurrenderedGear) then {
if (s_player_SurrenderedGear < 0) then {
s_player_SurrenderedGear = player addAction [localize "STR_EPOCH_ACTIONS_GEAR", "\z\addons\dayz_code\actions\surrender_gear.sqf",_cursorTarget, 1, true, true, "", ""];
};
} else {
player removeAction s_player_SurrenderedGear;
s_player_SurrenderedGear = -1;
};

//Fireplace Actions check
if (_player_cook) then {
if (s_player_cook < 0) then {
s_player_cook = player addAction [localize "str_actions_self_05", "\z\addons\dayz_code\actions\cook.sqf",_cursorTarget, 3, true, true, "", ""];
};
} else {
player removeAction s_player_cook;
s_player_cook = -1;
};

// Boil water
if (_player_boil) then {
if (s_player_boil < 0) then {
s_player_boil = player addAction [localize "str_actions_boilwater", "\z\addons\dayz_code\actions\boil.sqf",_cursorTarget, 3, true, true, "", ""];
};
} else {
player removeAction s_player_boil;
s_player_boil = -1;
};

if(_cursorTarget == dayz_hasFire) then {
if ((s_player_fireout < 0) && !(inflamed _cursorTarget) && (player distance _cursorTarget < 3)) then {
s_player_fireout = player addAction [localize "str_actions_self_06", "\z\addons\dayz_code\actions\fire_pack.sqf",_cursorTarget, 0, false, true, "",""];
};
} else {
player removeAction s_player_fireout;
s_player_fireout = -1;
};

//Packing my tent
if(_isTent && (player distance _cursorTarget < 3)) then {
if (_ownerID == _playerUID) then {
if (s_player_packtent < 0) then {
s_player_packtent = player addAction [localize "str_actions_self_07", "\z\addons\dayz_code\actions\tent_pack.sqf",_cursorTarget, 0, false, true, "",""];
};
} else {
if(("ItemJerrycan" in _magazinesPlayer) && ("ItemMatchbox_DZE" in weapons player)) then {
if (s_player_packtent < 0) then {
s_player_packtent = player addAction [localize "STR_EPOCH_ACTIONS_DESTROYTENT", "Custom\PlotForLifev2\remove.sqf",_cursorTarget, 1, true, true, "", ""];
};
};
};
} else {
player removeAction s_player_packtent;
s_player_packtent = -1;
};
//Allow manage door
if((_typeOfCursorTarget in DZE_DoorsLocked)) then {
if (s_player_manageDoor < 0) then {
s_player_manageDoor = player addAction ["Manage Door", "doorManagement\initDoorManagement.sqf", _cursorTarget, 5, false];
};
} else {
player removeAction s_player_manageDoor;
s_player_manageDoor = -1;
};
//Allow owner to unlock vault
if((_typeOfCursorTarget in DZE_LockableStorage) && _characterID != "0" && (player distance _cursorTarget < 3)) then {
if (s_player_unlockvault < 0) then {
if(_typeOfCursorTarget in DZE_LockedStorage) then {
if(_characterID == dayz_combination || _ownerID == _playerUID) then {
_combi = player addAction [format[localize "STR_EPOCH_ACTIONS_OPEN",_text], "\z\addons\dayz_code\actions\vault_unlock.sqf",_cursorTarget, 0, false, true, "",""];
s_player_combi set [count s_player_combi,_combi];
} else {
_combi = player addAction [format[localize "STR_EPOCH_ACTIONS_UNLOCK",_text], "\z\addons\dayz_code\actions\vault_combination_1.sqf",_cursorTarget, 0, false, true, "",""];
s_player_combi set [count s_player_combi,_combi];
};
s_player_unlockvault = 1;
} else {
if(_characterID != dayz_combination && _ownerID != _playerUID) then {
_combi = player addAction [localize "STR_EPOCH_ACTIONS_RECOMBO", "\z\addons\dayz_code\actions\vault_combination_1.sqf",_cursorTarget, 0, false, true, "",""];
s_player_combi set [count s_player_combi,_combi];
s_player_unlockvault = 1;
};
};
};
} else {
{player removeAction _x} count s_player_combi;s_player_combi = [];
s_player_unlockvault = -1;
};

if(_typeOfCursorTarget in ZSC_MoneyStorage && (player distance _cursorTarget < 5)) then {
if (s_bank_dialog < 0) then {
s_bank_dialog = player addAction ["Money Storage", "ZSC\actions\bank_dialog.sqf",_cursorTarget, 3, true, true, "", ""];
};
} else {
player removeAction s_bank_dialog;
s_bank_dialog = -1;
};

// cars
if( _isVehicle && !_isMan &&_isAlive && !_isMan && !locked _cursorTarget && !(_cursorTarget isKindOf "Bicycle") && (player distance _cursorTarget < 5)) then {
if (s_bank_dialog2 < 0) then {
s_bank_dialog2 = player addAction ["Money Storage", "ZSC\actions\bank_dialog.sqf",_cursorTarget, 3, true, true, "", ""];
};
} else {
player removeAction s_bank_dialog2;
s_bank_dialog2 = -1;
};

//Allow owner to pack vault
if(_typeOfCursorTarget in DZE_UnLockedStorage && _characterID != "0" && (player distance _cursorTarget < 3)) then {

if (s_player_lockvault < 0) then {
if(_characterID == dayz_combination || _ownerID == dayz_playerUID) then {
s_player_lockvault = player addAction [format[localize "STR_EPOCH_ACTIONS_LOCK",_text], "\z\addons\dayz_code\actions\vault_lock.sqf",_cursorTarget, 0, false, true, "",""];
};
};
if (s_player_packvault < 0 && (_characterID == dayz_combination || _ownerID == dayz_playerUID)) then {
s_player_packvault = player addAction [format["%1",(format[localize "STR_EPOCH_ACTIONS_PACK",_text])], "\z\addons\dayz_code\actions\vault_pack.sqf",_cursorTarget, 0, false, true, "",""];
};
} else {
player removeAction s_player_packvault;
s_player_packvault = -1;
player removeAction s_player_lockvault;
s_player_lockvault = -1;
};



//Player Deaths
if(_typeOfCursorTarget == "Info_Board_EP1") then {
if (s_player_information < 0) then {
s_player_information = player addAction [localize "STR_EPOCH_ACTIONS_MURDERS", "\z\addons\dayz_code\actions\list_playerDeaths.sqf",[], 7, false, true, "",""];
};
} else {
player removeAction s_player_information;
s_player_information = -1;
};

if (_isMan and _isAlive and !_isZombie and !_isAnimal and !(_traderType in serverTraders)) then {
if (s_givemoney_dialog < 0) then {
s_givemoney_dialog = player addAction [format["Give Money to %1", (name _cursorTarget)], "ZSC\actions\give_player_dialog.sqf",_cursorTarget, 3, true, true, "", ""];
};
} else {
player removeAction s_givemoney_dialog;
s_givemoney_dialog = -1;
};

//Fuel Pump
if(_typeOfCursorTarget in dayz_fuelpumparray) then {
if (s_player_fuelauto < 0) then {

// check if Generator_DZ is running within 30 meters
_findNearestGens = nearestObjects [player, ["Generator_DZ"], 30];
_findNearestGen = [];
{
if (alive _x && (_x getVariable ["GeneratorRunning", false])) then {
_findNearestGen set [(count _findNearestGen),_x];
};
} count _findNearestGens;
_IsNearRunningGen = count (_findNearestGen);

// show that pump needs power if no generator nearby.
if(_IsNearRunningGen > 0) then {
s_player_fuelauto = player addAction [localize "STR_EPOCH_ACTIONS_FILLVEH", "\z\addons\dayz_code\actions\fill_nearestVehicle.sqf",objNull, 0, false, true, "",""];
} else {
s_player_fuelauto = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_NEEDPOWER"], "",[], 0, false, true, "",""];
};
};
} else {
player removeAction s_player_fuelauto;
s_player_fuelauto = -1;
};

//Fuel Pump on truck
if(_typeOfCursorTarget in DZE_fueltruckarray && alive _cursorTarget) then {
if (s_player_fuelauto2 < 0) then {
// show that fuel truck pump needs power.
if(isEngineOn _cursorTarget) then {
s_player_fuelauto2 = player addAction [localize "STR_EPOCH_ACTIONS_FILLVEH", "\z\addons\dayz_code\actions\fill_nearestVehicle.sqf",_cursorTarget, 0, false, true, "",""];
} else {
s_player_fuelauto2 = player addAction [format["%1",localize "STR_EPOCH_ACTIONS_NEEDPOWER"], "",[], 0, false, true, "",""];
};
};
} else {
player removeAction s_player_fuelauto2;
s_player_fuelauto2 = -1;
};

// inplace upgrade tool
if ((_cursorTarget isKindOf "ModularItems") || (_cursorTarget isKindOf "Land_DZE_WoodDoor_Base") || (_cursorTarget isKindOf "CinderWallDoor_DZ_Base")) then {
if ((s_player_lastTarget select 0) != _cursorTarget) then {
if (s_player_upgrade_build > 0) then {
player removeAction s_player_upgrade_build;
s_player_upgrade_build = -1;
};
};
if (s_player_upgrade_build < 0) then {
// s_player_lastTarget = _cursorTarget;
s_player_lastTarget set [0,_cursorTarget];
s_player_upgrade_build = player addAction [format[localize "STR_EPOCH_ACTIONS_UPGRADE",_text], "Custom\PlotForLifev2\player_upgrade.sqf",_cursorTarget, -1, false, true, "",""];
};
} else {
player removeAction s_player_upgrade_build;
s_player_upgrade_build = -1;
};

// downgrade system
if((_isDestructable || _cursorTarget isKindOf "Land_DZE_WoodDoorLocked_Base" || _cursorTarget isKindOf "CinderWallDoorLocked_DZ_Base") && (DZE_Lock_Door == _characterID)) then {
if ((s_player_lastTarget select 1) != _cursorTarget) then {
if (s_player_downgrade_build > 0) then {
player removeAction s_player_downgrade_build;
s_player_downgrade_build = -1;
};
};

if (s_player_downgrade_build < 0) then {
s_player_lastTarget set [1,_cursorTarget];
s_player_downgrade_build = player addAction [format[localize "STR_EPOCH_ACTIONS_REMLOCK",_text], "Custom\PlotForLifev2\player_buildingDowngrade.sqf",_cursorTarget, -2, false, true, "",""];
};
} else {
player removeAction s_player_downgrade_build;
s_player_downgrade_build = -1;
};

// inplace maintenance tool
if((_cursorTarget isKindOf "ModularItems" || _cursorTarget isKindOf "DZE_Housebase" || _typeOfCursorTarget == "LightPole_DZ") && (damage _cursorTarget >= DZE_DamageBeforeMaint)) then {
if ((s_player_lastTarget select 2) != _cursorTarget) then {
if (s_player_maint_build > 0) then {
player removeAction s_player_maint_build;
s_player_maint_build = -1;
};
};

if (s_player_maint_build < 0) then {
s_player_lastTarget set [2,_cursorTarget];
s_player_maint_build = player addAction [format[localize "STR_EPOCH_ACTIONS_MAINTAIN",_text], "\z\addons\dayz_code\actions\player_buildingMaint.sqf",_cursorTarget, -2, false, true, "",""];
};
} else {
player removeAction s_player_maint_build;
s_player_maint_build = -1;
};


//Start Generator
if(_cursorTarget isKindOf "Generator_DZ") then {
if (s_player_fillgen < 0) then {

// check if not running
if((_cursorTarget getVariable ["GeneratorRunning", false])) then {
s_player_fillgen = player addAction [localize "STR_EPOCH_ACTIONS_GENERATOR1", "\z\addons\dayz_code\actions\stopGenerator.sqf",_cursorTarget, 0, false, true, "",""];
} else {
// check if not filled && player has jerry.
if((_cursorTarget getVariable ["GeneratorFilled", false])) then {
s_player_fillgen = player addAction [localize "STR_EPOCH_ACTIONS_GENERATOR2", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",_cursorTarget, 0, false, true, "",""];
} else {
if("ItemJerrycan" in _magazinesPlayer) then {
s_player_fillgen = player addAction [localize "STR_EPOCH_ACTIONS_GENERATOR3", "\z\addons\dayz_code\actions\fill_startGenerator.sqf",_cursorTarget, 0, false, true, "",""];
};
};
};
};
} else {
player removeAction s_player_fillgen;
s_player_fillgen = -1;
};

//Towing with tow truck
/*
if(_typeOfCursorTarget == "TOW_DZE") then {
if (s_player_towing < 0) then {
if(!(_cursorTarget getVariable ["DZEinTow", false])) then {
s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_ATTACH" "\z\addons\dayz_code\actions\tow_AttachStraps.sqf",_cursorTarget, 0, false, true, "",""];
} else {
s_player_towing = player addAction [localize "STR_EPOCH_ACTIONS_DETACH", "\z\addons\dayz_code\actions\tow_DetachStraps.sqf",_cursorTarget, 0, false, true, "",""];
};
};
} else {
player removeAction s_player_towing;
s_player_towing = -1;
};
*/


//Sleep
if(_isTent && _ownerID == _playerUID) then {
if ((s_player_sleep < 0) && (player distance _cursorTarget < 3)) then {
s_player_sleep = player addAction [localize "str_actions_self_sleep", "\z\addons\dayz_code\actions\player_sleep.sqf",_cursorTarget, 0, false, true, "",""];
};
} else {
player removeAction s_player_sleep;
s_player_sleep = -1;
};

//Repairing Vehicles
if ((dayz_myCursorTarget != _cursorTarget) && _isVehicle && !_isMan && _hasToolbox && (damage _cursorTarget < 1) && !_isDisallowRepair) then {
if (s_player_repair_crtl < 0) then {
dayz_myCursorTarget = _cursorTarget;
_menu = dayz_myCursorTarget addAction [localize "STR_EPOCH_PLAYER_REPAIRV", "\z\addons\dayz_code\actions\repair_vehicle.sqf",_cursorTarget, 0, true, false, "",""];
_menu1 = dayz_myCursorTarget addAction [localize "STR_EPOCH_PLAYER_SALVAGEV", "\z\addons\dayz_code\actions\salvage_vehicle.sqf",_cursorTarget, 0, true, false, "",""];
s_player_repairActions set [count s_player_repairActions,_menu];
s_player_repairActions set [count s_player_repairActions,_menu1];
s_player_repair_crtl = 1;
} else {
{dayz_myCursorTarget removeAction _x} count s_player_repairActions;s_player_repairActions = [];
s_player_repair_crtl = -1;
};
};

// All Traders
if (_isMan && !_isPZombie && _traderType in serverTraders) then {

if (s_player_parts_crtl < 0) then {

// get humanity
_humanity = player getVariable ["humanity",0];
_traderMenu = call compile format["menu_%1;",_traderType];

// diag_log ("TRADER = " + str(_traderMenu));

_low_high = "low";
_humanity_logic = false;
if((_traderMenu select 2) == "friendly") then {
_humanity_logic = (_humanity < -5000);
};
if((_traderMenu select 2) == "hostile") then {
_low_high = "high";
_humanity_logic = (_humanity > -5000);
};
if((_traderMenu select 2) == "hero") then {
_humanity_logic = (_humanity < 5000);
};
if(_humanity_logic) then {
_cancel = player addAction [format[localize "STR_EPOCH_ACTIONS_HUMANITY",_low_high], "\z\addons\dayz_code\actions\trade_cancel.sqf",["na"], 0, true, false, "",""];
s_player_parts set [count s_player_parts,_cancel];
} else {

// Static Menu
{
//diag_log format["DEBUG TRADER: %1", _x];
_buy = player addAction [format["Trade %1 %2 for %3 %4",(_x select 3),(_x select 5),(_x select 2),(_x select 6)], "\z\addons\dayz_code\actions\trade_items_wo_db.sqf",[(_x select 0),(_x select 1),(_x select 2),(_x select 3),(_x select 4),(_x select 5),(_x select 6)], (_x select 7), true, true, "",""];
s_player_parts set [count s_player_parts,_buy];

} count (_traderMenu select 1);
// Database menu
_buy = player addAction [localize "STR_EPOCH_PLAYER_289", "\z\addons\dayz_code\actions\show_dialog.sqf",(_traderMenu select 0), 999, true, false, "",""];
s_player_parts set [count s_player_parts,_buy];

};
s_player_parts_crtl = 1;

};
} else {
{player removeAction _x} count s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;
};


if(dayz_tameDogs) then {

//Dog
if (_isDog && _isAlive && (_hasRawMeat) && _characterID == "0" && player getVariable ["dogID", 0] == 0) then {
if (s_player_tamedog < 0) then {
s_player_tamedog = player addAction [localize "str_actions_tamedog", "\z\addons\dayz_code\actions\tame_dog.sqf", _cursorTarget, 1, false, true, "", ""];
};
} else {
player removeAction s_player_tamedog;
s_player_tamedog = -1;
};
if (_isDog && _characterID == dayz_characterID && _isAlive) then {
_dogHandle = player getVariable ["dogID", 0];
if (s_player_feeddog < 0 && _hasRawMeat) then {
s_player_feeddog = player addAction [localize "str_actions_feeddog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,0], 0, false, true,"",""];
};
if (s_player_waterdog < 0 && "ItemWaterbottle" in _magazinesPlayer) then {
s_player_waterdog = player addAction [localize "str_actions_waterdog","\z\addons\dayz_code\actions\dog\feed.sqf",[_dogHandle,1], 0, false, true,"",""];
};
if (s_player_staydog < 0) then {
_lieDown = _dogHandle getFSMVariable "_actionLieDown";
if (_lieDown) then { _text = "str_actions_liedog"; } else { _text = "str_actions_sitdog"; };
s_player_staydog = player addAction [localize _text,"\z\addons\dayz_code\actions\dog\stay.sqf", _dogHandle, 5, false, true,"",""];
};
if (s_player_trackdog < 0) then {
s_player_trackdog = player addAction [localize "str_actions_trackdog","\z\addons\dayz_code\actions\dog\track.sqf", _dogHandle, 4, false, true,"",""];
};
if (s_player_barkdog < 0) then {
s_player_barkdog = player addAction [localize "str_actions_barkdog","\z\addons\dayz_code\actions\dog\speak.sqf", _cursorTarget, 3, false, true,"",""];
};
if (s_player_warndog < 0) then {
_warn = _dogHandle getFSMVariable "_watchDog";
if (_warn) then { _text = (localize "str_epoch_player_247"); _warn = false; } else { _text = (localize "str_epoch_player_248"); _warn = true; };
s_player_warndog = player addAction [format[localize "str_actions_warndog",_text],"\z\addons\dayz_code\actions\dog\warn.sqf",[_dogHandle, _warn], 2, false, true,"",""];
};
if (s_player_followdog < 0) then {
s_player_followdog = player addAction [localize "str_actions_followdog","\z\addons\dayz_code\actions\dog\follow.sqf",[_dogHandle,true], 6, false, true,"",""];
};
} else {
player removeAction s_player_feeddog;
s_player_feeddog = -1;
player removeAction s_player_waterdog;
s_player_waterdog = -1;
player removeAction s_player_staydog;
s_player_staydog = -1;
player removeAction s_player_trackdog;
s_player_trackdog = -1;
player removeAction s_player_barkdog;
s_player_barkdog = -1;
player removeAction s_player_warndog;
s_player_warndog = -1;
player removeAction s_player_followdog;
s_player_followdog = -1;
};
};

} else {
//Engineering
player removeAction s_player_plotManagement;
s_player_plotManagement = -1;

{dayz_myCursorTarget removeAction _x} count s_player_repairActions;s_player_repairActions = [];
s_player_repair_crtl = -1;

{player removeAction _x} count s_player_combi;s_player_combi = [];

dayz_myCursorTarget = objNull;
s_player_lastTarget = [objNull,objNull,objNull,objNull,objNull];

{player removeAction _x} count s_player_parts;s_player_parts = [];
s_player_parts_crtl = -1;

{player removeAction _x} count s_player_lockunlock;s_player_lockunlock = [];
s_player_lockUnlock_crtl = -1;

player removeAction s_player_checkGear;
s_player_checkGear = -1;

player removeAction s_player_SurrenderedGear;
s_player_SurrenderedGear = -1;

//Others
player removeAction s_player_forceSave;
s_player_forceSave = -1;
player removeAction s_player_flipveh;
s_player_flipveh = -1;
player removeAction s_player_sleep;
s_player_sleep = -1;
player removeAction s_player_deleteBuild;
s_player_deleteBuild = -1;
player removeAction s_player_butcher;
s_player_butcher = -1;
player removeAction s_player_cook;
s_player_cook = -1;
player removeAction s_player_boil;
s_player_boil = -1;
player removeAction s_player_fireout;
s_player_fireout = -1;
player removeAction s_player_packtent;
s_player_packtent = -1;
player removeAction s_player_fillfuel;
s_player_fillfuel = -1;
player removeAction s_player_studybody;
s_player_studybody = -1;
//remove clothes
player removeAction s_clothes;
s_clothes = -1;
//Dog
player removeAction s_player_tamedog;
s_player_tamedog = -1;
player removeAction s_player_feeddog;
s_player_feeddog = -1;
player removeAction s_player_waterdog;
s_player_waterdog = -1;
player removeAction s_player_staydog;
s_player_staydog = -1;
player removeAction s_player_trackdog;
s_player_trackdog = -1;
player removeAction s_player_barkdog;
s_player_barkdog = -1;
player removeAction s_player_warndog;
s_player_warndog = -1;
player removeAction s_player_followdog;
s_player_followdog = -1;
player removeAction s_player_manageDoor;
s_player_manageDoor = -1; // u might also want to add this to variables reset in your variables.sqf
// vault
player removeAction s_player_unlockvault;
s_player_unlockvault = -1;
player removeAction s_player_packvault;
s_player_packvault = -1;
player removeAction s_player_lockvault;
s_player_lockvault = -1;

player removeAction s_player_information;
s_player_information = -1;
player removeAction s_player_fillgen;
s_player_fillgen = -1;
player removeAction s_player_upgrade_build;
s_player_upgrade_build = -1;
player removeAction s_player_maint_build;
s_player_maint_build = -1;
player removeAction s_player_downgrade_build;
s_player_downgrade_build = -1;
player removeAction s_player_towing;
s_player_towing = -1;
player removeAction s_player_fuelauto;
s_player_fuelauto = -1;
player removeAction s_player_fuelauto2;
s_player_fuelauto2 = -1;
player removeAction s_givemoney_dialog;
s_givemoney_dialog = -1;
player removeAction s_bank_dialog;
s_bank_dialog = -1;
player removeAction s_bank_dialog2;
s_bank_dialog2 = -1;
};



//Dog actions on player self
_dogHandle = player getVariable ["dogID", 0];
if (_dogHandle > 0) then {
_dog = _dogHandle getFSMVariable "_dog";
_characterID = "0";
if (!isNull cursorTarget) then { _characterID = cursorTarget getVariable ["CharacterID","0"]; };
if (_canDo && !_inVehicle && alive _dog && _characterID != dayz_characterID) then {
if (s_player_movedog < 0) then {
s_player_movedog = player addAction [localize "str_actions_movedog", "\z\addons\dayz_code\actions\dog\move.sqf", player getVariable ["dogID", 0], 1, false, true, "", ""];
};
if (s_player_speeddog < 0) then {
_text = (localize "str_epoch_player_249");
_speed = 0;
if (_dog getVariable ["currentSpeed",1] == 0) then { _speed = 1; _text = (localize "str_epoch_player_250"); };
s_player_speeddog = player addAction [format[localize "str_actions_speeddog", _text], "\z\addons\dayz_code\actions\dog\speed.sqf",[player getVariable ["dogID", 0],_speed], 0, false, true, "", ""];
};
if (s_player_calldog < 0) then {
s_player_calldog = player addAction [localize "str_actions_calldog", "\z\addons\dayz_code\actions\dog\follow.sqf", [player getVariable ["dogID", 0], true], 2, false, true, "", ""];
};
};
} else {
player removeAction s_player_movedog;
s_player_movedog = -1;
player removeAction s_player_speeddog;
s_player_speeddog = -1;
player removeAction s_player_calldog;
s_player_calldog = -1;
};



 
Link to comment
Share on other sites

Ok, so after many many hours of testing and bugging other server owners i've finally found a fix for the glitch so i can now let everyone know how it is done and how to prevent it.

 

To perform the glitch (Using Safe as example) requires 2 people.

Unlock the safe

Have a second player stand by with the 'Money Storage' option highlighted ready to click.

Lock the safe

As the person locking the safe bends down to perform the action, have the second player open the 'Money Storage' and keep the dialog open.

Allow the safe to lock and ask the person locking to move away. (To confirm the locking is complete)

Then ask the player with the Bank dialog open to enter any number and click 'Withdraw'

The player will then be given the amount they entered.

 

The reason this works is because of the following function in the ZSCinit.sqf:

 

This function performs 1 vital check before giving you any money. It checks to see if the amount of coins entered into the dialog is less than 0 OR more than the amount of money in the object.

However _bank is the bank value of the UNLOCKED safe. So when the safe becomes LOCKED _bank effectively becomes null. And you can't have a number greater than null (Apparently) 

 

So when you type in a number, it doesnt have a _bank value to check against so it allows you to withdraw any amount of money.

 

The way i have fixed this is quite simple (Even though it took me over 8 hours to figure it out -.-)

 

Simply replace the entire function with the following:

 

 

All i have done is added an if statement to check to see if the object still exists before checking the withdraw amount, If the object is no longer there (has been locked) it exits with an error message. I've tested this on my server and i can't see any issues. The withdraw function works fine with normal use of locked storage, and if i try to perform the glitch it throws an error message at me instead of giving me infinite coins. 

 

If anyone could please check this for me, it would be much appreciated. I'm not the best at script writing and i may have overlooked something crucial. But this fix has worked for my particular glitch.

Slinky, what about when someone locks a vehicle and another player still has the menu up? I've tested this and it still allows that other player whether its a friendly or enemy to withdraw from there vehicle storage. It doesn't actually dupe like the safes were allowing but still allows them to withdraw from vehicle even though it was locked..

Link to comment
Share on other sites

I am having trouble installing this.  I went though the install guide.  A few files I had already added stuff to so I used diffmerge to merge the two together.  I logged into the server, I got stuck on the load screen on "Waiting for server to start authentication"  It did not go past that.  I exited the game and retried.  I got a popup saying "Resource title ZSC_Money_Display not found".  I clicked ok and let the server load some more.  I ended up getting past the authentication part this time, but I timed out it would not load into the server.

 

I checked the error RPT

 

This message show up

 

16:35:35 Warning Message: Script z\addons\system\server_monitor.sqf not found   I checked the server.pbo and that .sqf is in there.

 

16:37:43 "ERROR: Cannot Sync Character Mikes as no characterID"

16:34:29 Server error: Player without identity Mikes (id 799210389)   Mikes is me so I don't know if ZSC is causing this or something else.

 

I am pretty sure this has to do with ZSC.  It talks about the line 75 from server_updateobject, this is my line 75               _inventory = [     That is all that's on 75 for me.

[/spoiler]

16:34:58 Error in expression <ous","_key"];
_inventory = [
_inventory = [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error position: <= [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error Missing ]
16:34:58 File z\addons\dayz_server\compile\server_updateObject.sqf, line 75
16:34:58 Error in expression <ous","_key"];
_inventory = [
_inventory = [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error position: <= [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error Missing ]
16:34:58 File z\addons\dayz_server\compile\server_updateObject.sqf, line 75

/spoiler]

Any help or ideas would be great.  Thanks

Link to comment
Share on other sites

I am having trouble installing this.  I went though the install guide.  A few files I had already added stuff to so I used diffmerge to merge the two together.  I logged into the server, I got stuck on the load screen on "Waiting for server to start authentication"  It did not go past that.  I exited the game and retried.  I got a popup saying "Resource title ZSC_Money_Display not found".  I clicked ok and let the server load some more.  I ended up getting past the authentication part this time, but I timed out it would not load into the server.

 

I checked the error RPT

 

This message show up

 

16:35:35 Warning Message: Script z\addons\system\server_monitor.sqf not found   I checked the server.pbo and that .sqf is in there.

 

16:37:43 "ERROR: Cannot Sync Character Mikes as no characterID"

16:34:29 Server error: Player without identity Mikes (id 799210389)   Mikes is me so I don't know if ZSC is causing this or something else.

 

I am pretty sure this has to do with ZSC.  It talks about the line 75 from server_updateobject, this is my line 75               _inventory = [     That is all that's on 75 for me.

[/spoiler]

16:34:58 Error in expression <ous","_key"];
_inventory = [
_inventory = [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error position: <= [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error Missing ]
16:34:58 File z\addons\dayz_server\compile\server_updateObject.sqf, line 75
16:34:58 Error in expression <ous","_key"];
_inventory = [
_inventory = [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error position: <= [
getWeaponCargo _object,
getMagazineC>
16:34:58   Error Missing ]
16:34:58 File z\addons\dayz_server\compile\server_updateObject.sqf, line 75

/spoiler]

Any help or ideas would be great.  Thanks

 

Post your entire server_updateObject.sqf .

Link to comment
Share on other sites

Single Currency 3.0 & Storage DEFAULT HIVE ( No global banking).

 

AKA: ZSC 

 

 

RELEASE 1: INDEPENDENT RELEASE ( No converting script yet to convert old SC money to this version).

 

 

Hi Zupa! Might you be able to please point me in the right direction where everything is working fine except coins disappear from storage devices upon restart?

 

Much thanks and luv :D

Link to comment
Share on other sites

I have some odd issue with the site where I can't see the body of text nor click Full Editor or anything when I click Edit so sorry for the additional post.

 

Got it sorted, it was server_monitor needing some attention to merge detail XD

 

Which mod was the conflict? my situation is likely similar? 

Link to comment
Share on other sites

Which mod was the conflict? my situation is likely similar? 

 

Just look at the files included in the release and compare them to your existing ones to see what you're missing. There's this awesome tool called DiffMerge that makes it pretty obvious :D

Link to comment
Share on other sites

Still getting a lot of the same error, when people are selling items I think:

Error in expression <LAIN DOWN"];
};

_item = TraderItemList select _index;
_data = [_item select 6, >
  Error position: <select _index;
_data = [_item select 6, >
  Error Zero divisor
File mpmissions\__CUR_MP.chernarus\ZSC\gold\player_traderMenu.sqf, line 214

Which is this piece of code here:

TraderDialogSell = {
	private ["_index", "_item", "_data"];
	_index = _this select 0;
	if (_index < 0) exitWith {
		cutText [(localize "str_epoch_player_6"), "PLAIN DOWN"];
	};

	_item = TraderItemList select _index;
	_data = [_item select 6, _item select 0, _item select 5, 1, "sell", _item select 1, _item select 7, _item select 8];
	[0, player, '', _data] execVM (_item select 9);

	TraderItemList = [];
};

Not sure where that error originates, as I don't see any division occurring here. Very nice otherwise :)

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...