136 lines
6.1 KiB
Plaintext
136 lines
6.1 KiB
Plaintext
---==================================================================================================================---
|
|
--- ---
|
|
--- Original Author(s) : NLTP_ASHES ---
|
|
--- Edited : N/A ---
|
|
--- Date : 17/02/2024 ---
|
|
--- License : Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) ---
|
|
--- ---
|
|
--- Script used to bind a game_object to a luabind class, to enable specific scripted behaviors. ---
|
|
--- ---
|
|
---==================================================================================================================---
|
|
|
|
-- ---------------------------------------------------------------------------------------------------------------------
|
|
-- Constants, global variables and imported functions
|
|
-- ---------------------------------------------------------------------------------------------------------------------
|
|
|
|
-- Imported functions
|
|
local dbg_printf = western_goods_utils.dbg_printf
|
|
|
|
-- ---------------------------------------------------------------------------------------------------------------------
|
|
-- General functions
|
|
-- ---------------------------------------------------------------------------------------------------------------------
|
|
|
|
--- Function used to bind an object to the Fire Source Binder
|
|
--- @param obj game_object
|
|
--- @return nil
|
|
function bind(obj)
|
|
obj:bind_object(fire_source_binder(obj).binder)
|
|
end
|
|
|
|
-- ---------------------------------------------------------------------------------------------------------------------
|
|
-- Object Binder Class
|
|
-- ---------------------------------------------------------------------------------------------------------------------
|
|
|
|
class "fire_source_binder" (western_goods_bind_object.object_binder_lua)
|
|
|
|
function fire_source_binder:__init(obj) super(obj)
|
|
dbg_printf("[WG] Fire Source Binder | Binding object '%s'", obj:name())
|
|
|
|
-- Sound effects
|
|
self.m_snd_use_cf_fire = sound_object([[western_goods_tech\lighter_use_cf_fire]])
|
|
|
|
-- Callbacks
|
|
RegisterScriptCallback("western_goods_on_campfire_use", self)
|
|
RegisterScriptCallback("western_goods_on_item_before_use", self)
|
|
RegisterScriptCallback("western_goods_on_hideout_furniture_light_use", self)
|
|
|
|
dbg_printf("[WG] Fire Source Binder | Successfully bound object '%s'", obj:name())
|
|
end
|
|
|
|
function fire_source_binder:net_destroy()
|
|
UnregisterScriptCallback("western_goods_on_campfire_use", self)
|
|
UnregisterScriptCallback("western_goods_on_item_before_use", self)
|
|
UnregisterScriptCallback("western_goods_on_hideout_furniture_light_use", self)
|
|
|
|
western_goods_bind_object.object_binder_lua.net_destroy(self)
|
|
end
|
|
|
|
function fire_source_binder:western_goods_on_campfire_use()
|
|
-- Hide inventory UI
|
|
if get_hud() then
|
|
hide_hud_inventory()
|
|
end
|
|
|
|
-- Get nearby campfire (or use campfire passed as argument)
|
|
local campfire_obj = bind_campfire.get_nearby_campfire(4, false)
|
|
local campfire = campfire_obj and campfire_obj:get_campfire()
|
|
if not campfire_obj or not campfire then
|
|
printf("~[WG] WARNING | Fire Source Binder | Use Campfire - No campfire found ! [pos: %s | lvid: %s | gvid: %s]", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
|
|
return false
|
|
end
|
|
|
|
-- Return if campfire is already on
|
|
if (campfire:is_on()) then
|
|
dbg_printf("[WG] Fire Source Binder | Use Campfire - Failed to light campfire, it is already on")
|
|
return false
|
|
end
|
|
|
|
-- We wuzz rain and shit
|
|
if not bind_campfire.rain_pass() then
|
|
actor_menu.set_msg(1, western_goods_utils.get_translation("st_fail"), 3)
|
|
dbg_printf("[WG] Fire Source Binder | Use Campfire - Failed to light campfire, because of rain")
|
|
return true
|
|
end
|
|
|
|
if (bind_campfire.k_rain < 1) then
|
|
bind_campfire.k_rain = bind_campfire.k_rain + 1
|
|
end
|
|
|
|
-- Play SFX
|
|
self.m_snd_use_cf_fire:play_at_pos(campfire_obj, campfire_obj:position(), 0, sound_object.s3d)
|
|
|
|
actor_menu.set_msg(1, western_goods_utils.get_translation("st_camp_help"), 3)
|
|
|
|
campfire:turn_on()
|
|
dbg_printf("[WG] Fire Source Binder | Use Campfire - Successfully lit campfire")
|
|
return true
|
|
end
|
|
|
|
function fire_source_binder:western_goods_on_item_before_use(obj, flags)
|
|
local require_tool = ini_sys:r_string_ex(obj:section(), "required_tool")
|
|
local obj_tool = require_tool and ini_sys:section_exist(require_tool) and db.actor:object(require_tool)
|
|
|
|
-- Return if no tool is required, or if player already has a tool
|
|
if not require_tool or obj_tool then
|
|
dbg_printf("[WG] Fire Source Binder | Use Cigarette - Object requires no tool or player has necessary tool already")
|
|
return false
|
|
end
|
|
|
|
-- Return if action was already allowed
|
|
if flags.ret_value then
|
|
dbg_printf("[WG] Fire Source Binder | Use Cigarette - Action was already allowed")
|
|
return false
|
|
end
|
|
|
|
-- Override "missing tool" message
|
|
actor_menu.set_msg(1, "", 5)
|
|
|
|
flags.ret_value = true
|
|
dbg_printf("[WG] Fire Source Binder | Use Cigarette - Successfully lit cigarette")
|
|
return true
|
|
end
|
|
|
|
function fire_source_binder:western_goods_on_hideout_furniture_light_use(obj_id)
|
|
-- Return if light is already on
|
|
if hf_obj_manager.get_data(obj_id).is_on then
|
|
dbg_printf("[WG] Fire Source Binder | Use HF Light - Failed to turn on light, it is already on")
|
|
return false
|
|
end
|
|
|
|
-- Override "missing tool" message
|
|
actor_menu.set_msg(1, "", 5)
|
|
|
|
hf_obj_manager.update_data(obj_id, { is_on = true })
|
|
dbg_printf("[WG] Fire Source Binder | Use HF Light - Successfully turned on light")
|
|
return true
|
|
end |