Files
DayZ-Epoch/SQF/dayz_code/compile/player_unlockDoor.sqf
ebaydayz 534abdbdf0 Remove excessive door management config variables
Too many config variables made this unnecessarily complicated. Most
servers will want the defaults. For those that want to customize further
they can easily overwrite these files.

These seem like the most logical defaults to me. Allow all of these
people to manage and unlock by default:
- door owner
- plot owner
- plot friend
- plot admin
- door friend
- door admin

Door friends should be able to manage by default so they don't have to
wait for the owner to come back online to add someone as a door friend.

Plot friends and plot admins can get around the door by removing it and
building another one anyway, so locking them out is pointless. It is
still useful to have these as separate variables for servers that do not
require plot poles though.

Regular friendlies should not be included by default, since we have the
more fine grained plot friends and door friends lists for that. Regular
friendlies will probably be replaced by groups in the near future
anyway.

Please post a comment if there are any issues with these defaults I'm
forgetting. Thanks.
2016-10-08 14:49:59 -04:00

102 lines
3.1 KiB
Plaintext

/*
DayZ Unlock Door
Usage: [_obj] call player_unlockDoor;
Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com.
Modified for Zupa's DoorManagement.
*/
private ["_display","_obj","_objectCharacterID"];
if (!isNil "DZE_DYN_UnlockDoorInprogress") exitWith {localize "str_epoch_player_21" call dayz_rollingMessages;};
DZE_DYN_UnlockDoorInprogress = true;
// find display and check the door opening method
_doorMethod = '';
_displayCombo = findDisplay 41144;
_displayEye = findDisplay 61144;
if(!isNull _displayEye) then {_display = _displayEye; _doorMethod = "Eye";};
if(!isNull _displayCombo) then {_display = _displayCombo; _doorMethod = "Combo";};
if (!isNull dayz_selectedDoor) then {
if (!isNil 'KeyCodeTryTimer') then {
if (diag_tickTime > KeyCodeTryTimer) then {
KeyCodeTry = nil;
KeyCodeTryTimer = nil;
};
};
_obj = dayz_selectedDoor; // our target
_notNearestPlayer = _obj call dze_isnearest_player;
if (_notNearestPlayer) then {
// close display since another player is closer
_display closeDisplay 3000;
localize "STR_EPOCH_ACTIONS_16" call dayz_rollingMessages;
} else {
// get object combination
_objectCharacterID = _obj getVariable ["CharacterID","0"];
if(DZE_doorManagement) then {
// Check player access
_isowner = [player, _obj] call FNC_check_access;
if (
(_isOwner select 0) or // door owner
(_isOwner select 2) or // plot owner
(_isOwner select 3) or // plot friend
(_isOwner select 4) or // plot admin
(_isOwner select 5) or // door friend
(_isOwner select 6) // door admin
) then {
DZE_Lock_Door = dayz_selectedDoor getVariable['CharacterID','0'];
};
};
// Check combination
if (DZE_Lock_Door == _objectCharacterID) then {
[player,"combo_unlock",0,false] call dayz_zombieSpeak;
// close display
_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];
};
if(_doorMethod == "Eye") then {
localize "STR_EPOCH_DOORACCESS_SUCCESS" call dayz_rollingMessages;
};
KeyCodeTry = nil;
} else {
["Working",0,[100,15,10,0]] call dayz_NutritionSystem;
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)) + 4)) then {
if (isNil 'KeyCodeTryTimer') then {KeyCodeTryTimer = diag_tickTime+10;};
localize "str_epoch_player_19" call dayz_rollingMessages;
_display closeDisplay 3000;
};
if(_doorMethod == "Eye") then {
localize "STR_EPOCH_DOORACCESS_FAILURE" call dayz_rollingMessages;
_display closeDisplay 3000;
};
};
};
} else {
// close display since no target
_display closeDisplay 3000;
};
DZE_DYN_UnlockDoorInprogress = nil;