function is_condlist_true(condlist_str, npc)
	if (condlist_str and condlist_str ~= "") then
		local precond_list = xr_logic.parse_condlist(npc, nil, "precondition", condlist_str)
		if (precond_list == "false") then
			return false
		end
		if (db.actor and xr_logic.pick_section_from_condlist(db.actor, npc, precond_list) == "false") then
			return false
		end
	end
	return true
end

igi_precondition.conditions.condlist = function (cond)
	---@type game_object
    local npc = mob_trade.GetTalkingNpc()

	---@type string
    local precond_string = cond.value

	-- Replace '[taskgiver.section]' with the task giver's section
	precond_string = precond_string:gsub("%[taskgiver.section%]", npc:section())

	return is_condlist_true(precond_string, npc)
end

---@param cond {uid: string, maximum: number}
igi_precondition.conditions.repeats = function (cond)
	---@type game_object
    local npc = mob_trade.GetTalkingNpc()

	local precond_max_str = ("{%s_%s_complete_%s} true, false"):format(npc:section(), cond.uid, cond.maximum)

	return is_condlist_true(precond_max_str, npc)
end