From 154aa39e820b32878a514c3cf1410043d26fcc08 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Mon, 7 Mar 2016 16:27:49 -0500 Subject: Fixing bug with AccountInv not synchronizeing correctly, blame garry --- gamemode/shared/player_accountinventory.lua | 45 +++++++++++++++-------------- 1 file changed, 23 insertions(+), 22 deletions(-) (limited to 'gamemode/shared') diff --git a/gamemode/shared/player_accountinventory.lua b/gamemode/shared/player_accountinventory.lua index 2a1b684..4bb7fad 100644 --- a/gamemode/shared/player_accountinventory.lua +++ b/gamemode/shared/player_accountinventory.lua @@ -3,34 +3,34 @@ local meta = FindMetaTable("Player") if (SERVER) then util.AddNetworkString("UpdateAccountInventory") - + function meta:UpdateAccountSlot(id) if (!self.AccountInv[id]) then return end - + net.Start("UpdateAccountInventory") net.WriteUInt(id,5) net.WriteString(self.AccountInv[id].Name) net.WriteUInt(self.AccountInv[id].Quantity,32) net.Send(self) end - + function meta:AddAccountItem(item,quantity) local Item = GetItemByName(item) - + if (!Item) then return end if (!self.AccountInv) then self.AccountInv = {} end - + --First search for existing items - for i = 1,MAIN_MAX_SLOTS do + for i = 1,MAIN_MAX_SLOTS do if (self.AccountInv[i] and self.AccountInv[i].Name == item) then self.AccountInv[i].Quantity = self.AccountInv[i].Quantity+quantity self:UpdateAccountSlot(i) return end end - + --If it hasnt found any existing item, find an empty spot - for i = 1,MAIN_MAX_SLOTS do + for i = 1,MAIN_MAX_SLOTS do if (!self.AccountInv[i]) then self.AccountInv[i] = {Name = item,Quantity = quantity} self:UpdateAccountSlot(i) @@ -38,9 +38,9 @@ if (SERVER) then end end end - + function meta:RemoveAccountItem(item,quantity) - for i = 1,MAIN_MAX_SLOTS do + for i = 1,MAIN_MAX_SLOTS do if (self.AccountInv[i] and self.AccountInv[i].Name == item) then if (self.AccountInv[i].Quantity > quantity) then self.AccountInv[i].Quantity = self.AccountInv[i].Quantity-quantity @@ -48,13 +48,13 @@ if (SERVER) then return else quantity = quantity - self.AccountInv[i].Quantity - + self.AccountInv[i].Quantity = 0 - + self:UpdateAccountSlot(i) - + self.AccountInv[i] = nil - + if (quantity > 0) then self:RemoveAccountItem(item,quantity) return end end end @@ -63,14 +63,15 @@ if (SERVER) then else net.Receive("UpdateAccountInventory",function() local pl = LocalPlayer() - + if (!pl.AccountInv) then pl.AccountInv = {} end - + local ID = net.ReadUInt(5) + if(not pl.AccountInv) then return end pl.AccountInv[ID] = {Name = net.ReadString(),Quantity = net.ReadUInt(32)} - + if (pl.AccountInv[ID].Quantity <= 0) then pl.AccountInv[ID] = nil end - + ReloadAccountMenu() end) end @@ -81,18 +82,18 @@ end function meta:HasAccountItem(name,quantity) if (!self.AccountInv) then return end - + quantity = quantity or 1 - + for k,v in pairs(self.AccountInv) do if (v.Name == name and v.Quantity >= quantity) then return k end end - + return false end function meta:GetAccountSlot(id) return (self.AccountInv and self.AccountInv[id]) or nil -end \ No newline at end of file +end -- cgit v1.2.3-70-g09d2