Jump to content

[RESOURCE] A collection of Anti-Dupes


Shawn

Recommended Posts

Block ESC Menu if gear was just/is accessed + Black screen if gear is accessed and fps is dropped

For this method, all credit goes to JustBullet!

What it does: Blocks the escape menu for 30 seconds after opening your inventory, but also displays a black screen if a player enters his inventory, and reduces his/her fps to less than or equal to 4. 

Start by opening up dayz_spaceInterrupt.sqf and find this:

// esc
if (_dikCode == 0x01) then {
    DZE_cancelBuilding = true;
    call dayz_EjectPlayer;
};

Above it, add the following:

/* Anti-Duping by JustBullet */
if (_dikCode in actionKeys "Gear") then {
    _nill = execvm "path\to\esc-dupe.sqf";
};

Then create an sqf file in the desired location called esc-dupe.sqf, and inside, add:

/////////////////////////////////////////////////////
//////////////* Author by JustBullet *///////////////
///////////* BLOCK ESC MENU ver. 1.0.3 */////////////
/////////////////////////////////////////////////////

if (isNil "JustBlock") then {
    private ["_timer","_fps"];
    JustBlock = true;
    disableSerialization;
    waituntil{!isnull (finddisplay 46)};
    _timer = 30;
    _trigger = false;
    while {_timer > 0} do {
        _timer = _timer - 0.1;
        if !(isnull (finddisplay 49)) then {
            findDisplay 106 closeDisplay 1;
            finddisplay 49 closeDisplay 2;
            _fps = round(diag_fps);

            switch true do {
                case (!(_trigger) && (_fps <= 4)): {_trigger = true; disableUserInput true;};
                case ((_trigger) && (_fps > 4)): {endLoadingScreen; _trigger = false; disableUserInput false;};
            };

            if (_trigger) then {startLoadingScreen ["Very low FPS, you are blocked...", "DayZ_loadingScreen"];}
            else {systemchat format["Cannot exit game 30 seconds after accessing your inventory.", round(_timer)];};
        };
        uiSleep 0.1;
    };
    if (_trigger) then {endLoadingScreen; disableUserInput false;};
    JustBlock = nil;
};

*******************************************

Block duping via skin change

The goal of this method is to create a blacked screen for a player when he changes clothes. Of course, this won't be noticed, but those that decrease their fps, they are blacked out, and messaged with: "Anti Dupe: Changing clothes".

Open up player_switchModel.sqf and paste the following at the very top:

disableUserInput true;
startLoadingScreen ["Anti Dupe: Changing clothes", "DayZ_loadingScreen"];

And at the very bottom, paste the following:

endLoadingScreen;
disableUserInput false;

The disableUserInput is included to prevent those that have memorized the required spots to click to dupe with.

*******************************************

Prevent skin change if backpack is worn

The following addition is to block skin changing when a backpack is worn.

Find your player_wearClothes.sqf, and replace:

if (!isNull (unitBackpack player)) exitWith { DZE_ActionInProgress = false; cutText [(localize "STR_EPOCH_ACTIONS_9"), "PLAIN DOWN"] };

With the following:

if (!isNull (unitBackpack player)) exitWith { DZE_ActionInProgress = false; cutText [("Please drop your backpack to change clothing"), "PLAIN DOWN"] };

*******************************************

Prevent packing of safe with player/zombie nearby

What this does is prevents a player from packing a safe if a player or zombie is within 15 meters.

Simply open up player_packVault.sqf and find:

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_15") , "PLAIN DOWN"]; };

Right after this, paste the following:

_countplayers = count nearestObjects [player, ["CAManBase"], 15];
if (_countplayers > 1) exitWith { cutText [format["Cannot perform this action if a player or zombie is within 15 metres!"], "PLAIN DOWN"]; };

*******************************************

Check wallet dupe

What this does is, instead of checking the wallet of an ai/player when their coins are at "0", which would cause your _cashMoney becoming scalar, it instead exits with a pleasant message :)

In fn_selfAction.sqf, find this:

if (_isMan && !_isZombie && !_isAnimal) then {
			_player_studybody = true;
		}

And replace that block of code with:

if (_isMan && !_isZombie && !_isAnimal && _ownerID != "0") then {
			_player_studybody = true;
		}

IMPORTANT! If you are using plot for life, change this:

_ownerID != "0"

to this:

_characterID != "0"

And replace your check_wallet.sqf with:

private ["_body", "_hisMoney", "_myMoney", "_killsH", "_test2", "_headShots", "_test","_playeridke","_humanity"];

_body = _this select 3;

_hisMoney = _body getVariable ["cashMoney",0];
if(_hisMoney < 1) exitWith {
		cutText ["This is one poor MOTHERFUCKER!", "PLAIN DOWN"];
    };
_PlayerNear = _body call dze_isnearest_player;
if (_PlayerNear) exitWith {cutText [localize "str_pickup_limit_4", "PLAIN DOWN"]};

_name = _body getVariable ["bodyName","unknown"];
_hisMoney = _body getVariable ["cashMoney",0];
_myMoney = player getVariable ["cashMoney",0];
_myMoney = _myMoney + _hisMoney;
_body setVariable ["cashMoney", 0 , true];

player setVariable ["cashMoney", _myMoney , true];

systemChat format ['You took %1 coins, ID says %2 !',_hisMoney,_name];
sleep 2;

_cid =	player getVariable ["CharacterID","0"];
_cashMoney = player getVariable ["cashMoney",0];

if(_cashMoney > 0) then{

} else {

_cashMoney = 0;

};	

*******************************************

Give Money dupe fix

First, find your bank_dialog.sqf, and replace everything in there with:

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_10") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

private ["_dialog"];
_dialog = createdialog "BankDialog";
call BankDialogUpdateAmounts;
player setVariable ["tradingmoney", true, true];

DZE_ActionInProgress = false;

waitUntil {uiSleep 1; !dialog};
player setVariable ["tradingmoney", false, true];

Then go to your init.sqf for your coin system, and find:

GivePlayerAmount = {
private ["_amount","_target","_wealth"];
_amount = parseNumber (_this select 0);
_target = cursorTarget;
_wealth = player getVariable["cashMoney",0];
_twealth = _target getVariable["cashMoney",0];
_InTrd = _target getVariable ["TrBsy",false];
_isMan = _target isKindOf "Man";
if (_amount < 1 or _amount > _wealth) exitWith {
cutText ["You can not give more than you currently have.", "PLAIN DOWN"];
};

if (!_isMan) exitWith {
cutText ["You are not facing anyone.", "PLAIN DOWN"];
};
if (_wealth == _twealth) exitWith {
cutText ["FAILED : Both Targets have same amount of money.", "PLAIN DOWN"];
};
if (_InTrd) exitWith {
        cutText ["Other Player is busy, please wait.", "PLAIN DOWN"];
    };

Replace it with:

GivePlayerAmount = {
	private ["_amount","_target","_wealth"];
	_amount = parseNumber (_this select 0);
	_target = cursorTarget;
	_wealth = player getVariable["cashMoney",0];
	_twealth = _target getVariable["cashMoney",0];
	_isMan = _target isKindOf "Man";
	
	if (_target getVariable ["tradingmoney", false]) exitWith {
		cutText ["You can not give to someone who is already trading.", "PLAIN DOWN"];
	};
	if (_amount < 1 or _amount > _wealth) exitWith {
		cutText ["You can not give more than you currently have.", "PLAIN DOWN"];
	};
	if (!_isMan) exitWith {
		cutText ["You are not looking correctly at a player", "PLAIN DOWN"];
	};

Finally, replace your give_player_dialog.sqf with:

private ["_dialog"];
GivePlayerTarget = _this select 3;

if (GivePlayerTarget getVariable ["tradingmoney", false]) exitWith {
	cutText ["You can not give to someone who is already trading.", "PLAIN DOWN"];
};

_dialog = createdialog "GivePlayerDialog";
call GivePlayerDialogAmounts;
player setVariable ["tradingmoney", true, true];
[] spawn {
	while {dialog} do {
		if (GivePlayerTarget getVariable ["tradingmoney", false]) exitWith {
			closeDialog 0;
		};
		uiSleep 0.25;
	};
};
waitUntil {uiSleep 1; !dialog};
player setVariable ["tradingmoney", false, true];

*******************************************

An important tip I recommend to anyone is, prevent any form of "punishment" which kicks players to the lobby, such as speaking in side chat, x amount of wrong codes for guessing a door code. These can all be easily used for duping. The well known anti hack which I won't name has a lot of kicks to lobby which can be triggered by players. This involves typing anything in chat from the _veryBadTexts array. As a result, the notorious backpack dupe can be achieved. As I mentioned, simply fix this issue by adding:   

player setDamage 5;

Along with a message as to why they were killed:

systemChat 'You were killed to prevent hacking and duping!';

To the block of code that executes the kick.

I won't state every single block that requires this added, as there are quite a lot, but it is very simple once you know what to look for.

*******************************************

If anyone has more ways of preventing duping, please feel free of commenting the fixes below. I can test it out and happily add it to the collection.

Please remember that all credit goes to the rightful creators of the scripts.

Thanks.

Link to comment
Share on other sites

I'd be interested in finding a fix for a dupe that I witness all of the time. It's very similar to this

 

but instead of players duping coins with each other, they're able to do it at the banker. They deposit the exact same amount of money they have on their person, and instead of getting rid of the coins it just adds that amount to the bank, so they then have double. They repeat the process and very quickly have max coins.  It seems that they need a vehicle nearby for some reason.

Link to comment
Share on other sites

You can fix this by not allowing a player to deposit when another player is near . But it can also promote trolling . 

9 hours ago, DangerRuss said:

I'd be interested in finding a fix for a dupe that I witness all of the time. It's very similar to this

 

but instead of players duping coins with each other, they're able to do it at the banker. They deposit the exact same amount of money they have on their person, and instead of getting rid of the coins it just adds that amount to the bank, so they then have double. They repeat the process and very quickly have max coins.  It seems that they need a vehicle nearby for some reason.

 

Link to comment
Share on other sites

Do you mind pm'ing me or OP and explain how they're doing this? I have only seen it through spectating but Im not actually sure how they're doing. The only thing I see is that they are able to deposit money without losing money, and then withdraw that money which effectively doubles their current money. Then they repeat.

On 4/18/2016 at 4:08 AM, creativv said:

You can fix this by not allowing a player to deposit when another player is near . But it can also promote trolling . 

 

 

Link to comment
Share on other sites

10 hours ago, DangerRuss said:

Do you mind pm'ing me or OP and explain how they're doing this? I have only seen it through spectating but Im not actually sure how they're doing. The only thing I see is that they are able to deposit money without losing money, and then withdraw that money which effectively doubles their current money. Then they repeat.

 

Is it Always in pairs or also players alone sometimes ?

Link to comment
Share on other sites

  • 3 weeks later...
17 minutes ago, Shawn said:

I don't recommend preventing people from banking if there is another players nearby. Just asking for griefing. 

 

Im with you on this point, but no one has suggested or offered a better alternative to prevent this type of duping. I posted it in this thread hoping someone would have something or come up with something because this is beyond my ability to fix. But so far its basically the easiest, nastiest dupe method I've seen, just doubling your coins every 5 seconds, max money in no time for really any number of players doing it.

Link to comment
Share on other sites

Alright, with these changes, it prevents someone from giving coins to another person if they are already trading, whether it be to a banker, or another player. This is a much better, cleaner fix than to the other option. I have tested it, and it works.

First, find your bank_dialog.sqf, and replace everything in there with:

if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_10") , "PLAIN DOWN"]; };
DZE_ActionInProgress = true;

private ["_dialog"];
_dialog = createdialog "BankDialog";
call BankDialogUpdateAmounts;
player setVariable ["tradingmoney", true, true];

DZE_ActionInProgress = false;

waitUntil {uiSleep 1; !dialog};
player setVariable ["tradingmoney", false, true];

Then go to your init.sqf for your coin system, and find:

GivePlayerAmount = {
private ["_amount","_target","_wealth"];
_amount = parseNumber (_this select 0);
_target = cursorTarget;
_wealth = player getVariable["cashMoney",0];
_twealth = _target getVariable["cashMoney",0];
_InTrd = _target getVariable ["TrBsy",false];
_isMan = _target isKindOf "Man";
if (_amount < 1 or _amount > _wealth) exitWith {
cutText ["You can not give more than you currently have.", "PLAIN DOWN"];
};

if (!_isMan) exitWith {
cutText ["You are not facing anyone.", "PLAIN DOWN"];
};
if (_wealth == _twealth) exitWith {
cutText ["FAILED : Both Targets have same amount of money.", "PLAIN DOWN"];
};
if (_InTrd) exitWith {
        cutText ["Other Player is busy, please wait.", "PLAIN DOWN"];
    };

Replace it with:

GivePlayerAmount = {
	private ["_amount","_target","_wealth"];
	_amount = parseNumber (_this select 0);
	_target = cursorTarget;
	_wealth = player getVariable["cashMoney",0];
	_twealth = _target getVariable["cashMoney",0];
	_isMan = _target isKindOf "Man";
	
	if (_target getVariable ["tradingmoney", false]) exitWith {
		cutText ["You can not give to someone who is already trading.", "PLAIN DOWN"];
	};
	if (_amount < 1 or _amount > _wealth) exitWith {
		cutText ["You can not give more than you currently have.", "PLAIN DOWN"];
	};
	if (!_isMan) exitWith {
		cutText ["You are not looking correctly at a player", "PLAIN DOWN"];
	};
	if (_InTrd == 1) exitWith {
        cutText ["Other Player is busy, please wait.", "PLAIN DOWN"];
    };

Finally, replace your give_player_dialog.sqf with:

private ["_dialog"];
GivePlayerTarget = _this select 3;

if (GivePlayerTarget getVariable ["tradingmoney", false]) exitWith {
	cutText ["You can not give to someone who is already trading.", "PLAIN DOWN"];
};

_dialog = createdialog "GivePlayerDialog";
call GivePlayerDialogAmounts;
player setVariable ["tradingmoney", true, true];
[] spawn {
	while {dialog} do {
		if (GivePlayerTarget getVariable ["tradingmoney", false]) exitWith {
			closeDialog 0;
		};
		uiSleep 0.25;
	};
};
waitUntil {uiSleep 1; !dialog};
player setVariable ["tradingmoney", false, true];

This should fix the issue you mentioned :)

Link to comment
Share on other sites

Allrighty then , you talk about cleaner code you forgot to remove your old code wich is not being used anymore ...

 

 "  if (_InTrd == 1) exitWith { cutText ["Other Player is busy, please wait.", "PLAIN DOWN"]; };  "

Other then that we never have anyone griefing players with banks on a full 50 slot server so.....

It works just fine but your way works nice to mate :)

Link to comment
Share on other sites

  • 1 month later...
On 4/17/2016 at 9:05 AM, Shawn said:

Prevent packing of safe with player/zombie nearby

What this does is prevents a player from packing a safe if a player or zombie is within 15 meters.

Simply open up player_packVault.sqf and find:


if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_15") , "PLAIN DOWN"]; };

Right after this, paste the following:


_countplayers = count nearestObjects [player, ["CAManBase"], 15];
if (_countplayers > 1) exitWith { cutText [format["Cannot perform this action if a player or zombie is within 15 metres!"], "PLAIN DOWN"]; };

This is my old code and the fix should not be here... Causes a big bug and the player has to relog to remove it and the real fix is done like this....

 

FIRST remove that code from the player_packVault.sqf

Go to your fn_selfActions.sqf and find ..

        if (s_player_packvault < 0 && (_ownerID == dayz_combination || _ownerID == dayz_playerUID)) then {
            s_player_packvault = player addAction [format["<t color='#ff0000'>%1</t>",(format[localize "STR_EPOCH_ACTIONS_PACK",_text])], "\z\addons\dayz_code\actions\vault_pack.sqf",_cursorTarget, 0, false, true, "",""];
        };

CHANGE TO

		if (s_player_packvault < 0 && (_ownerID == dayz_combination || _ownerID == dayz_playerUID)) then {
			s_player_packvault = player addAction [format["<t color='#ff0000'>%1</t>",(format[localize "STR_EPOCH_ACTIONS_PACK",_text])], "PATH\TO\vault_pack.sqf",_cursorTarget, 0, false, true, "",""];
		};

NOTE the  "PATH\TO\vault_pack.sqf"  change to your path to  vault_pack.sqf

Make a new file called   vault_pack.sqf  place it where ever your path was set above

Place this code inside it

private ["_obj","_countplayers"];
_countplayers = count nearestObjects [player, ["CAManBase"], 15];
if (_countplayers > 1) exitWith{systemchat "You cant dismantle your safe if a player or a zombie is within 15 meters.";};
_obj = _this select 3;
_obj spawn player_packVault

 

PROBLEM SOLVED

Link to comment
Share on other sites

On 4/17/2016 at 9:05 AM, Shawn said:

 


 

*******************************************

An important tip I recommend to anyone is, prevent any form of "punishment" which kicks players to the lobby, such as speaking in side chat, x amount of wrong codes for guessing a door code. These can all be easily used for duping. The well known anti hack which I won't name has a lot of kicks to lobby which can be triggered by players. This involves typing anything in chat from the _veryBadTexts array. As a result, the notorious backpack dupe can be achieved. As I mentioned, simply fix this issue by adding:   


player setDamage 5;

Along with a message as to why they were killed:


systemChat 'You were killed to prevent hacking and duping!';

To the block of code that executes the kick.

I won't state every single block that requires this added, as there are quite a lot, but it is very simple once you know what to look for.

*******************************************

If anyone has more ways of preventing duping, please feel free of commenting the fixes below. I can test it out and happily add it to the collection.

Please remember that all credit goes to the rightful creators of the scripts.

Thanks.

Should not use   player setDamage 5;

Use this instead..

[player,'sick'] spawn player_death;
player setHit['Body',1];

 

Link to comment
Share on other sites

 

Here's one for you.. Fixes several players using advanced trader to sell stuff from the same vehicle at the same time... How it works..

Player A and Player B have a vehicle with x50 briefcases. Player A gets in driver seat of vehicle then jumps out and goes to the trader clicks sell from vehicle. Puts all 50 briefs in the sell box to the right and WAITS now..

Player B gets in driver seat of the same vehicle then jumps out and goes to the trader click sell from vehicle. Puts all 50 briefs in the sell box to the right and WAITS now..

Now both players have 50 briefs from the same vehicle ready to sell because the check for if you was the last in the driver seat is done when you click sell from vehicle in advanced trader.. Now they both count down 3,2,1 and click sell at the same time.. Both of them will get the money for said items. BIG PROBLEM and this can be done with unlimited players..

 

To fix this do the following....

Open up  z_at_getVehicleItems.sqf

FIND

_vehicle = objNull;

ADD BELOW IT

truevic = false;

FIND

_vehicle = _x;

ADD BELOW IT

truevic = true;

FIND

[_normalWeaps,_normalMags, typeOf _vehicle] call Z_checkArrayInConfig;

ADD BELOW IT

truevic = true;

FIND

_ctrltext = format["Get in driver seat first!"];

ADD ABOVE IT

truevic = false;

 

Now open up  z_at_sellItems.sqf

FIND

_tempArray = Z_SellArray;

ADD BELOW IT

truevic = true;

FIND

    if(Z_SellingFrom == 1)then{
        _outcome = [Z_vehicle,_itemsArray,_weaponsArray,_bpArray] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
    };

REPLACE WITH

    if(Z_SellingFrom == 1)then{
       call Z_getVehicleItems;
       _outcome = [Z_vehicle,_itemsArray,_weaponsArray,_bpArray] call ZUPA_fnc_removeWeaponsAndMagazinesCargo;
    };

FIND

		if (Z_SingleCurrency) then {
				_success = [player,_money] call SC_fnc_addCoins;
				systemChat format["Trade successfull, received %1 %2", _money , CurrencyName];
		} else {
				_success = [_money, 0] call Z_returnChange;
				systemChat format["Trade successfull."];
		};

REPLACE WITH

		if (Z_SingleCurrency && truevic) then {
				_success = [player,_money] call SC_fnc_addCoins;
				systemChat format["Trade successfull, received %1 %2", _money , CurrencyName];
		} else {
				systemChat "Someone got in your vehicle. You must Get in the driver seat again!";
		};

 

NOTE: This fix only works IF you are using Single currency coins ONLY as the } else { statement would give gold bars or briefs for sold items if Z_SingleCurrency is not found or set to false..

Also need these setting set in your config.sqf inside the advancedTrading folder.

Z_SingleCurrency = true;
Z_AllowTakingMoneyFromBackpack = false;
Z_AllowTakingMoneyFromVehicle = false;

If need be I could alter this so it also works with briefs/goldbars.. Let me know if you guys want it done..

PROBLEM SOLVED.. NOW it also checks again when the SELL button is clicked and only the last person in the vehicle will get the money and everyone else will get the message "Someone got in your vehicle. You must Get in the driver seat again!"

Link to comment
Share on other sites

Another quick one is... using advanced trader while someone has a give money trade dialog open with you.. This one goes right with and requires Gr8's fix for giving money to another player at the same time.

Player A has advanced trader open and has something ready to buy. Player B has a trade money dialog open on player A and when player A clicks BUY, player B gives him money at the same time. The actions are done at the same time so the money is never taken from player A and he gets the item also.

 

To fix this just open up   init.sqf  inside your advancedTrading folder...

FIND

createDialog "AdvancedTrading";

ADD ABOVE IT

player setVariable["tradingmoney",true,true];

 Now open up your   advancedTrading.hpp

FIND

        class ZSC_RscButtonMenu_AT28: AT_Zupa_BlueButton
        {
            idc = -1;
            x = 0.63 * safezoneW + safezoneX;
            y = 0.77 * safezoneH + safezoneY;
            w = 0.13 * safezoneW;
            onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);";
            colorBackground[] =  {1,1,1,1};
            color[] = {0,0,0,1};
            text = "Close";
        };

REPLACE WITH

        class ZSC_RscButtonMenu_AT28: AT_Zupa_BlueButton {
            idc = -1;
            x = 0.63 * safezoneW + safezoneX;
            y = 0.77 * safezoneH + safezoneY;
            w = 0.13 * safezoneW;
            onButtonClick = "((ctrlParent (_this select 0)) closeDisplay 9000);player setVariable [""tradingmoney"",false,true];";
            colorBackground[] = {1,1,1,1};
            color[] = {0,0,0,1};
            text = "Close";
        };

 Also just to be safe.. if the player does not use the close button in advanced trader to close it and uses ESC like 99% of them do out of habit..

OPEN dayz_spaceInterrupt.sqf

FIND

// esc
if (_dikCode == 0x01) then {
    DZE_cancelBuilding = true;
    call dayz_EjectPlayer;
};

REPLACE WITH

if (_dikCode == 0x01) then {
    DZE_cancelBuilding = true;
    call dayz_EjectPlayer;
    if (player getVariable ["tradingmoney", true]) then {
        player setVariable ["tradingmoney",false,true];
    };
};

 

PROBLEM solved...

Link to comment
Share on other sites

  • 3 weeks later...
  • 4 weeks later...

try something like this in your fn_selfactions.. this use a check for nearest player to not allow the storage....

if(_typeOfCursorTarget in ZSC_MoneyStorage && (player distance _cursorTarget < 5)) then {

_playernearby = count nearestentities [player, ["CaManBase"], 15];                                                                         
                                                                                  
if ((_playernearby) > 1) exitWith {
cutText [format["Players around Dupe prevention"], "PLAIN DOWN"];
}else{
		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;
	};	

 

Link to comment
Share on other sites

  • 2 weeks later...
On 11/15/2016 at 8:44 AM, juandayz said:

try something like this in your fn_selfactions.. this use a check for nearest player to not allow the storage....


if(_typeOfCursorTarget in ZSC_MoneyStorage && (player distance _cursorTarget < 5)) then {

_playernearby = count nearestentities [player, ["CaManBase"], 15];                                                                         
                                                                                  
if ((_playernearby) > 1) exitWith {
cutText [format["Players around Dupe prevention"], "PLAIN DOWN"];
}else{
		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;
	};	

 

Thank you for all your support! You've been a huge help on your posts.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Advertisement
  • Discord

×
×
  • Create New...