246 lines
8.5 KiB
Plaintext
246 lines
8.5 KiB
Plaintext
-- enable_animations = false
|
|
|
|
-- local fov_manager = lam_fov_manager
|
|
local mcm_allow_movement = outfit_animations_mcm.get_config("allow_movement")
|
|
local mcm_enable_animation = outfit_animations_mcm.get_config("enable_backpack_equip")
|
|
|
|
local ruck_last_backpack = -1
|
|
local is_animation_playing = false
|
|
local item_to_equip = nil
|
|
local item_to_unequip = nil
|
|
|
|
|
|
----------------------------------------
|
|
--#region callbacks
|
|
----------------------------------------
|
|
|
|
function on_game_start()
|
|
RegisterScriptCallback("on_option_change", on_option_change)
|
|
RegisterScriptCallback("actor_on_first_update", actor_on_first_update)
|
|
RegisterScriptCallback("actor_item_to_slot", on_item_to_slot)
|
|
RegisterScriptCallback("actor_item_to_ruck", on_item_to_ruck)
|
|
RegisterScriptCallback("actor_on_item_drop", on_item_to_ruck)
|
|
end
|
|
|
|
|
|
function on_option_change()
|
|
mcm_allow_movement = outfit_animations_mcm.get_config("allow_movement")
|
|
mcm_enable_animation = outfit_animations_mcm.get_config("enable_backpack_equip")
|
|
end
|
|
|
|
|
|
function actor_on_first_update()
|
|
CreateTimeEvent("outfit_animations_backpack", "enable_backpack_animation_delay_te", 3, function()
|
|
ruck_last_backpack = db.actor:item_in_slot(13) and db.actor:item_in_slot(13):id() or -1
|
|
-- enable_animations = true
|
|
return true
|
|
end)
|
|
end
|
|
|
|
|
|
function on_item_to_ruck(obj)
|
|
if IsItem("backpack", nil, obj) and obj:id() == ruck_last_backpack then
|
|
ruck_last_backpack = -1
|
|
|
|
-- if not db.actor:alive() then return end
|
|
-- if not enable_animations then return end
|
|
-- if has_alife_info("BAR_ARENA_FIGHT") then return end
|
|
if not mcm_enable_animation then return end
|
|
|
|
item_to_unequip = get_section_name("outfit_animation_backpack_unequip")
|
|
if not is_animation_playing then
|
|
is_animation_playing = true
|
|
-- play_animation_enter()
|
|
play_animation()
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function on_item_to_slot(obj)
|
|
if IsItem("backpack", nil, obj) and obj:id() ~= ruck_last_backpack then
|
|
ruck_last_backpack = obj:id()
|
|
|
|
-- if not db.actor:alive() then return end
|
|
-- if not enable_animations then return end
|
|
-- if has_alife_info("BAR_ARENA_FIGHT") then return end
|
|
if not mcm_enable_animation then return end
|
|
|
|
item_to_equip = get_section_name("outfit_animation_backpack_equip")
|
|
if not is_animation_playing then
|
|
is_animation_playing = true
|
|
-- play_animation_enter()
|
|
play_animation()
|
|
end
|
|
end
|
|
end
|
|
|
|
--#endregion
|
|
------------------------------------------------------------------------------
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
--#region main
|
|
------------------------------------------------------------------------------
|
|
|
|
function play_animation()
|
|
|
|
CreateTimeEvent("liz_outfit_animations_backpack", "select_animation", 0.1, function ()
|
|
local action_equip = {
|
|
sec = item_to_equip,
|
|
params = {
|
|
can_walk = mcm_allow_movement,
|
|
hud_fov = 0.6
|
|
}
|
|
}
|
|
local action_unequip = {
|
|
sec = item_to_unequip,
|
|
params = {
|
|
can_walk = mcm_allow_movement,
|
|
hud_fov = 0.6
|
|
}
|
|
}
|
|
|
|
if item_to_unequip and item_to_equip then
|
|
local result = lam.is_playing()
|
|
if result then
|
|
item_to_equip = nil
|
|
item_to_unequip = nil
|
|
is_animation_playing = false
|
|
return true
|
|
end
|
|
lam.try_play_action(action_unequip)
|
|
lam.add_action_to_queue(action_equip)
|
|
elseif item_to_unequip and not item_to_equip then
|
|
lam.try_play_action(action_unequip)
|
|
elseif not item_to_unequip and item_to_equip then
|
|
lam.try_play_action(action_equip)
|
|
end
|
|
|
|
item_to_equip = nil
|
|
item_to_unequip = nil
|
|
is_animation_playing = false
|
|
|
|
return true
|
|
end)
|
|
end
|
|
|
|
-- -- prepare before animation
|
|
-- function play_animation_enter()
|
|
-- hide_hud_inventory()
|
|
-- if headgear_animations then headgear_animations.enable_animations = false end
|
|
-- -- cur_slot = db.actor:active_slot()
|
|
-- det_active = db.actor:active_detector() or nil
|
|
-- if det_active then det_active:switch_state(2) end
|
|
-- db.actor:activate_slot(0)
|
|
|
|
-- wait_for_free_hands(play_animation_execute)
|
|
-- end
|
|
|
|
|
|
-- function play_animation_execute()
|
|
-- if mcm_allow_movement then game.only_allow_movekeys(true) else level.disable_input() end
|
|
-- fov_manager.restore_fov()
|
|
|
|
-- if item_to_unequip and item_to_equip then
|
|
-- swap()
|
|
-- elseif item_to_unequip and not item_to_equip then
|
|
-- unequip()
|
|
-- elseif not item_to_unequip and item_to_equip then
|
|
-- equip()
|
|
-- end
|
|
-- end
|
|
|
|
|
|
-- -- restore after animation
|
|
-- function play_animation_exit()
|
|
-- if mcm_allow_movement then game.only_allow_movekeys(false) else level.enable_input() end
|
|
-- if headgear_animations then headgear_animations.enable_animations = true end
|
|
-- item_to_equip = nil
|
|
-- item_to_unequip = nil
|
|
-- is_animation_playing = false
|
|
-- end
|
|
|
|
-- ------------------------------------------------------------------------------
|
|
|
|
-- function equip()
|
|
-- local anm = "anm_use"
|
|
-- local cam = ini_sys:r_string_ex(item_to_equip, "cam")
|
|
-- local snd = ini_sys:r_string_ex(item_to_equip, "snd")
|
|
-- local length = game.get_motion_length(item_to_equip, anm, 1) / 1000
|
|
-- xr_effects.play_snd(db.actor, nil, { [1] = snd })
|
|
-- level.add_cam_effector(cam, 1301, false, "")
|
|
-- game.play_hud_motion(2, item_to_equip, anm, false, 1)
|
|
-- Invoke("restore_after_animation_te", length + 0.25, play_animation_exit)
|
|
-- end
|
|
|
|
|
|
-- function unequip()
|
|
-- local anm = "anm_use"
|
|
-- local cam = ini_sys:r_string_ex(item_to_unequip, "cam")
|
|
-- local snd = ini_sys:r_string_ex(item_to_unequip, "snd")
|
|
-- local length = game.get_motion_length(item_to_unequip, anm, 1) / 1000
|
|
-- xr_effects.play_snd(db.actor, nil, { [1] = snd })
|
|
-- level.add_cam_effector(cam, 1302, false, "")
|
|
-- game.play_hud_motion(2, item_to_unequip, anm, false, 1)
|
|
-- Invoke("restore_after_animation_te", length + 0.25, play_animation_exit)
|
|
-- end
|
|
|
|
|
|
-- function swap()
|
|
-- local anm = "anm_use"
|
|
-- local cam_unequip = ini_sys:r_string_ex(item_to_unequip, "cam")
|
|
-- local snd_unequip = ini_sys:r_string_ex(item_to_unequip, "snd")
|
|
-- local cam_equip = ini_sys:r_string_ex(item_to_equip, "cam")
|
|
-- local snd_equip = ini_sys:r_string_ex(item_to_equip, "snd")
|
|
-- local length_unequip = game.get_motion_length(item_to_unequip, anm, 1) / 1000
|
|
-- local length_equip = game.get_motion_length(item_to_equip, anm, 1) / 1000
|
|
|
|
-- xr_effects.play_snd(db.actor, nil, { [1] = snd_unequip })
|
|
-- level.add_cam_effector(cam_unequip, 1303, false, "")
|
|
-- game.play_hud_motion(2, item_to_unequip, anm, false, 1)
|
|
-- Invoke("play_equip_animation_after_unequip_te", length_unequip, function ()
|
|
-- xr_effects.play_snd(db.actor, nil, { [1] = snd_equip })
|
|
-- level.add_cam_effector(cam_equip, 1300, false, "")
|
|
-- game.play_hud_motion(2, item_to_equip, anm, false, 1)
|
|
-- Invoke("restore_after_animation_te", length_equip + 0.25, play_animation_exit)
|
|
-- end)
|
|
-- end
|
|
|
|
--#endregion
|
|
------------------------------------------------------------------------------
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
--#region utils
|
|
------------------------------------------------------------------------------
|
|
|
|
function get_section_name(section)
|
|
local faction = character_community(db.actor):sub(7)
|
|
return section .. "_" .. faction .. "_hud"
|
|
end
|
|
|
|
|
|
-- function wait_for_free_hands(action_to_perform)
|
|
-- local force_timer = 0
|
|
-- CreateTimeEvent("outfit_animations_backpack", "wait_for_free_hands_te0", 0.1, function()
|
|
-- if (db.actor:active_slot() == 0 and not db.actor:active_detector() and not enhanced_animations.used_item) or (force_timer > 5) then
|
|
-- Invoke("wait_for_free_hands_te1", 0.1, action_to_perform) --i don understan y this works (ノへ ̄、)
|
|
-- return true
|
|
-- end
|
|
-- force_timer = force_timer + (device().time_delta / 1000)
|
|
-- return false
|
|
-- end)
|
|
-- end
|
|
|
|
|
|
-- function Invoke(name, time, action)
|
|
-- CreateTimeEvent("outfit_animations_backpack", name, time, function()
|
|
-- action()
|
|
-- return true
|
|
-- end)
|
|
-- end
|
|
|
|
--#endregion
|
|
------------------------------------------------------------------------------
|