mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 04:02:37 +03:00
215 lines
5.4 KiB
Plaintext
215 lines
5.4 KiB
Plaintext
private ["_event", "_onLadder", "_inVehicle", "_isOk", "_primary", "_current", "_rifle", "_pistol", "_melee"];
|
|
_event = if (count _this > 1) then { _this select 3 } else { _this select 0 };
|
|
|
|
_findRifle = {
|
|
private ["_return", "_primary"];
|
|
_return = "";
|
|
_primary = primaryWeapon player;
|
|
|
|
if (_primary != "") then {
|
|
if !(_primary in MeleeWeapons) then {
|
|
_return = _primary;
|
|
};
|
|
};
|
|
|
|
if (dayz_onBack != "" && _return == "") then {
|
|
if !(dayz_onBack in MeleeWeapons) then {
|
|
_return = dayz_onBack;
|
|
};
|
|
};
|
|
|
|
_return;
|
|
};
|
|
|
|
_findMelee = {
|
|
private ["_return", "_primary"];
|
|
_return = "";
|
|
|
|
_primary = primaryWeapon player;
|
|
|
|
if (_primary != "") then {
|
|
if (_primary in MeleeWeapons) then {
|
|
_return = _primary;
|
|
};
|
|
};
|
|
|
|
if (dayz_onBack != "" && _return == "") then {
|
|
if (dayz_onBack in MeleeWeapons) then {
|
|
_return = dayz_onBack;
|
|
};
|
|
};
|
|
|
|
_return;
|
|
};
|
|
|
|
_findPistol = {
|
|
private ["_return"];
|
|
_return = "";
|
|
|
|
{
|
|
if (getNumber (configFile >> "CfgWeapons" >> _x >> "type") == 2) then {
|
|
_return = _x;
|
|
};
|
|
} foreach (weapons player);
|
|
|
|
_return;
|
|
};
|
|
|
|
_selectMuzzle = {
|
|
private ["_return", "_wpn", "_muzzles"];
|
|
_wpn = _this select 0;
|
|
_muzzles = getArray(configFile >> "cfgWeapons" >> _wpn >> "muzzles");
|
|
|
|
if (_muzzles select 0 != "this") then {
|
|
_return = (_muzzles select 0);
|
|
} else {
|
|
_return = _wpn;
|
|
};
|
|
|
|
_return;
|
|
};
|
|
|
|
_clearActions = {
|
|
if (s_player_equip_carry > -1) then {
|
|
player removeAction s_player_equip_carry;
|
|
s_player_equip_carry = -1;
|
|
};
|
|
};
|
|
|
|
_switchPrimary = {
|
|
private ["_primary", "_current"];
|
|
_primary = primaryWeapon player;
|
|
_current = currentWeapon player;
|
|
_timer = 0;
|
|
|
|
[] call _clearActions;
|
|
if (_primary != "") then {
|
|
// check if player is still in the 'open gear' animation state and force him out of it (caused major issues)
|
|
_animState = animationState player;
|
|
|
|
switch (true) do {
|
|
// current weapon is a rifle
|
|
case (_animState == "amovpknlmstpsraswrfldnon_gear" || _animState == "amovpercmstpsraswrfldnon_gear"): {
|
|
player playMove "amovpknlmstpslowwrfldnon_amovpknlmstpsraswrfldnon";
|
|
waitUntil { animationState player == "amovpknlmstpslowwrfldnon_amovpknlmstpsraswrfldnon" };
|
|
};
|
|
// current weapon is a pistol
|
|
case (_animState == "amovpknlmstpsraswpstdnon_gear" || _animState == "amovpercmstpsraswpstdnon_gear"): {
|
|
player playMove "amovpknlmstpslowwpstdnon_gear_amovpknlmstpsraswpstdnon";
|
|
waitUntil { animationState player == "amovpknlmstpslowwpstdnon_gear_amovpknlmstpsraswpstdnon" };
|
|
};
|
|
// is standing with weapon lowered
|
|
case (["aidlpercmstpslowwrfldnon", _animState] call fnc_inString): {
|
|
player playMove "amovpercmstpslowwrfldnon_amovpercmstpsraswrfldnon";
|
|
waitUntil { animationState player == "amovpercmstpslowwrfldnon_amovpercmstpsraswrfldnon" };
|
|
};
|
|
};
|
|
|
|
player removeWeapon _primary;
|
|
|
|
// make sure animation is playing to prevent instant switch (if current weapon is not pisol)
|
|
if (!dayz_quickSwitch) then {
|
|
if (_current != [] call _findPistol) then {
|
|
_timeout = diag_tickTime + 2;
|
|
_animArray = [
|
|
"amovpercmstpsraswrfldnon_amovpercmstpsnonwnondnon", // is standing, has no pistol / is crouched, has no pistol
|
|
"amovpercmstpsraswrfldnon_amovpercmstpsraswpstdnon", // is standing, has pistol
|
|
"amovpknlmstpsraswrfldnon_amovpknlmstpsraswpstdnon", // is crouched, has pistol
|
|
"amovppnemstpsraswrfldnon_amovppnemstpsnonwnondnon", // is prone, has no pistol
|
|
"amovppnemstpsraswrfldnon_amovppnemstpsraswpstdnon" // is prone, has pistol
|
|
];
|
|
|
|
waitUntil { (animationState player) in _animArray || diag_tickTime >= _timeout };
|
|
waitUntil { !((animationState player) in _animArray) || diag_tickTime >= _timeout };
|
|
};
|
|
};
|
|
};
|
|
|
|
if (dayz_onBack != "") then {
|
|
player addWeapon dayz_onBack;
|
|
player selectWeapon ([dayz_onBack] call _selectMuzzle);
|
|
};
|
|
|
|
dayz_onBack = _primary;
|
|
|
|
call dayz_meleeMagazineCheck;
|
|
};
|
|
|
|
_switchPrimaryUI = {
|
|
private ["_primary", "_current"];
|
|
_primary = primaryWeapon player;
|
|
_current = currentWeapon player;
|
|
|
|
[] call _clearActions;
|
|
|
|
if (_primary != "") then {
|
|
player removeWeapon _primary;
|
|
};
|
|
|
|
if (dayz_onBack != "") then {
|
|
player addWeapon dayz_onBack;
|
|
|
|
if (_primary == _current) then {
|
|
player selectWeapon ([dayz_onBack] call _selectMuzzle);
|
|
};
|
|
};
|
|
|
|
dayz_onBack = _primary;
|
|
|
|
[[(findDisplay 106)],"onLBSelChanged"] execVM "\z\addons\dayz_code\system\handleGear.sqf"; // update gear dialog
|
|
};
|
|
|
|
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
|
|
_inVehicle = (vehicle player != player);
|
|
_isOK = (!_onLadder && !_inVehicle && !r_player_unconscious && !dayz_onBackActive);
|
|
|
|
if (_isOK) then { dayz_onBackActive = true };
|
|
|
|
switch (_event) do {
|
|
case "action": {
|
|
if (_isOK) then {
|
|
[] call _switchPrimary;
|
|
};
|
|
};
|
|
case "gear": {
|
|
[] call _switchPrimaryUI;
|
|
};
|
|
case "rifle": {
|
|
if (_isOK) then {
|
|
_rifle = [] call _findRifle;
|
|
|
|
if (_rifle != "") then {
|
|
if (_rifle == dayz_onBack) then {
|
|
[] call _switchPrimary;
|
|
} else {
|
|
player selectWeapon ([_rifle] call _selectMuzzle);
|
|
};
|
|
};
|
|
};
|
|
};
|
|
case "pistol": {
|
|
if (_isOK) then {
|
|
_pistol = [] call _findPistol;
|
|
|
|
if (_pistol != "") then {
|
|
player selectWeapon ([_pistol] call _selectMuzzle);
|
|
};
|
|
};
|
|
};
|
|
case "melee": {
|
|
if (_isOK) then {
|
|
_melee = [] call _findMelee;
|
|
|
|
if (_melee != "") then {
|
|
if (_melee == dayz_onBack) then {
|
|
[] call _switchPrimary;
|
|
} else {
|
|
player selectWeapon ([_melee] call _selectMuzzle);
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
if (_isOK) then { dayz_onBackActive = false };
|