Jump to content

Combolock Brute Force Fix


Snowmobil

Recommended Posts

fixed.... just needed 

 

disableSerialization;

 

at the top.

 

 

 where do i add this.. i added mine right to the top like this.. but still get the error.. sorry for being a nub

disableSerialization;
if (!isDedicated) then {
	player_unlockDoor = {
		private ["_ok"];
		if (!isNull dayz_selectedDoor) then
		{
			_obj = dayz_selectedDoor;
			_objectCharacterID 	= _obj getVariable ["CharacterID","0"];
			if (DZE_Lock_Door == _objectCharacterID) then
			{
				[player,"combo_unlock",0,false] call dayz_zombieSpeak;
				_display = findDisplay 41144;
				_display closeDisplay 3000;
				if(_obj animationPhase "Open_hinge" == 0) then
				{
					_obj animate ["Open_hinge", 1];
				};
				if(_obj animationPhase "Open_latch" == 0) then
				{
					_obj animate ["Open_latch", 1];
				};
			}
			else
			{
				DZE_Lock_Door = "";
				[player,"combo_locked",0,false] call dayz_zombieSpeak;
				_display = findDisplay 41144;
				_display closeDisplay 3000;
				
				cutText ["WRONG CODE ENTERED - WAIT 30 SECONDS", "PLAIN DOWN"];
				if (isNil 'KeyCodeTry') then {KeyCodeTry = true;};
				[] spawn {sleep 30;KeyCodeTry = nil;};
				[] spawn {
					while {KeyCodeTry} do
					{
						_display = findDisplay 41144;
						_display closeDisplay 3000;
						sleep 0.1;
					};
				};
			};
		}
		else
		{
			_display = findDisplay 41144;
			_display closeDisplay 3000;
		};
	};
}; 
Link to comment
Share on other sites

here is my combo timer script. its a hodge podge of a bunch of different scripts all mixed into 1. im sure there is some uselessness in it.

disableSerialization;
if (!isDedicated) then {

	player_unlockDoor = {
		private ["_ok"];
		if (!isNull dayz_selectedDoor) then
		{
			_obj = dayz_selectedDoor;
			_objectCharacterID 	= _obj getVariable ["CharacterID","0"];
			if (DZE_Lock_Door == _objectCharacterID) then
			{
				[player,"combo_unlock",0,false] call dayz_zombieSpeak;
				disableSerialization;
				_display = findDisplay 41144;
				_display closeDisplay 3000;
				if(_obj animationPhase "Open_hinge" == 0) then
				{
					_obj animate ["Open_hinge", 1];
				};
				if(_obj animationPhase "Open_latch" == 0) then
				{
					_obj animate ["Open_latch", 1];
				};
			}
			else
			{
				DZE_Lock_Door = "";
				[player,"combo_locked",0,false] call dayz_zombieSpeak;
				[player,20,true,(getPosATL player)] spawn player_alertZombies;
				
				titleCut ["","WHITE OUT",1];
				[player,"scream",0,false] call dayz_zombieSpeak;
				[player,20,true,(getPosATL player)] call player_alertZombies;
				titleCut ["","WHITE IN",1];
				disableSerialization;
				_display = findDisplay 41144;
				_display closeDisplay 3000;
				
				cutText ["Wrong code entered! \nLock Disabled for 45 seconds!", "PLAIN DOWN"];
				[10,10] call dayz_HungerThirst;
				dayz_temperatur = 10;
				if (isNil 'KeyCodeTry') then {KeyCodeTry = true;};
				[] spawn {sleep 45;KeyCodeTry = nil;};
				
			};
		}
		else
		{
			disableSerialization;
			_display = findDisplay 41144;
			_display closeDisplay 3000;
		};
	};
};
Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

would it be possible to to have this so that the more times you get the combo incorrect the longer you get knocked out for?

 

maybe have 3 free attempts, then 4th attempt you get knocked out for 15 seconds, 5th - 30 sec, 6 - 60 sec - 7 120 sec, 8th 240 sec etc etc

Link to comment
Share on other sites

Put it like this, its working for me

/*
	DayZ Unlock Door
	Usage: [_obj] call player_unlockDoor;
	Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected].
*/
private ["_display","_obj","_objectCharacterID"];

if(!isNil "DZE_DYN_UnlockDoorInprogress") exitWith { cutText [(localize "str_epoch_player_21") , "PLAIN DOWN"]; };

DZE_DYN_UnlockDoorInprogress = true;
disableSerialization;

if(!isNull dayz_selectedDoor) then {

	if (!isNil 'KeyCodeTryTimer') then {
		if(diag_tickTime > KeyCodeTryTimer) then {
			KeyCodeTry = nil;
			KeyCodeTryTimer = nil;
		};
	};

	// our target
	_obj = dayz_selectedDoor;

	_notNearestPlayer = _obj call dze_isnearest_player;

	if (_notNearestPlayer) then {
		// close display since another player is closer
		_display = findDisplay 41144;
		_display closeDisplay 3000;
		cutText [(localize "STR_EPOCH_ACTIONS_16"), "PLAIN DOWN"];
	} else {
	
		// get object combination
		_objectCharacterID 	= _obj getVariable ["CharacterID","0"];

		// Check combination
		if (DZE_Lock_Door == _objectCharacterID) then {

			[player,"combo_unlock",0,false] call dayz_zombieSpeak;

			// close display
			_display = findDisplay 41144;
			_display closeDisplay 3000;

			// unlock if locked
			if(_obj animationPhase "Open_hinge" == 0) then {
				_obj animate ["Open_hinge", 1];
			};

			if(_obj animationPhase "Open_latch" == 0) then {
				_obj animate ["Open_latch", 1];
			};
			KeyCodeTry = nil;

		} else {

			[10,10] call dayz_HungerThirst;

			DZE_Lock_Door = "";
			[player,"combo_locked",0,false] call dayz_zombieSpeak;
			[player,20,true,(getPosATL player)] spawn player_alertZombies;

			if (isNil 'KeyCodeTry') then {KeyCodeTry = 0;};

			KeyCodeTry = KeyCodeTry + 1;

			if (!isNil 'KeyCodeTryTimer') then {KeyCodeTryTimer = diag_tickTime+10;};

			if(KeyCodeTry >= ((round(random 4)) + 2)) then {
			
				if (isNil 'KeyCodeTryTimer') then {KeyCodeTryTimer = diag_tickTime+10;};
			
				cutText [(localize "str_epoch_player_19"), "PLAIN DOWN"];
				_display = findDisplay 46;
				_display closeDisplay 0;
			};
		};
	};
} else {
	
	// close display since no target
	_display = findDisplay 41144;
	_display closeDisplay 3000;
};
DZE_DYN_UnlockDoorInprogress = nil;

Hope this is helping u

Link to comment
Share on other sites

  • 2 weeks later...

There's a bigger problem atm, if you go to open a combo lock, change it to 001 then hit escape to close the combo lock dialogue, if the code is correct it will let you open the door. Rinse/repeat 002,003,004 etc until you get the right code, completely side stepping any punishment like dialogue lock out/kick to lobby etc.

 

Working with infiSTAR to try and fix this major bug, I've tried disabling the escape key in the combo lock sqf - doesn't work,

if (_dikCode == 0x01) then {
    *punishment here*
};

Chris tested to see if the combo lock dialogue has been closed to punish, also doesn't work.

if (!isNull finddisplay 49) then
                {
                    *punishment here*
                };
Link to comment
Share on other sites

You have to define it earlier I believe.

_display = (findDisplay 49);
while {alive player} do {
		if (str(_display)) do {
		//waituntil {!(IsNull (findDisplay 49))};  <-- may be needed tho
			_int = _int +1;
                   sleep 10; // will loop and _int will be full
	};

};

You can also disable the input for a few seconds while both displays are active and then close one of them with a message.

private ["_display","_display"];

_display = (findDisplay 49);
_display2 = (findDisplay 41144); // locked door?

while {alive player} do {
	if (_display && _display2) then {
	
	disableUserInput true
	sleep 0.1;
	titleText ["You cannot do this Mr. Freeman.", "PLAIN DOWN", 3];
	sleep 1;
	
	_display closeDisplay 49; //right one?
	_display2 closeDisplay 3000;
	
	titleText ["You'll be back in 10 seconds.", "PLAIN DOWN", 3];
	
	sleep 10;
	disableUserInput false;
	
};
};

Doubt it's gonna work but you get the idea. You can still find if the displays are open and add a integral +1 if so.

Link to comment
Share on other sites

  • 1 month later...
  • 4 weeks later...

What we could do is, when i get some extra time again, i'll make a gui where you can add poeple to the list who can open the doors. This way u dont have to give in a keycode (never forget one), and people cant open it (lock/unlock that is).

 

Simular to the plot management.

Link to comment
Share on other sites

My solutions so far..

 

i'm using infitistar to log attempts.

 

Add player_changeCombo.sqf to your mission file.

 

under private ["_result","_control","_directon","_name","_PubVar","_display"];

 

add

DoorCounterAttempt = DoorCounterAttempt + 1;
//systemChat format["change: %1",DoorCounterAttempt];

if(DoorCounterAttempt >= 40) then {
// exit to lobby
	(findDisplay 46) closeDisplay 0;
	
	// Log to server RPT
	PVAH_WriteLogReq = ["DoorBruteforce", format["%1 (%2) is trying to open a door with wrong kode. %3",
		name player,
		getPlayerUID player,
		mapGridPosition getPos player]];
	publicVariableServer 'PVAH_WriteLogReq';
};

add it to your compiles file

 

in you variables.sqf

 

add DoorCounterAttempt = 0;

 

and in your player_unlockDoor.sqf 

 

reset the counter  DoorCounterAttempt = 0; if door is unlocked successful

 

 

it's late so thats all i have 4 to night

Link to comment
Share on other sites

This is a pretty big issue, is there no fix for this yet??

Try ny script it kicks a player to lobby if he change the combolock numbers more Them 40 times,

Spend all Night trying to get the ESC detection working but nope it would only log when you pressed esc to the options menu

Link to comment
Share on other sites

  • 3 months later...

Hi, I have a script that prevents access from the lock after 2 bad attempts for 20 seconds as the standard Epoch one for 10 seconds doesn't actually work anyway, it lets you go straight ahead and retry the lock straight away...I can't remember where I got it but pretty sure it must have come from these forums somewhere.

 

Can anyone help me with it and tell me what I would change to increase the lockout to 60 seconds?

else
{
[10,10] call dayz_HungerThirst;
DZE_Lock_Door = "";
[player,"combo_locked",0,false] call dayz_zombieSpeak;
[player,20,true,(getPosATL player)] spawn player_alertZombies;
if (isNil 'KeyCodeTry') then 
{KeyCodeTry = 0;};
KeyCodeTry = KeyCodeTry + 1;
if(KeyCodeTry >= 2) then
{
cutText ["WRONG CODE ENTERED! COMBINATION ENTRY LOCKOUT FOR 20 SECONDS!", "PLAIN DOWN"];
[] spawn 
{
disableserialization;
private ["_i"];
_i = 0;
while {(_i < 200)} do
{
_display = findDisplay 41144;
_display closeDisplay 3000;
sleep 0.1;
_i = _i + 1;
};
KeyCodeTry = nil; 
};
};
};

Thanks :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
  • Discord

×
×
  • Create New...