aboutsummaryrefslogtreecommitdiff
path: root/gamemode/questsystem/component_kill.lua
blob: b1ffa71449427158f80f496ae62e7b0a1d63ce82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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)