137 lines
4.3 KiB
Plaintext
137 lines
4.3 KiB
Plaintext
--[[
|
|
=====================================================================
|
|
Addon : Enjoy Cigarettes
|
|
Link : https://www.moddb.com/mods/stalker-anomaly/addons/dltx-enjoy-cigarettes
|
|
Author : Tosox
|
|
Date : 22.04.2023
|
|
Last Edit : 18.01.2024
|
|
=====================================================================
|
|
--]]
|
|
|
|
local ini_eff = ini_file("items\\items\\animations_settings.ltx")
|
|
local cigs_ini = ini_file("items\\settings\\enjoy_cigs_cfg.ltx")
|
|
|
|
local quickslot_bind = nil
|
|
local modifier = nil
|
|
|
|
local enjoy_next = false
|
|
|
|
--===========================================================================
|
|
--
|
|
-- Util functions
|
|
--
|
|
--===========================================================================
|
|
|
|
function is_cigarette(obj_name)
|
|
return obj_name and cigs_ini:r_bool_ex("cigs", obj_name) and true or false
|
|
end
|
|
|
|
function has_asnens_long_anim()
|
|
return ini_eff:r_string_ex("cigar1_alt", "cam") == "itemuse_anm_effects\\cig_pack_asnen_long.anm"
|
|
end
|
|
|
|
--===========================================================================
|
|
--
|
|
-- Patch 'enhanced_animations' to dynamically change the animation
|
|
--
|
|
--===========================================================================
|
|
|
|
local orig_anim_prepare = enhanced_animations.anim_prepare
|
|
enhanced_animations.anim_prepare = function()
|
|
if (ui_mcm) and (quickslot_bind) and (is_cigarette(enhanced_animations.used_item)) and (not enjoy_next) then
|
|
-- Iterate quickslots
|
|
for i = 0, 3 do
|
|
local itm = get_console_cmd(0, strformat("slot_%s", i))
|
|
-- Check if used item is in quickslot
|
|
if itm == enhanced_animations.used_item then
|
|
local hud = GetActorMenu()
|
|
if (hud) and (not hud:IsShown()) then
|
|
if ui_mcm.get_mod_key(modifier) then
|
|
enjoy_next = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if enjoy_next then
|
|
-- Check if animation for the item exists as alt variant
|
|
local alt_item = enhanced_animations.used_item .. "_alt"
|
|
if ini_eff:r_string_ex(alt_item, "snd") then
|
|
enhanced_animations.used_item = alt_item
|
|
enhanced_animations.anim_section = ini_eff:r_string_ex(alt_item, "anm")
|
|
else
|
|
enjoy_next = false
|
|
end
|
|
end
|
|
|
|
orig_anim_prepare()
|
|
end
|
|
|
|
local orig_stop_item_anim = enhanced_animations.stop_my_item_anim
|
|
enhanced_animations.stop_my_item_anim = function()
|
|
-- Reset enjoy_next indicator
|
|
enjoy_next = false
|
|
return orig_stop_item_anim()
|
|
end
|
|
|
|
--===========================================================================
|
|
--
|
|
-- Patch 'CreateTimeEvent' to dynamically change the lighter sparks times
|
|
--
|
|
--===========================================================================
|
|
|
|
function patched_create_time_event(orig_func, ev_id, act_id, timer, f, ...)
|
|
if (not enjoy_next) or (has_asnens_long_anim()) then
|
|
orig_func(ev_id, act_id, timer, f, ...)
|
|
return
|
|
end
|
|
|
|
if (ev_id == "ea_cig_light") and (act_id == "ea_cig_light") then
|
|
timer = 6
|
|
elseif (ev_id == "ea_cig_light2") and (act_id == "ea_cig_light2") then
|
|
timer = 6.5
|
|
end
|
|
|
|
orig_func(ev_id, act_id, timer, f, ...)
|
|
end
|
|
|
|
local orig_create_time_event = _G.CreateTimeEvent
|
|
_G.CreateTimeEvent = function(ev_id, act_id, timer, f, ...)
|
|
patched_create_time_event(orig_create_time_event, ev_id, act_id, timer, f, ...)
|
|
end
|
|
|
|
local orig_demonized_create_time_event = nil
|
|
if demonized_time_events then
|
|
orig_demonized_create_time_event = demonized_time_events.CreateTimeEvent
|
|
demonized_time_events.CreateTimeEvent = function(ev_id, act_id, timer, f, ...)
|
|
patched_create_time_event(orig_demonized_create_time_event, ev_id, act_id, timer, f, ...)
|
|
end
|
|
end
|
|
|
|
--===========================================================================
|
|
|
|
function is_valid_cigarette(obj, bag, mode)
|
|
return is_cigarette(obj:section()) and (mode == "inventory") and (bag == "actor_bag")
|
|
end
|
|
|
|
function get_functor_name(obj, bag, mode)
|
|
return "st_enjoy_cigs"
|
|
end
|
|
|
|
function enjoy_cigarette(obj, bag, mode)
|
|
enjoy_next = true
|
|
ui_inventory.GUI:Action_Use(obj, bag)
|
|
end
|
|
|
|
function on_option_change()
|
|
quickslot_bind = tsx_enjoy_cigs_mcm.get_config("quickslot_bind")
|
|
modifier = tsx_enjoy_cigs_mcm.get_config("modifier")
|
|
end
|
|
|
|
function on_game_start()
|
|
custom_functor_autoinject.add_functor("enjoy_cigs", is_valid_cigarette, get_functor_name, nil, enjoy_cigarette, true)
|
|
RegisterScriptCallback("on_option_change", on_option_change)
|
|
on_option_change()
|
|
end
|