aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-08-21 17:52:42 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-08-21 17:52:42 -0400
commit5e6e88f98300d4c3d41aad7cff5346539f4f9f66 (patch)
treebc5de00f63a8b1d5226b0c2988fcdaa06f6e2f13
parent978909d830dd173f8b018f36c5f142d225732ba1 (diff)
downloadartery-5e6e88f98300d4c3d41aad7cff5346539f4f9f66.tar.gz
artery-5e6e88f98300d4c3d41aad7cff5346539f4f9f66.tar.bz2
artery-5e6e88f98300d4c3d41aad7cff5346539f4f9f66.zip
Fixed loading bug
Fixed a bug where the equipment inventory would not load correctly.
-rw-r--r--gamemode/client/qtabs/cl_qinventory.lua7
-rw-r--r--gamemode/core/database/sv_queries.lua9
-rw-r--r--gamemode/core/database/sv_setup.lua28
-rw-r--r--gamemode/core/inventory/inventory.lua5
-rw-r--r--gamemode/core/inventory/sv_invtracker.lua3
-rw-r--r--gamemode/core/mapstich/sv_mapstich.lua10
-rw-r--r--gamemode/inventorysystem/equipment/cl_equipment.lua3
-rw-r--r--gamemode/inventorysystem/equipment/sh_equipment.lua19
-rw-r--r--gamemode/server/sv_mapchange.lua54
9 files changed, 70 insertions, 68 deletions
diff --git a/gamemode/client/qtabs/cl_qinventory.lua b/gamemode/client/qtabs/cl_qinventory.lua
index 2879ac5..2ae70a2 100644
--- a/gamemode/client/qtabs/cl_qinventory.lua
+++ b/gamemode/client/qtabs/cl_qinventory.lua
@@ -10,6 +10,7 @@ local q = {}
local known_inventories = {}
local inventory_frames = {}
local invsheet
+q.known_inventories = known_inventories
local drawfloatinginventory = function(id, inventory)
--print("Drawing a floating inventory!")
@@ -65,13 +66,9 @@ net.Receive("art_ObserveInventory",function()
local datalen = net.ReadUInt(32)
local inital_data = net.ReadData(datalen)
local ownent = net.ReadEntity()
- --print("Owning ent of this inventory is", ownent)
assert(known_inventories[id] == nil, "Trying to observe the same inventory twice!",id)
- local tinv = inv.CreateInventoryFromData(inv_type,inital_data)
- tinv.Owner = ownent
+ local tinv = inv.CreateInventoryFromData(inv_type,inital_data,ownent)
tinv.id = id
- --print("Created new inventory:")
- --PrintTable(tinv)
known_inventories[id] = tinv
if id > 10 then
drawfloatinginventory(id,tinv)
diff --git a/gamemode/core/database/sv_queries.lua b/gamemode/core/database/sv_queries.lua
index 4e48255..f059b44 100644
--- a/gamemode/core/database/sv_queries.lua
+++ b/gamemode/core/database/sv_queries.lua
@@ -11,19 +11,21 @@ function q.serialize_player(ply)
local sdata = {}
local invs = {}
for k,v in pairs(ply.data.inventories) do
- invs[k] = {v.Name,v:Serialize()}
+ local idata = string.format("%q",v:Serialize())
+ invs[k] = {v.Name,string.sub(idata,2,#idata-1)} --remove the otter quotes
end
sdata.inventories = invs
sdata.skills = ply.data.skills
sdata.quests = ply.data.quests
sdata.prayers = ply.data.prayers
sdata.credits = ply.data.credits
- return util.TableToJSON(sdata)
+ local ret = util.TableToJSON(sdata)
+ return ret
end
function q.deserialize_player(ply,str)
- print("Deseriailizeing player",ply," with ", str)
track.ClearInventories(ply)
+ ply.data = ply.data or {}
local tbl = util.JSONToTable(str)
local invs = tbl.inventories
print("Inventories was", invs)
@@ -32,7 +34,6 @@ function q.deserialize_player(ply,str)
print("Giveing inventory",v[1],v[2])
track.GiveInventoryWithData(ply,v[1],v[2])
end
- ply.data = ply.data or {}
ply.data.skills = tbl.skills or {}
ply.data.quests = tbl.quests or {}
ply.data.prayers = tbl.prayers or {}
diff --git a/gamemode/core/database/sv_setup.lua b/gamemode/core/database/sv_setup.lua
index 607c7be..6a7548d 100644
--- a/gamemode/core/database/sv_setup.lua
+++ b/gamemode/core/database/sv_setup.lua
@@ -52,35 +52,22 @@ function sql.GetPlayerData(ply)
local s64 = ply:SteamID64()
local q_str = q.s_fmt(fetch_player_query,s64)
local q_suc = function(res,li)
- --print("Got player's data:",res,type(res))
+ print("Got player's data:",res,type(res))
if res == nil then
- --print("Was nil, createing player data")
+ print("Was nil, createing player data")
sql.CreatePlayerTable(ply)
else
- --PrintTable(res)
assert(#res == 1,"Not unique!")
- --print("Was unique!")
local meta = res[1].MetaData
local plyd = res[1].PlayerData
local mtbl = util.JSONToTable(meta)
- --print("About to check if we are on the right server")
+ print("About to check if we are on the right server")
if mtbl.lastserver ~= game.GetIPAddress() then
- --print("Connecting player to ", mtbl.lastserver, " was on ", game.GetIPAddress())
+ print("Connecting player to ", mtbl.lastserver, " was on ", game.GetIPAddress())
ply:ConCommand("connect " .. mtbl.lastserver)
return
end
- --print("We were on the right server")
-
- --print("Before finding data in the metatable, mtbl was ")
- --PrintTable(mtbl)
- --print(type(mtbl.lastlocation))
- local _,_,x,y,z = string.find(mtbl.lastlocation,"([-%d%.]+) ([-%d%.]+) ([-%d%.]+)")
- local vec = {x,y,z}
- for k,v in pairs(vec) do vec[k] = tonumber(v) end
- --print("setting player pos to")
- --PrintTable(vec)
-
- ply:SetPos(Vector(unpack(vec)))
+ ply:SetPos(mtbl.lastlocation)
q.deserialize_player(ply,plyd)
end
end
@@ -88,6 +75,11 @@ function sql.GetPlayerData(ply)
MySQLite.query(q_str,q_suc,q_fai)
end
+concommand.Add("artery_loadplayer",function(ply,cmd,args)
+ if not ply:IsAdmin() then return end
+ sql.GetPlayerData(ply)
+end)
+
function sql.CreatePlayerTable(ply)
--print("Createing player table....")
local s64 = ply:SteamID64()
diff --git a/gamemode/core/inventory/inventory.lua b/gamemode/core/inventory/inventory.lua
index f28cc18..5ff4c10 100644
--- a/gamemode/core/inventory/inventory.lua
+++ b/gamemode/core/inventory/inventory.lua
@@ -4,7 +4,7 @@
Registers a new inventory prototype, see below
CreateInventory(string_name) ::table_inventory
Creates a new inventory be sure to set the .owner and .id fields!
- CreateInventoryFromData(string_name,string_data)::table_inventory)
+ CreateInventoryFromData(string_name,string_data,entity_owner)::table_inventory)
Just deserializes an inventory. You still need to set .owner and .id!
DeriveInventory(string_name) ::table_inventory
Creates a new inventory from an old, allows for heiarchy.
@@ -144,8 +144,9 @@ function inv.CreateInventory(name)
end
--Recreates an inventory from data
-function inv.CreateInventoryFromData(name,data)
+function inv.CreateInventoryFromData(name,data,owner)
local tinv = inv.CreateInventory(name)
+ tinv.Owner = owner
--print("tinv was", tinv)
--PrintTable(tinv)
local ret = tinv:DeSerialize(data)
diff --git a/gamemode/core/inventory/sv_invtracker.lua b/gamemode/core/inventory/sv_invtracker.lua
index c60298c..bb5aba6 100644
--- a/gamemode/core/inventory/sv_invtracker.lua
+++ b/gamemode/core/inventory/sv_invtracker.lua
@@ -171,10 +171,9 @@ end
function track.GiveInventoryWithData(ply,name,data)
print("Giveing inventory with data")
- local i = inv.CreateInventoryFromData(name,data)
+ local i = inv.CreateInventoryFromData(name,data,ply)
local nid = #ply.data.inventories + 1
local observer = track.MakeInventoryObserver(ply,nid)
- i.Owner = ply
i.id = nid
i:AddObserver(observer)
ply.data.inventories[nid] = i
diff --git a/gamemode/core/mapstich/sv_mapstich.lua b/gamemode/core/mapstich/sv_mapstich.lua
index 93f8667..121c0c9 100644
--- a/gamemode/core/mapstich/sv_mapstich.lua
+++ b/gamemode/core/mapstich/sv_mapstich.lua
@@ -19,7 +19,7 @@ local function SavePlayerData(ply)
query = q.s_fmt(query,pdat,ply:SteamID64())
else
query = [[
- UPDATE playerdata SET PlayerData='%s' MetaData='%s' WHERE SteamID=%.0f
+ UPDATE playerdata SET PlayerData='%s', MetaData='%s' WHERE SteamID=%.0f
]]
local pmet = util.TableToJSON({
lastserver = game.GetIPAddress(),
@@ -36,6 +36,10 @@ local function SavePlayerData(ply)
end)
end
+concommand.Add("artery_saveplayer",function(ply,cmd,args)
+ SavePlayerData(ply)
+end)
+
net.Receive("art_zonechange",function(len,ply)
timer.Simple(0.5,function()
@@ -68,3 +72,7 @@ net.Receive("art_zonechange",function(len,ply)
end
end)
end)
+
+hook.Add("PlayerDisconnected","save_data_on_disconnect",function(ply)
+ SavePlayerData(ply)
+end)
diff --git a/gamemode/inventorysystem/equipment/cl_equipment.lua b/gamemode/inventorysystem/equipment/cl_equipment.lua
index 57a07ad..ca03bf6 100644
--- a/gamemode/inventorysystem/equipment/cl_equipment.lua
+++ b/gamemode/inventorysystem/equipment/cl_equipment.lua
@@ -126,6 +126,9 @@ inv.DrawOnDPanel = function(self,panel)
if self.equiped[k].OnEqpPaint then
pn.PaintOver = self.equiped[k].OnEqpPaint
end
+ if self.equiped[k].DoOnEquipPanel then
+ self.equiped[k]:DoOnEquipPanel(pn)
+ end
else --We don't have something equiped!
if v.img and v.img.material then
local c = col.ui.border
diff --git a/gamemode/inventorysystem/equipment/sh_equipment.lua b/gamemode/inventorysystem/equipment/sh_equipment.lua
index 8dc9442..7095363 100644
--- a/gamemode/inventorysystem/equipment/sh_equipment.lua
+++ b/gamemode/inventorysystem/equipment/sh_equipment.lua
@@ -112,20 +112,21 @@ inv.Serialize = function(self)
tbl[k] = {v.Name, v:Serialize()}
end
end
- return util.TableToJSON(tbl)
+ local ret = util.TableToJSON(tbl)
+ return ret
end
inv.DeSerialize = function(self,data)
- if data ~= nil and data ~= "" then
- local tbl = util.JSONToTable(data)
- local cpy = table.Copy(self)
- for k,v in pairs(tbl) do
- cpy.equiped[k] = itm.GetItemByName(v[1]):DeSerialize(v[2])
- end
- return cpy
- else
+ if data == nil or data == '' then
return table.Copy(self)
end
+ local tbl = util.JSONToTable(data)
+ local cpy = table.Copy(self)
+ for k,v in pairs(tbl) do
+ local te = itm.GetItemByName(v[1]):DeSerialize(v[2])
+ cpy:Put({k},te)
+ end
+ return cpy
end
inventory.RegisterInventory(inv)
diff --git a/gamemode/server/sv_mapchange.lua b/gamemode/server/sv_mapchange.lua
index 7bcdb9c..f83fd72 100644
--- a/gamemode/server/sv_mapchange.lua
+++ b/gamemode/server/sv_mapchange.lua
@@ -67,33 +67,33 @@ hook.Add("InitPostEntity", "LoadMapChangePoints", function()
end)
]=]
-local function SavePlayerData(ply)
- local query
- local pdat = q.serialize_player(ply)
- if dontupdatedisconnect[ply] then
- dontupdatedisconnect[ply] = nil
- query = [[
- UPDATE playerdata SET PlayerData='%s' WHERE SteamID=%.0f
- ]]
- query = q.s_fmt(query,pdat,ply:SteamID64())
- else
- query = [[
- UPDATE playerdata SET PlayerData='%s' MetaData='%s' WHERE SteamID=%.0f
- ]]
- local pmet = util.TableToJSON({
- lastserver = game.GetIPAddress(),
- lastlocation = ply:GetPos()
- })
- query = q.s_fmt(query,pdat,pmet,ply:SteamID64())
- end
- MySQLite.query(query,function(data)
-
- end,function(err,sql)
- print("Query error:")
- print("Query",sql)
- print("Error",err)
- end)
-end
+-- local function SavePlayerData(ply)
+-- local query
+-- local pdat = q.serialize_player(ply)
+-- if dontupdatedisconnect[ply] then
+-- dontupdatedisconnect[ply] = nil
+-- query = [[
+-- UPDATE playerdata SET PlayerData='%s' WHERE SteamID=%.0f
+-- ]]
+-- query = q.s_fmt(query,pdat,ply:SteamID64())
+-- else
+-- query = [[
+-- UPDATE playerdata SET PlayerData='%s' MetaData='%s' WHERE SteamID=%.0f
+-- ]]
+-- local pmet = util.TableToJSON({
+-- lastserver = game.GetIPAddress(),
+-- lastlocation = ply:GetPos()
+-- })
+-- query = q.s_fmt(query,pdat,pmet,ply:SteamID64())
+-- end
+-- MySQLite.query(query,function(data)
+--
+-- end,function(err,sql)
+-- print("Query error:")
+-- print("Query",sql)
+-- print("Error",err)
+-- end)
+-- end
--[=[
hook.Add("PlayerDisconnected","SavePlayerData",function(ply)