summaryrefslogtreecommitdiff
path: root/UsefullLuaSnippets/shared_xp.lua
blob: c7e09ea4f5b552dda886542f099292b0959fdb3f (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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
--> Inherited from Old Age 2 scripts made by The Maw. <--

local meta = FindMetaTable("Player")

if (SERVER) then
	util.AddNetworkString("SetXP")
	util.AddNetworkString("SetupLeveling")
	util.AddNetworkString("SetLevel")

	function meta:AddXP(xp)
		if (!self.xp) then self.xp = 0 end
		if (!self.Level) then self.Level = 1 end
		
		self.xp = self.xp + xp
		
		self:RecalcLevel()
		
		net.Start("SetXP")
			net.WriteEntity(self)
			net.WriteLong(self.xp)
		net.Broadcast() --Think ill be sending this to everyone :)
	end
	
	function meta:SetupPlayer(xp,level)
		net.Start("SetupLeveling")
			net.WriteEntity(self)
			net.WriteLong(xp)
			net.WriteByte(level)
		net.Broadcast()
		
		self.xp 	= xp
		self.Level 	= level
	end
	
	
	
	function meta:RecalcLevel()
		if (!self.xp) then return 1 end
		if (!self.Level) then self.Level = 1 end
		
		local Level = self.Level
		
		repeat
			local XP = 178 + Level^2 * (22*Level)
			
			if (self.xp >= XP) then Level = Level+1 self.xp = self.xp-XP end
		until (self.xp < XP or Level > 90)
		
		if (Level != self.Level) then 
			self:AddNote("Level up! :D")
			self.Level = Level
			
			net.Start("SetLevel")
				net.WriteEntity(self)
				net.WriteByte(self.Level)
			net.Broadcast()
			
			--LEVELUP!
		end
	end
else
	net.Receive("SetXP",function(size) net.ReadEntity().xp = net.ReadLong() end)
	net.Receive("SetLevel",function(size) net.ReadEntity().Level = net.ReadByte() end)
	
	net.Receive("SetupLeveling",function(size)
		local Ply 	= net.ReadEntity()
		
		Ply.xp 		= net.ReadLong()
		Ply.Level 	= net.ReadByte()
	end)
end

function meta:GetXP()
	return self.xp or 0
end

function meta:GetLevel()
	return self.Level or 1
end

function meta:GetRequiredXP()
	local Level = self:GetLevel()
	return (178 + Level^2 * (22*Level))
end