aboutsummaryrefslogtreecommitdiff
path: root/gamemode/questsystem
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/questsystem')
-rw-r--r--gamemode/questsystem/component_gather.lua12
-rw-r--r--gamemode/questsystem/component_kill.lua67
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)