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
92
93
94
95
96
97
98
99
|
local meta = FindMetaTable("Player")
if (SERVER) then
util.AddNetworkString("UpdateInventory")
function meta:UpdateSlot(id)
if (!self.Inventory[id]) then return end
net.Start("UpdateInventory")
net.WriteUInt(id,5)
net.WriteString(self.Inventory[id].Name)
net.WriteUInt(self.Inventory[id].Quantity,32)
net.Send(self)
end
function meta:AddItem(item,quantity)
local Item = GetItemByName(item)
if (!Item) then return end
if (!self.Inventory) then self.Inventory = {} end
--First search for existing items
for i = 1,MAIN_MAX_SLOTS do
if (self.Inventory[i] and self.Inventory[i].Name == item) then
self.Inventory[i].Quantity = self.Inventory[i].Quantity+quantity
self:UpdateSlot(i)
return
end
end
--If it hasnt found any existing item, find an empty spot
for i = 1,MAIN_MAX_SLOTS do
if (!self.Inventory[i]) then
self.Inventory[i] = {Name = item,Quantity = quantity}
self:UpdateSlot(i)
return
end
end
end
function meta:RemoveItem(item,quantity)
for i = 1,MAIN_MAX_SLOTS do
if (self.Inventory[i] and self.Inventory[i].Name == item) then
if (self.Inventory[i].Quantity > quantity) then
self.Inventory[i].Quantity = self.Inventory[i].Quantity-quantity
self:UpdateSlot(i)
return
else
quantity = quantity - self.Inventory[i].Quantity
self.Inventory[i].Quantity = 0
self:UpdateSlot(i)
self.Inventory[i] = nil
if (quantity > 0) then self:RemoveItem(item,quantity) return end
end
end
end
end
else
net.Receive("UpdateInventory",function()
local pl = LocalPlayer()
if (!pl.Inventory) then pl.Inventory = {} end
local ID = net.ReadUInt(5)
pl.Inventory[ID] = {Name = net.ReadString(),Quantity = net.ReadUInt(32)}
if (pl.Inventory[ID].Quantity <= 0) then pl.Inventory[ID] = nil end
ReloadInventory()
end)
end
function meta:GetInventory()
return self.Inventory or {}
end
function meta:HasItem(name,quantity)
if (!self.Inventory) then return end
quantity = quantity or 1
for k,v in pairs(self.Inventory) do
if (v.Name == name and v.Quantity >= quantity) then
return k
end
end
return false
end
function meta:GetSlot(id)
return (self.Inventory and self.Inventory[id]) or nil
end
|