landsandboat/scripts/globals/interaction/quest.lua
claywar 61f9a40559
[lls] Move quest definitions to generic Container, add TMission type
Fix ordering for Container sections, correct overload

break out remaining overload definitions
2024-09-07 09:06:18 -04:00

69 lines
1.7 KiB
Lua

-----------------------------------
-- Quest class
-----------------------------------
require('scripts/globals/interaction/container')
-----------------------------------
---@see TInteractionContainer
---@class TQuest : TInteractionContainer
---@field areaId xi.questLog
---@field questId integer
Quest = setmetatable({ areaId = 0 }, { __index = Container })
Quest.__index = Quest
Quest.__eq = function(q1, q2)
return q1.areaId == q2.areaId and q1.questId == q2.questId
end
---@type rewardParam
Quest.reward = {}
---@type TQuestSection[]
Quest.sections = {}
---@nodiscard
---@param areaId xi.questLog
---@param questId integer
---@return TQuest
function Quest:new(areaId, questId)
local obj = Container:new(Quest.getVarPrefix(areaId, questId))
setmetatable(obj, self)
obj.areaId = areaId
obj.questId = questId
return obj
end
---@nodiscard
---@param areaId xi.questLog
---@param questId integer
---@return string
function Quest.getVarPrefix(areaId, questId)
return string.format('Quest[%d][%d]', areaId, questId)
end
---@nodiscard
---@param player CBaseEntity
---@return table<xi.questStatus>
function Quest:getCheckArgs(player)
return { player:getQuestStatus(self.areaId, self.questId) }
end
-----------------------------------
-- Quest operations
-----------------------------------
---@param player CBaseEntity
---@return nil
function Quest:begin(player)
player:addQuest(self.areaId, self.questId)
end
---@param player CBaseEntity
---@return boolean
function Quest:complete(player)
local didComplete = npcUtil.completeQuest(player, self.areaId, self.questId, self.reward)
if didComplete then
self:cleanup(player)
end
return didComplete
end