Divergent/mods/Hideout Furniture Fix/gamedata/scripts/placeable_items_trade.script

57 lines
2.0 KiB
Plaintext

---@param npc game_object
local function generate_trade_table(npc)
local ini_trades = ini_file("items\\settings\\hideout_furniture\\trade\\trades.ltx")
local trade_table = {}
local npc_faction = npc:character_community() or "stalker" --trader_autoinject.get_real_community(npc, "stalker")
local npc_supply_level = trader_autoinject.supply_level(npc, true) or 1
local ignore_faction_restrictions = ui_mcm.get("aol_hf/gameplay/uniform_trade_profiles") or false
ini_trades:section_for_each(function(section)
-- Check if NPC meets required supply level
local min_supply_level = ini_trades:r_float_ex(section, "min_supply_level", 1)
if min_supply_level > npc_supply_level then return end
-- Check if NPC is in a valid faction
local factions = ini_trades:r_list(section, "factions", "all")
local is_faction_valid = false
if ignore_faction_restrictions then
is_faction_valid = true
else
for _, faction in pairs(factions) do
if faction == npc_faction or faction == "all" then
is_faction_valid = true
break
end
end
end
if not is_faction_valid then return end
-- Add items to trade table
local items = ini_trades:r_list(section, "items")
for _, item in pairs(items) do
local amount = ini_trades:r_float(section, "amount") or 1
trade_table[item] = amount
end
end)
return trade_table
end
function spawn_items(npc)
local is_supplier = trader_autoinject.get_trader_type(npc) == trader_autoinject.SUPPLIER
if not is_supplier then return end
local trade_table = generate_trade_table(npc)
if not trade_table then return end
trader_autoinject.spawn_items(npc, trade_table, true)
end
TraderAuto = trader_autoinject.update
function trader_autoinject.update(npc)
TraderAuto(npc)
spawn_items(npc)
end