diff options
Diffstat (limited to 'gamemode/questsystem')
| -rw-r--r-- | gamemode/questsystem/component_gather.lua | 12 | ||||
| -rw-r--r-- | gamemode/questsystem/component_kill.lua | 67 |
2 files changed, 78 insertions, 1 deletions
diff --git a/gamemode/questsystem/component_gather.lua b/gamemode/questsystem/component_gather.lua index 5647f42..cc7f44f 100644 --- a/gamemode/questsystem/component_gather.lua +++ b/gamemode/questsystem/component_gather.lua @@ -8,6 +8,12 @@ local comp = {} comp.Name = "Quest Component Gather" +--[[ +Update this quest, this is called every time a player +picks up an item. This method removes the items from the player, then +adds them back in (so dropping an item and picking it up x number of times +will not work. +]] function comp:Update() if SERVER then local items = {} @@ -49,6 +55,10 @@ function comp:Init(ply,itemname,itemnumber) log.debug("After initalizing quest, found " .. tostring(self.items) .. " items") end +--[[ +Detour the player's GiveItem(), to check if the quest is +complete after giving the player the item +]] if SERVER then local plymeta = FindMetaTable("Player") local det = plymeta.GiveItem @@ -56,7 +66,7 @@ if SERVER then det(self,tbl) log.debug("Calling component_gather's GiveItem()") for k,v in pairs(quests) do - if v.ItemName == tbl.Name then + if v.Name == comp.Name and v.ItemName == tbl.Name then v:Update() end end diff --git a/gamemode/questsystem/component_kill.lua b/gamemode/questsystem/component_kill.lua index 3925a12..b1ffa71 100644 --- a/gamemode/questsystem/component_kill.lua +++ b/gamemode/questsystem/component_kill.lua @@ -1,3 +1,70 @@ --[[ Something to stop gmod from freaking out ]] +if SERVER then + inv = nrequire("sv_invtracker.lua") +end +local log = nrequire("log.lua") + +local quests = {} +local comp = {} + +comp.Name = "Quest Component Kill" +comp.kills = 0 +comp.npcname = "Init not yet called" + +function comp:Update() + self.Quest:UpdateCompleted() +end + +function comp:Complete() + if self.kills >= self.numkills then + log.debug("Completed a gather arc of a quest!") + end + return self.items >= self.ItemNumber +end + +function comp:Init(ply,npcname,numkills) + if not ply or not itemname or not itemnumber then log.error("Tried to create a kill arch for a quest without correct arguments") end + self.npcname = itemname + self.kills = 0 + self.numkills = 0 + if CLIENT then return end + self.Owner = ply + -- self:Update() + quests[#quests + 1] = self +end + +--[[ +Detour the player's GiveItem(), to check if the quest is +complete after giving the player the item +]] +if SERVER then + local plymeta = FindMetaTable("Player") + local det = plymeta.GiveItem + function plymeta:GiveItem(tbl) + det(self,tbl) + log.debug("Calling component_gather's GiveItem()") + for k,v in pairs(quests) do + if v.Name == comp.Name and v.ItemName == tbl.Name then + v:Update() + end + end + end +end + +function comp:GetText() + return string.format("Gather %s %s",self.ItemNumber,self.ItemName) +end + +function comp:Serialize() + return util.TableToJSON({self.ItemName,self.ItemNumber}) +end + +function comp:DeSerialize(data) + local tbl = util.JSONToTable(data) + self.ItemName = tbl[1] + self.ItemNumber = tbl[2] +end + +nrequire("core/quests/arcs.lua").RegisterArc(comp) |
