178 lines
5.0 KiB
Plaintext
178 lines
5.0 KiB
Plaintext
|
-- add array via ltx with weapon names to ignore selected weapons from lowering
|
||
|
|
||
|
local lower_weapon_sprint_status = false
|
||
|
local lower_weapon_sprint_safe_mode_active = false
|
||
|
local lower_weapon_sprint_aim = false
|
||
|
local lower_weapon_sprint_fire = false
|
||
|
local lowered_sprint_equip_weapon = false
|
||
|
|
||
|
-- TimeEvents
|
||
|
local function lower_sprint_delay_fire_func()
|
||
|
level.press_action(bind_to_dik(key_bindings.kWPN_FIRE))
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local function lower_sprint_delay_toggle_aim_func()
|
||
|
if not (axr_main.weapon_is_zoomed) then
|
||
|
level.press_action(bind_to_dik(key_bindings.kWPN_ZOOM))
|
||
|
end
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local function lower_sprint_delay_safemode_func()
|
||
|
if (game.actor_weapon_lowered()) then
|
||
|
lower_weapon_sprint_safe_mode_active = true
|
||
|
end
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
local function lowered_sprint_delay_previous_weapon_func()
|
||
|
lowered_sprint_equip_weapon = false
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
-- Actor On Update(Every tick)
|
||
|
local function actor_on_update()
|
||
|
|
||
|
-- Prevent quick aim when
|
||
|
local wpn = db.actor:active_item()
|
||
|
local is_weapon = wpn and IsWeapon(wpn) or false
|
||
|
if (is_weapon) then
|
||
|
local state = wpn:get_state()
|
||
|
if state == 3 then
|
||
|
lowered_sprint_equip_weapon = true
|
||
|
CreateTimeEvent(0, "lowered_sprint_delay_previous_weapon", 0.5, lowered_sprint_delay_previous_weapon_func)
|
||
|
|
||
|
wpn = nil
|
||
|
return true
|
||
|
end
|
||
|
else
|
||
|
|
||
|
end
|
||
|
|
||
|
if lower_weapon_sprint_fire == true and actor_menu.last_mode == 0 then
|
||
|
if (is_weapon) then
|
||
|
local state = wpn:get_state()
|
||
|
|
||
|
if state == 0 then
|
||
|
if not (SYS_GetParam(0,wpn:section(),"kind") == "w_melee") then
|
||
|
wpn:switch_state(0)
|
||
|
CreateTimeEvent(0, "lower_sprint_delay_fire", 0, lower_sprint_delay_fire_func)
|
||
|
else
|
||
|
if not (state == 5) then
|
||
|
wpn:switch_state(0)
|
||
|
end
|
||
|
end
|
||
|
lower_weapon_sprint_fire = false
|
||
|
end
|
||
|
end
|
||
|
wpn = nil
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
if lower_weapon_sprint_aim == true and actor_menu.last_mode == 0 then
|
||
|
if (is_weapon) then
|
||
|
local state = wpn:get_state()
|
||
|
|
||
|
if state == 0 then
|
||
|
wpn:switch_state(0)
|
||
|
end
|
||
|
|
||
|
if lowered_sprint_equip_weapon == false then
|
||
|
if not (axr_main.weapon_is_zoomed) and game.actor_weapon_lowered() then
|
||
|
CreateTimeEvent(0, "lower_sprint_delay_toggle_aim", 0, lower_sprint_delay_toggle_aim_func)
|
||
|
else
|
||
|
lower_weapon_sprint_aim = false
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
wpn = nil
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
-- Prevent weapon from raising after weapon has already been lowered manually
|
||
|
if (lower_weapon_sprint_safe_mode_active == true and game.actor_weapon_lowered()) then
|
||
|
wpn = nil
|
||
|
return true
|
||
|
else
|
||
|
lower_weapon_sprint_safe_mode_active = false
|
||
|
end
|
||
|
|
||
|
if not (IsMoveState("mcFall") or IsMoveState("mcJump") or IsMoveState("mcLanding")) and lower_weapon_sprint_aim == false then
|
||
|
if IsMoveState("mcSprint") then
|
||
|
if (wpn) then
|
||
|
local can_be_lowered = wpn and IsWeapon(wpn) and ini_sys:r_bool_ex(wpn:section(), "can_be_lowered", false) or false
|
||
|
local state = wpn:get_state()
|
||
|
if (can_be_lowered and not(state == 0 or state == 1)) then can_be_lowered = false end
|
||
|
|
||
|
if (can_be_lowered) then
|
||
|
if (not game.actor_weapon_lowered()) then
|
||
|
game.actor_lower_weapon(true)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
lower_weapon_sprint_status = true
|
||
|
else
|
||
|
if (wpn) then
|
||
|
local can_be_lowered = wpn and IsWeapon(wpn) and ini_sys:r_bool_ex(wpn:section(), "can_be_lowered", false) or false
|
||
|
local state = wpn:get_state()
|
||
|
if (can_be_lowered and not(state == 0 or state == 1)) then can_be_lowered = false end
|
||
|
|
||
|
if (can_be_lowered) then
|
||
|
if (game.actor_weapon_lowered()) then
|
||
|
if lower_weapon_sprint_status == true then
|
||
|
game.actor_lower_weapon(false)
|
||
|
wpn:switch_state(0)
|
||
|
end
|
||
|
else
|
||
|
lower_weapon_sprint_status = false
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
wpn = nil
|
||
|
end
|
||
|
|
||
|
RegisterScriptCallback("actor_on_update",actor_on_update)
|
||
|
|
||
|
|
||
|
-- Key Presses
|
||
|
local function on_key_press(key)
|
||
|
-- allow fire on sprint
|
||
|
if (key == bind_to_dik(key_bindings.kWPN_FIRE)) then
|
||
|
if IsMoveState("mcSprint") and lowered_sprint_equip_weapon == false and game.actor_weapon_lowered() then
|
||
|
if (actor_menu.last_mode == 0) and (pda.dialog_closed == true) and (not Check_UI()) and (not db.actor:has_info("ui_pda")) then
|
||
|
lower_weapon_sprint_fire = true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Prevent ignore aim when weapon is lowering
|
||
|
if (key == bind_to_dik(key_bindings.kWPN_ZOOM)) then
|
||
|
if IsMoveState("mcSprint") and lowered_sprint_equip_weapon == false and game.actor_weapon_lowered() then
|
||
|
if (actor_menu.last_mode == 0) and (pda.dialog_closed == true) and (not Check_UI()) and (not db.actor:has_info("ui_pda")) then
|
||
|
lower_weapon_sprint_aim = true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if (key == bind_to_dik(key_bindings.kSAFEMODE)) then
|
||
|
CreateTimeEvent(0, "lower_sprint_delay_safemode", 0, lower_sprint_delay_safemode_func)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
RegisterScriptCallback("on_key_press",on_key_press)
|
||
|
|
||
|
|
||
|
-- Key Releases
|
||
|
local function on_key_release(key)
|
||
|
-- Prevent ignore aim when weapon is lowering
|
||
|
if (key == bind_to_dik(key_bindings.kWPN_ZOOM)) then
|
||
|
if not (ui_options.get("control/general/aim_toggle")) then
|
||
|
lower_weapon_sprint_aim = false
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
RegisterScriptCallback("on_key_release",on_key_release)
|