aboutsummaryrefslogtreecommitdiff
path: root/gamemode
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-05-20 11:37:23 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-05-20 11:37:23 -0400
commitc6698dad925e75ffd2ca2f2e30a595d4ce48d240 (patch)
tree226338dc7ee26a6316951554cf953112ba072c76 /gamemode
parent9e0537b0aa417e88a6a61238484ddcef74080ae0 (diff)
downloadartery-c6698dad925e75ffd2ca2f2e30a595d4ce48d240.tar.gz
artery-c6698dad925e75ffd2ca2f2e30a595d4ce48d240.tar.bz2
artery-c6698dad925e75ffd2ca2f2e30a595d4ce48d240.zip
Massive changes I guess
Diffstat (limited to 'gamemode')
-rw-r--r--gamemode/client/cl_inventory.lua22
-rw-r--r--gamemode/client/qpanels/inventory.lua4
-rw-r--r--gamemode/client/qtabs/cl_qinventory.lua40
-rw-r--r--gamemode/core/database/sv_setup.lua44
-rw-r--r--gamemode/core/inventory/inventory.lua20
-rw-r--r--gamemode/core/inventory/item.lua31
-rw-r--r--gamemode/core/inventory/sv_invtracker.lua13
-rw-r--r--gamemode/core/npc/cl_shop.lua11
-rw-r--r--gamemode/core/npc/sv_npcsystem.lua12
-rw-r--r--gamemode/core/pac/sv_pac.lua37
-rw-r--r--gamemode/inventorysystem/cl_common.lua3
-rw-r--r--gamemode/inventorysystem/equipment/cl_equipment.lua22
-rw-r--r--gamemode/inventorysystem/equipment/sh_equipment.lua4
-rw-r--r--gamemode/inventorysystem/shapedinventory/cl_shaped.lua29
-rw-r--r--gamemode/inventorysystem/shapedinventory/sh_shaped.lua20
-rw-r--r--gamemode/itemsystem/armor/balaclava.lua2
-rw-r--r--gamemode/itemsystem/exampleitem.lua2
-rw-r--r--gamemode/itemsystem/utility/flashlight.lua2
-rw-r--r--gamemode/itemsystem/weapons/knuckledclaw.lua2
-rw-r--r--gamemode/itemsystem/weapons/rustyaxe.lua2
-rw-r--r--gamemode/itemsystem/weapons/seratedknife.lua2
-rw-r--r--gamemode/nrequire.lua41
22 files changed, 201 insertions, 164 deletions
diff --git a/gamemode/client/cl_inventory.lua b/gamemode/client/cl_inventory.lua
index 7fab07c..758f9b1 100644
--- a/gamemode/client/cl_inventory.lua
+++ b/gamemode/client/cl_inventory.lua
@@ -14,7 +14,7 @@ local itm = nrequire("core/inventory/common/items.lua")
--local qpray = nrequire("cl_qprayers.lua")
local inv = {}
-print("Hello from cl_inventory.lua")
+--print("Hello from cl_inventory.lua")
--debug.Trace()
local prayerequiped = {
@@ -22,7 +22,7 @@ local prayerequiped = {
}
net.Receive("equiphelpprayer",function()
- print("equiphelp received client side!")
+ --print("equiphelp received client side!")
prayerequiped[4] = "Noob Help"
end)
@@ -39,17 +39,17 @@ local droppanel --Dpanel to drop things on when they are dropped, should be the
local player_data --The data the player needs to show the q panel
net.Receive("art_load_player_data",function()
- print("Got player data")
+ --print("Got player data")
player_data = net.ReadTable()
- print("It was")
- PrintTable(player_data)
+ --print("It was")
+ --PrintTable(player_data)
credits = player_data.credits
- if creditslabel then creditslabel:SetText(credits) end
- print("Credits was", credits)
+ if creditslabel then creditslabel:SetText(credits or 0) end
+ --print("Credits was", credits)
end)
local function BuildInventory()
- print("Building inventory")
+ --print("Building inventory")
if qframe and IsValid(qframe) then return end
if not player_data then print("no player data!") player_data = {credits = 0} end
qframe = vgui.Create("DFrame")
@@ -94,7 +94,7 @@ local function BuildInventory()
end
function inv.ShowInventory()
- print("qframe is ", qframe)
+ --print("qframe is ", qframe)
if not qframe then BuildInventory()
else qframe:Show() end
state.invopen = true
@@ -105,9 +105,9 @@ function inv.ShowInventory()
droppanel:SetAlpha(10)
droppanel:Receiver("item",function(self,panels,dropped,_,_,_)
if not dropped then return end
- print("Dropedpanel had something dropped on it!")
+ --print("Dropedpanel had something dropped on it!")
--Drop the item
- print("Pnl:",pnl)
+ --print("Pnl:",pnl)
local froment = panels[1].info.owner
local fromid = panels[1].info.id
local frompos = panels[1].info.pos
diff --git a/gamemode/client/qpanels/inventory.lua b/gamemode/client/qpanels/inventory.lua
index 2850e1d..b93fd7f 100644
--- a/gamemode/client/qpanels/inventory.lua
+++ b/gamemode/client/qpanels/inventory.lua
@@ -162,8 +162,8 @@ local invsheetfunc = function()
if v.PaintEquiped then
eqslot.Paint = v.PaintEquiped
end
- if v.DoOnEqupPanel then
- v.DoOnEqupPanel(eqslot)
+ if v.DoOnEquipPanel then
+ v.DoOnEquipPanel(eqslot)
end
eqslot:Droppable("Inventory")
eqslot.Item = v
diff --git a/gamemode/client/qtabs/cl_qinventory.lua b/gamemode/client/qtabs/cl_qinventory.lua
index e4dfaa8..6fc3d37 100644
--- a/gamemode/client/qtabs/cl_qinventory.lua
+++ b/gamemode/client/qtabs/cl_qinventory.lua
@@ -12,7 +12,7 @@ local inventory_frames = {}
local invsheet
local drawfloatinginventory = function(id, inventory)
- print("Drawing a floating inventory!")
+ --print("Drawing a floating inventory!")
local frame = vgui.Create("DFrame")
frame:SetPos( 100, 100 )
frame:SetSize( 300, 200 )
@@ -28,8 +28,8 @@ local drawfloatinginventory = function(id, inventory)
end
frame:MakePopup()
frame.OnClose = function(self)
- print("Closeing chest id", id)
- print("entity is", known_inventories[id].Owner)
+ --print("Closeing chest id", id)
+ --print("entity is", known_inventories[id].Owner)
known_inventories[id]:RemoveObserver(self.id)
net.Start("closechestinv")
net.WriteEntity(known_inventories[id].Owner)
@@ -40,20 +40,20 @@ local drawfloatinginventory = function(id, inventory)
end
local drawsheeton = function(id,inventory)
- print("Drawing an inventory on a sheet!")
+ --print("Drawing an inventory on a sheet!")
if invsheet == nil then return end
local tpanel = vgui.Create( "DPanel", invsheet )
--tpanel.Paint = function( self, w, h )
-- draw.RoundedBox( 4, 0, 0, w, h, Color( 0, 128, 255 ) )
--end
if inventory.DrawOnDPanel then
- print("Has drawondpanel")
+ --print("Has drawondpanel")
local prox = inventory:DrawOnDPanel(tpanel)
- print("Prox returned was",prox)
- PrintTable(prox)
+ --print("Prox returned was",prox)
+ --PrintTable(prox)
known_inventories[id]:AddObserver(prox)
- print("Oservers is now")
- PrintTable(known_inventories[id].observers)
+ --print("Oservers is now")
+ --PrintTable(known_inventories[id].observers)
end
invsheet:AddSheet( inventory.Name, tpanel, "icon16/tab.png" )
end
@@ -61,17 +61,17 @@ end
net.Receive("art_ObserveInventory",function()
local id = net.ReadUInt(32)
local inv_type = net.ReadString()
- print("Got inv type", inv_type,"id",id)
+ --print("Got inv type", inv_type,"id",id)
local datalen = net.ReadUInt(32)
local inital_data = net.ReadData(datalen)
local ownent = net.ReadEntity()
- print("Owning ent of this inventory is", ownent)
+ --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
tinv.id = id
- print("Created new inventory:")
- PrintTable(tinv)
+ --print("Created new inventory:")
+ --PrintTable(tinv)
known_inventories[id] = tinv
if id > 10 then
drawfloatinginventory(id,tinv)
@@ -87,15 +87,15 @@ net.Receive("art_UpdateInventory",function()
local position = net.ReadTable()
if isput then
local item_name = net.ReadString()
- print("Putting ", item_name, "into inventory ",id, " at position")
- PrintTable(position)
+ --print("Putting ", item_name, "into inventory ",id, " at position")
+ --PrintTable(position)
local item_data = net.ReadData(net.ReadUInt(32))
local item = itm.GetItemFromData(item_name,item_data)
known_inventories[id]:Put(position,item)
- print("Inventorie's observers:")
- PrintTable(known_inventories[id].observers)
- print("Inventory is now")
- PrintTable(known_inventories[id])
+ --print("Inventorie's observers:")
+ --PrintTable(known_inventories[id].observers)
+ --print("Inventory is now")
+ --PrintTable(known_inventories[id])
else
known_inventories[id]:Remove(position)
end
@@ -117,7 +117,7 @@ q.CreateInventorySheet = function(dpanel_parent)
invsheet:Dock( FILL )
for k,v in pairs(known_inventories) do
- print("This inventory id in known_inventories is", k)
+ --print("This inventory id in known_inventories is", k)
if k <= 10 then
drawsheeton(k,v)
else
diff --git a/gamemode/core/database/sv_setup.lua b/gamemode/core/database/sv_setup.lua
index 2cb69d1..fd44174 100644
--- a/gamemode/core/database/sv_setup.lua
+++ b/gamemode/core/database/sv_setup.lua
@@ -30,15 +30,15 @@ end
local function connect()
- print("Connecting to the database...")
+ --print("Connecting to the database...")
MySQLite.initialize(config)
end
hook.Add("DatabaseInitialized","setup_table",function()
assert(MySQLite.isMySQL(),"Database wasn't mysqloo, something is probably wrong!")
local setup_success = function(res,li)
- print("Set up connection to db")
+ --print("Set up connection to db")
end
- print("Setup query:",setup_db)
+ --print("Setup query:",setup_db)
MySQLite.query(setup_db,setup_success,q_fai)
end)
@@ -52,56 +52,56 @@ 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)
+ --PrintTable(res)
assert(#res == 1,"Not unique!")
- print("Was 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("We were on the right server")
- print("Before finding data in the metatable, mtbl was ")
- PrintTable(mtbl)
- print(type(mtbl.lastlocation))
+ --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)
+ --print("setting player pos to")
+ --PrintTable(vec)
ply:SetPos(Vector(unpack(vec)))
q.deserialize_player(ply,plyd)
end
end
- print("doing query",q_str)
+ --print("doing query",q_str)
MySQLite.query(q_str,q_suc,q_fai)
end
function sql.CreatePlayerTable(ply)
- print("Createing player table....")
+ --print("Createing player table....")
local s64 = ply:SteamID64()
- print("steamid was", s64)
+ --print("steamid was", s64)
local plytbl = data.newdata()
local plymet = data.newmeta()
local plydata = util.TableToJSON(plytbl)
local metdata = util.TableToJSON(plymet)
local q_str = q.s_fmt(create_player_query,s64,plydata,metdata)
local q_suc = function(res,li)
- print("Inserted new player",ply)
+ --print("Inserted new player",ply)
sql.GetPlayerData(ply)
end
- print("doing query", q_str)
+ --print("doing query", q_str)
MySQLite.query(q_str,q_suc,q_fai)
end
@@ -114,7 +114,7 @@ function sql.SendPlayerToInstance(ply,ls,ll)
})
local q_str = q.s_fmt(save_player_query,plymeta,plydata,s64)
local q_suc = function(res,li)
- print("Successfully saved player data")
+ --print("Successfully saved player data")
end
MySQLite.query(q_str,q_suc,q_fai)
end
@@ -131,6 +131,6 @@ concommand.Add("DoQuery",function(ply,cmd,args)
end
end)
-print("In sv_setup.lua, sql before returning is", sql)
+--print("In sv_setup.lua, sql before returning is", sql)
return sql
diff --git a/gamemode/core/inventory/inventory.lua b/gamemode/core/inventory/inventory.lua
index 6b6f6f4..62e4819 100644
--- a/gamemode/core/inventory/inventory.lua
+++ b/gamemode/core/inventory/inventory.lua
@@ -85,8 +85,8 @@ local function SetDefaultObservers(tbl)
local oldput,oldremove = tbl.Put,tbl.Remove
tbl.Put = function(self,position,item)
for k,v in pairs(self.observers) do
- print("Calling put on observer:")
- PrintTable(v)
+ --print("Calling put on observer:")
+ --PrintTable(v)
v:Put(position,item)
end
oldput(self,position,item)
@@ -120,20 +120,20 @@ function inv.RegisterInventory(tbl)
string.format("Attempted to register inventory with field %q of type %q when it should have been %q",v[1],type(tbl[v[1]]),v[2]))
end
assert(inventories[tbl.Name] == nil,
- "Attempted to register 2 inventories with the same name:" .. tbl.Name)
+ string.format("Attempted to register 2 inventories with the same name: %q", tbl.Name))
assert((tbl.AddObserver == nil and tbl.RemoveObserver == nil) or
(tbl.AddObserver ~= nil and tbl.RemoveObserver ~= nil),
- "AddObserver and RemoveObserver must be defined in pairs")
+ "AddObserver and RemoveObserver must be defined in pairs")
if tbl.AddObserver == nil then
SetDefaultObservers(tbl)
end
inventories[tbl.Name] = tbl
- print("Registered inventory: " .. tbl.Name)
+ --print("Registered inventory: " .. tbl.Name)
end
--Create an inventory
function inv.CreateInventory(name)
- print("Createing inventory", name)
+ --print("Createing inventory", name)
assert(inventories[name] ~= nil, string.format("Tried to create a copy of inventory that does not exist:%s\nValid inventories are:\n\t%s",name,table.concat(table.GetKeys(inventories),"\n\t")))
local ret = TableCopy(inventories[name])
ret.observers = {}
@@ -143,11 +143,11 @@ end
--Recreates an inventory from data
function inv.CreateInventoryFromData(name,data)
local tinv = inv.CreateInventory(name)
- print("tinv was", tinv)
- PrintTable(tinv)
+ --print("tinv was", tinv)
+ --PrintTable(tinv)
tinv:DeSerialize(data)
- print("is now",tinv)
- PrintTable(tinv)
+ --print("is now",tinv)
+ --PrintTable(tinv)
return tinv
end
diff --git a/gamemode/core/inventory/item.lua b/gamemode/core/inventory/item.lua
index 103da7f..a13efa9 100644
--- a/gamemode/core/inventory/item.lua
+++ b/gamemode/core/inventory/item.lua
@@ -23,14 +23,19 @@ local required_fields = {
"Name","Serialize","DeSerialize"
}
-local items = {} --Master table of all item prototypes
+local items = items or {} --Master table of all item prototypes
function itm.RegisterItem(tbl)
for k,v in pairs(required_fields) do
assert(tbl[v] ~= nil, string.format("Attempted to register item without field %q",v))
end
- assert(items[tbl.Name] == nil, string.format("Attempted to register 2 items with the same name %q",tbl.Name))
+ --assert(items[tbl.Name] == nil, string.format("Attempted to register 2 items with the same name %q",tbl.Name))
+ if items[tbl.Name] ~= nil then
+ MsgC(Color(255,255,0),"WARNING: attemtpted to register 2 items with the same name " .. tbl.Name .. "\n")
+ else
+ MsgC(Color(0,255,0),"Registered Item " .. tbl.Name .. "\n")
+ end
items[tbl.Name] = tbl
- print("Registered item: " .. tbl.Name)
+ --print("Registered item: " .. tbl.Name)
end
function itm.GetItemByName(name)
@@ -49,11 +54,23 @@ function itm.GetItemFromData(name,data)
return items[name]:DeSerialize(data)
end
+local function printitems()
+ local tbl = {}
+ for k,v in pairs(items) do
+ tbl[#tbl + 1] = k
+ end
+ print(table.concat(tbl,"\n"))
+end
+
--Must be called in a coroutine.
function itm.DeriveItem(tbl,name)
+ print("Attempting to derive item",name)
while items[name] == nil do
+ print("it dosen't exist yet, items are")
+ printitems()
coroutine.yield()
end
+ print(name,"exists!")
--Create a flywieght copy
local ret = tbl
local mt = {
@@ -64,10 +81,8 @@ function itm.DeriveItem(tbl,name)
setmetatable(ret,mt)
end
-concommand.Add("art_printitems",function()
- for k,v in pairs(items) do
- print(k)
- end
-end)
+hook.Call("artery_include_items")
+
+concommand.Add("art_printitems",printitems)
return itm
diff --git a/gamemode/core/inventory/sv_invtracker.lua b/gamemode/core/inventory/sv_invtracker.lua
index 47dd164..56407e2 100644
--- a/gamemode/core/inventory/sv_invtracker.lua
+++ b/gamemode/core/inventory/sv_invtracker.lua
@@ -246,25 +246,26 @@ function track.SendPlayerData(ply)
net.Send(ply)
end
-concommand.Add("SendMeData",function(ply,cmd,args)
+concommand.Add("artery_SendMeData",function(ply,cmd,args)
track.ClearInventories(ply)
track.GiveInventoryTo(ply,"Equipment")
track.SendPlayerData(ply)
end)
-concommand.Add("ShowMyInventories",function(ply,cmd,args)
+concommand.Add("artery_ShowMyInventories",function(ply,cmd,args)
PrintTable(ply.data.inventories)
end)
-concommand.Add("AddInventory",function(ply,cmd,args)
+concommand.Add("artery_AddInventory",function(ply,cmd,args)
track.GiveInventoryTo(ply,args[1])
end)
-concommand.Add("GiveItem",function(ply,cmd,args)
+concommand.Add("artery_GiveItem",function(ply,cmd,args)
xpcall(function()
ply:GiveItem(itm.GetItemByName(args[1]))
- end,function()
- print("Could not find a position to put that in!")
+ end,function(err)
+ print("Could not give that item!:")
+ print(err)
end)
end)
diff --git a/gamemode/core/npc/cl_shop.lua b/gamemode/core/npc/cl_shop.lua
index fa076ce..c2c71bc 100644
--- a/gamemode/core/npc/cl_shop.lua
+++ b/gamemode/core/npc/cl_shop.lua
@@ -52,12 +52,9 @@ local function DrawShopItemOnDPanel(dp,itemtbl,cost)
net.SendToServer()
end
- print("Displaying shape:")
- PrintTable(shape)
for k = 1, twidth do
for i = 1, theight do
if not shape[k][i] then
- print("Found false spot:",k,i)
local emptyslot = vgui.Create("DPanel", dp)
emptyslot:SetSize(slotsize,slotsize)
emptyslot:SetPos(slotsize * (i - 1) + 2, slotsize * (k - 1) + 2)
@@ -81,9 +78,7 @@ local slotsize = math.Round(w / 32)
local function DrawShopOnDPanel(dp,items)
--This gets pretty involved, lets try to not make it a clusterfuck.
dp.Paint = function(self, wi, hi) draw.RoundedBox(4, 0,0,wi,hi,Color(100,0,0)) end
- print("dp",dp)
local scrollpanel = vgui.Create( "DScrollPanel",dp )
- print("scollpanel",scrollpanel)
scrollpanel.Paint = function(self, wi, hi) draw.RoundedBox(4, 0,0,wi,hi,Color(0,0,100)) end
scrollpanel:Dock(FILL)
for k,v in pairs(items) do
@@ -93,13 +88,10 @@ local function DrawShopOnDPanel(dp,items)
draw.RoundedBox(4, 1,1,wi-4,hi-4,Color(50,50,50))
draw.RoundedBox(4, 2,2,wi-5,hi-5,Color(100,100,100))
end
- print("invpanel",invpanel)
DrawShopItemOnDPanel(invpanel,itemtbl,v[2])
scrollpanel:AddItem(invpanel)
invpanel:Dock(TOP)
local x,_ = invpanel:GetSize()
- print("item is",v)
- PrintTable(v)
invpanel:SetSize(x,slotsize * (#itemtbl.Shape) + 4)
invpanel:Dock(TOP)
@@ -110,7 +102,6 @@ end
local shopwindow,shoppanel
local function createshopwindow()
- print("Createing shopwindow")
shopwindow = vgui.Create( "DFrame" )
shopwindow:SetPos( w - (w / 4), 0 )
shopwindow:SetSize( w / 4, h )
@@ -129,10 +120,8 @@ end
createshopwindow()
net.Receive("art_openshop",function()
- print("shopwindows was ",shopwindow)
if not shopwindow:IsValid() then createshopwindow() end
assert(shopwindow,"Shopwindow was not created, even after re-createing!")
- print("inv was", inv)
inv.ShowInventory()
shopwindow:SetVisible(true)
local stock = net.ReadTable()
diff --git a/gamemode/core/npc/sv_npcsystem.lua b/gamemode/core/npc/sv_npcsystem.lua
index 78b041f..c53f6ae 100644
--- a/gamemode/core/npc/sv_npcsystem.lua
+++ b/gamemode/core/npc/sv_npcsystem.lua
@@ -12,7 +12,7 @@ end
function n.CreateNPCByName(npcname, pos)
assert(npcs[npcname],string.format("No npc named %q, valid names are:\n%s",npcname,table.concat(table.GetKeys(npcs),"\n")))
- print("Createing a ", npcname, " at ", pos)
+ --print("Createing a ", npcname, " at ", pos)
local npctbl = npcs[npcname]
local npc = ents.Create("npc_huntable")
npc:SetPos(pos)
@@ -28,13 +28,13 @@ end
--Creates a shop npc with this tbl
function n.CreateShop(npc)
- print("Createing shop npc")
+ --print("Createing shop npc")
local npcent = ents.Create("npc_shop")
for k,v in pairs(npc) do
npcent[k] = v
end
npcent:Spawn()
- print("Called spawn")
+ --print("Called spawn")
end
--Creates a townie npc with this tbl
@@ -87,11 +87,11 @@ local function loadMap()
local foldername = "artery/maps/" .. mapname
ExecuteOnFolder(foldername,true,function(path)
- print("I want to run",path)
+ --print("I want to run",path)
local filetxt = file.Read(path,"DATA")
- print("File text is", filetxt)
+ --print("File text is", filetxt)
CompileString(filetxt,path)()
- print("I want to execute",path)
+ --print("I want to execute",path)
end)
end
diff --git a/gamemode/core/pac/sv_pac.lua b/gamemode/core/pac/sv_pac.lua
index 482dea6..30d2ef7 100644
--- a/gamemode/core/pac/sv_pac.lua
+++ b/gamemode/core/pac/sv_pac.lua
@@ -48,28 +48,42 @@ hook.Add("PrePACConfigApply", "stoppacs", function(ply, outfit_data)
end
end)
+local pacsources = {
+ ["data/artery/pacs/"] = "GAME"
+}
+function p3.AddPacSource(filepath,from)
+ pacsources[filepath] = from
+end
+
--When the server starts, get all the pacs and calculate their hashes so we can index them quickly without haveing to read from disk each time.
local pachashes = {}
local function loadhashes()
- local files,_ = file.Find("artery/pacs/*","DATA")
- for _,v in ipairs(files) do
- local filepath = string.format("artery/pacs/%s",v)
- local filetext = file.Read(filepath,"DATA")
- local filehash = util.CRC(filetext)
- pachashes[string.StripExtension(v)] = tonumber(filehash)
+ for path,part in pairs(pacsources) do
+ local files,_ = file.Find(path.."*",part)
+ for _,v in ipairs(files) do
+ local filepath = string.format("%s%s",path,v)
+ local filetext = file.Read(filepath,part)
+ local filehash = util.CRC(filetext)
+ pachashes[string.StripExtension(v)] = tonumber(filehash)
+ end
end
end
loadhashes()
+concommand.Add("artery_reload_pac_hashes",loadhashes)
local appliedpacs = {}
function p3.ApplyPac(what, name)
- print("Applying pac", what, "to",name)
+ print("Applying pac", name, "to",what)
appliedpacs[what] = appliedpacs[what] or {}
appliedpacs[what][name] = pachashes[name]
net.Start("artery_applypac")
net.WriteEntity(what)
net.WriteString(name)
+ --If this pac is from an addon that was loaded after this file was, we may need to reload hashes.
+ if not pachashes[name] then
+ loadhashes()
+ end
net.WriteUInt(pachashes[name],32)
net.Broadcast()
end
@@ -107,6 +121,7 @@ local pac_cache = {}
local function cacheload(key)
--If it's already in the cache, just update the time it was last used and return the pac.
if pac_cache[key] ~= nil then
+ print("Pac was already in the cache.")
pac_cache[key].time = CurTime()
if pac_cache[key].pac == nil then
PrintTable(pac_cache)
@@ -116,8 +131,9 @@ local function cacheload(key)
end
--Otherwise, we need to load it.
- local pacpath = string.format("artery/pacs/%s.txt",key)
- local pacfile = file.Read(pacpath,"DATA")
+ local pacpath = string.format("data/artery/pacs/%s.txt",key)
+ local pacfile = file.Read(pacpath,"GAME")
+ print("Pac was not in cache, reloading, pac txt is",pacfile)
--If we haven't reached max cache yet, just put it in
if pacs_in_cache < max_pacs_in_cache then
@@ -155,6 +171,9 @@ net.Receive("artery_requestpac",function(ln,ply)
local pac_txt = cacheload(pac_name)
+ assert(pac_name,"Pac's name was nil!")
+ assert(pac_txt, "Pac's txt was nil (from the cache)")
+
net.Start("artery_downloadpac")
net.WriteString(pac_name)
net.WriteString(pac_txt)
diff --git a/gamemode/inventorysystem/cl_common.lua b/gamemode/inventorysystem/cl_common.lua
index 5b461d3..361cf3c 100644
--- a/gamemode/inventorysystem/cl_common.lua
+++ b/gamemode/inventorysystem/cl_common.lua
@@ -1,4 +1,7 @@
+--[[
+ A bunch of functions that a lot of inventories have in common, dragged out here so bugfixing is easier
+]]
local com = {}
--Displays a dropdown of options under the players mouse, if the option is clicked, does the function
diff --git a/gamemode/inventorysystem/equipment/cl_equipment.lua b/gamemode/inventorysystem/equipment/cl_equipment.lua
index 8a14a1a..82560be 100644
--- a/gamemode/inventorysystem/equipment/cl_equipment.lua
+++ b/gamemode/inventorysystem/equipment/cl_equipment.lua
@@ -104,7 +104,7 @@ inv.DrawOnDPanel = function(self,panel)
print("Drawing equipment on panel")
local prox = {}
for k,v in pairs(eqp) do
- local pn = vgui.Create("DButton",panel)
+ local pn = vgui.Create("DModelPanel",panel)
pn:SetSize(iconsize,iconsize)
pn:SetPos(v.x,v.y)
pn.info = {}
@@ -125,13 +125,8 @@ inv.DrawOnDPanel = function(self,panel)
print("Found something equiped in ", k)
if self.equiped[k].OnEqpPaint then
pn.Paint = self.equiped[k].OnEqpPaint
- else
- pn.Paint = function(tp,w,h)
- draw.RoundedBox( 8, 0, 0, w, h, Color( 255, 0, 0 ) )
- end
end
else --We don't have something equiped!
- print("Nothing was equiped in ", k)
if v.img and v.img.material then
local c = col.ui.border
pn.Paint = function(tp,w,h)
@@ -149,10 +144,8 @@ inv.DrawOnDPanel = function(self,panel)
end
prox[k] = pn
end
+
prox.Put = function(self,position,item)
- print("Put was called!",position,item)
- PrintTable(position)
- PrintTable(item)
assert(self[position[1]] ~= nil, "Tried to put an item into an unknown slot! Slot:" .. position[1])
if item.GetOptions then
self[position[1]].DoClick = function()
@@ -164,10 +157,13 @@ inv.DrawOnDPanel = function(self,panel)
if item.OnEqpPaint then
self[position[1]].Paint = item.OnEqpPaint
else
- self[position[1]].Paint = function(tp,w,h)
- draw.RoundedBox( 8, 0, 0, w, h, Color( 255, 0, 0 ) )
+ self[position[1]].Paint = function(panel)
+ draw.DrawText( item.Name, "DermaDefault", 10, 10, Color( 0, 0, 0, 0 ))
end
end
+ if item.DoOnEquipPanel then
+ item:DoOnEquipPanel(self[position[1]])
+ end
self[position[1]]:Droppable("item")
end
prox.Remove = function(self,position)
@@ -181,8 +177,10 @@ inv.DrawOnDPanel = function(self,panel)
surface.SetMaterial( eqp[position[1]].img.material )
surface.DrawTexturedRect( 0, 0, w, h )
end
- print("Remove was called!",position)
pn:Droppable("none")
+ for k,v in pairs(pn:GetChildren()) do
+ v:Remove()
+ end
end
return prox
end
diff --git a/gamemode/inventorysystem/equipment/sh_equipment.lua b/gamemode/inventorysystem/equipment/sh_equipment.lua
index 793eeac..be930e0 100644
--- a/gamemode/inventorysystem/equipment/sh_equipment.lua
+++ b/gamemode/inventorysystem/equipment/sh_equipment.lua
@@ -5,8 +5,6 @@ local itm = nrequire("item.lua")
local ste = nrequire("utility/stream.lua")
local inventory = nrequire("inventory/inventory.lua")
local col = nrequire("config/colortheme.lua")
-print("Got invnetory table, it is:")
-PrintTable(inventory)
local slots = {
"Head",
"Shoulders",
@@ -98,6 +96,7 @@ end
inv.Remove = function(self,position)
local item = self.equiped[position[1]]
+ if not item then return end --Make sure we'r enot dragging an empty space
if item.onUnEquip then item:onUnEquip(self.Owner) end
self.equiped[position[1]] = nil
end
@@ -115,7 +114,6 @@ inv.Serialize = function(self)
end
inv.DeSerialize = function(self,data)
- print("deserializeing, data was",data)
if data ~= nil and data ~= "" then
local tbl = util.JSONToTable(data)
local cpy = table.Copy(self)
diff --git a/gamemode/inventorysystem/shapedinventory/cl_shaped.lua b/gamemode/inventorysystem/shapedinventory/cl_shaped.lua
index c40ffa0..83c2217 100644
--- a/gamemode/inventorysystem/shapedinventory/cl_shaped.lua
+++ b/gamemode/inventorysystem/shapedinventory/cl_shaped.lua
@@ -6,7 +6,7 @@ local inv = {}
local width = ScrW()
--local height = ScrH()
-local iconsize = width / 40
+local iconsize = ((width / 4) - 20) / 5
local function default_paint(self,w,h)
--Draw a box
@@ -35,8 +35,6 @@ local function runonshape(self,shape,x,y,func)
for i = 1,#shape do
for j = 1, #shape[i] do
if shape[i][j] then
- print("Running on ",i,j)
- print("Which translates to", x + j, y + i)
func(self.gridpanels[x + i - 1][y + j - 1])
end
end
@@ -47,6 +45,9 @@ end
local function drawitemat(self,x,y,item)
print("Drawing item at ",x,y)
local tp = self.gridpanels[x][y]
+ if tp == nil then
+ error("Unable to continue")
+ end
tp:Droppable("item")
runonshape(self,item.Shape,x,y,function(panel)
panel:SetVisible(false)
@@ -54,17 +55,29 @@ local function drawitemat(self,x,y,item)
tp:SetVisible(true)
local sx,sy = shapebounds(item.Shape)
tp:SetSize(iconsize * sx, iconsize * sy)
+ tp:SetText(item.Name)
tp.DoClick = function()
if item.GetOptions then
- com.CreateMenuFor(tp,item:GetOptions())
+ local dm = DermaMenu()
+ com.CreateMenuFor(dm,item:GetOptions())
+ dm:Open()
end
end
+ if item.DoOnPanel then
+ item:DoOnPanel(tp)
+ end
+ if item.Paint then
+ tp.Paint = item.Paint
+ end
end
--Reset the position, using the item and it's shape
local function undrawitemat(self,x,y)
local item = self:Get({x,y})
- self.gridpanels[x][y]:Droppable("")
+ local dpn = self.gridpanels[x][y]
+ dpn:Droppable("")
+ dpn:SetText("")
+ for k,v in pairs(dpn:GetChildren()) do v:Remove() end
runonshape(self,item.Shape,x,y,function(panel)
panel:SetVisible(true)
panel:SetSize(iconsize,iconsize)
@@ -117,7 +130,6 @@ end
]]
inv.DrawOnDPanel = function(self,panel)
- print("Drawing shaped on panel")
local DScrollPanel = vgui.Create( "DScrollPanel",panel)
DScrollPanel:SetPos( 0, 0 )
DScrollPanel:Dock(FILL)
@@ -134,9 +146,10 @@ inv.DrawOnDPanel = function(self,panel)
--Create the full grid of dpanels
for x = 1, self.dimx do
for y = 1, self.dimy do
- local dp = vgui.Create("DButton")
+ local dp = vgui.Create("DModelPanel")
dp:SetSize(iconsize,iconsize)
dp.Paint = default_paint
+ dp:SetText("")
--dp:Droppable("item")
dp:Receiver("item",com.generatereceiver(),{"one","two","three"})
dp.info = {}
@@ -161,11 +174,9 @@ inv.DrawOnDPanel = function(self,panel)
local observer = {}
observer.Put = function(obs,position,item)
- print("Drawing item at",position[1],position[2])
drawitemat(self,position[1],position[2],item)
end
observer.Remove = function(obs,position)
- print("Undrawing item at",position[1],position[2])
undrawitemat(self,position[1],position[2])
end
return observer
diff --git a/gamemode/inventorysystem/shapedinventory/sh_shaped.lua b/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
index 00beb7f..b77f378 100644
--- a/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
+++ b/gamemode/inventorysystem/shapedinventory/sh_shaped.lua
@@ -17,13 +17,10 @@ local function calcposition(dimx,dimy,x,y)
end
local function canfitin(self,x,y,shape)
- print("Checking canfitin, tracker was")
- PrintTable(self.tracker)
for rn,row in ipairs(shape) do
for cn,col in ipairs(row) do
local absx,absy = x + rn - 1, y + cn - 1
local slot = calcposition(self.dimx,self.dimy,absx,absy)
- print("Checking slot", slot)
if col and ((self.tracker[slot] ~= nil) or (absx > self.dimx) or (absy > self.dimy)) then
return false
end
@@ -45,19 +42,13 @@ end
function inv:CanFitIn(tbl,item)
if canfitin(self,tbl[1],tbl[2],item.Shape) then
- print("calculated, and can fit")
return true
else
- print("calculated, could not fit")
return "Could not fit :("
end
end
function inv:Put(tbl,item)
- print("Before putting ", item)
- PrintTable(item)
- print("tracker was")
- PrintTable(self.tracker)
--Set the item's shape to true
for rn,row in ipairs(item.Shape) do
@@ -72,8 +63,6 @@ function inv:Put(tbl,item)
--Now set the item in the correct slot
local slot = calcposition(self.dimx,self.dimy,tbl[1],tbl[2])
self.tracker[slot] = item
- print("After, tracker was ")
- PrintTable(self.tracker)
end
function inv:Has(ptr)
@@ -94,14 +83,8 @@ function inv:Has(ptr)
end
function inv:Remove(tbl)
- print("Removeing from",tbl[1],tbl[2])
local slot = calcposition(self.dimx,self.dimy,tbl[1],tbl[2])
- print("Slot is",slot)
- print("Tracking structure is:")
- PrintTable(self.tracker)
local item = self.tracker[slot]
- print("Removeing item",item)
- PrintTable(item)
self.tracker[slot] = nil
for rn,row in ipairs(item.Shape) do
for cn,col in ipairs(row) do
@@ -111,8 +94,6 @@ function inv:Remove(tbl)
end
end
end
- print("After, tracker was")
- PrintTable(self.tracker)
end
function inv:Get(tbl)
@@ -132,7 +113,6 @@ function inv:Serialize()
end
function inv:DeSerialize(str)
- print("Deserializeing from ", str)
--TODO:Implement
local tbl = util.JSONToTable(str)
for k,v in pairs(tbl) do
diff --git a/gamemode/itemsystem/armor/balaclava.lua b/gamemode/itemsystem/armor/balaclava.lua
index 1ea094b..cd31f97 100644
--- a/gamemode/itemsystem/armor/balaclava.lua
+++ b/gamemode/itemsystem/armor/balaclava.lua
@@ -34,7 +34,7 @@ function item.DoOnPanel(dimagebutton)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe.png")
end
-function item.DoOnEqupPanel(dimagebutton)
+function item.DoOnEquipPanel(dimagebutton)
print("called with panel:",panel)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe_eq.png")
end
diff --git a/gamemode/itemsystem/exampleitem.lua b/gamemode/itemsystem/exampleitem.lua
index a56151f..3c76971 100644
--- a/gamemode/itemsystem/exampleitem.lua
+++ b/gamemode/itemsystem/exampleitem.lua
@@ -46,7 +46,7 @@ function item.DoOnPanel(dimagebutton)
end
--Optional. Something run once when this item is drawn in an equiped slot
-function item.DoOnEqupPanel(dimagebutton)
+function item.DoOnEquipPanel(dimagebutton)
print("called with panel:",panel)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe_eq.png")
end
diff --git a/gamemode/itemsystem/utility/flashlight.lua b/gamemode/itemsystem/utility/flashlight.lua
index 9a87a75..fa1e3c5 100644
--- a/gamemode/itemsystem/utility/flashlight.lua
+++ b/gamemode/itemsystem/utility/flashlight.lua
@@ -35,7 +35,7 @@ function item.DoOnPanel(dimagebutton)
end
--Optional. Something run once when this item is drawn in an equiped slot
-function item.DoOnEqupPanel(dimagebutton)
+function item.DoOnEquipPanel(dimagebutton)
print("called with panel:",panel)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe_eq.png")
end
diff --git a/gamemode/itemsystem/weapons/knuckledclaw.lua b/gamemode/itemsystem/weapons/knuckledclaw.lua
index 2f629f6..0665a98 100644
--- a/gamemode/itemsystem/weapons/knuckledclaw.lua
+++ b/gamemode/itemsystem/weapons/knuckledclaw.lua
@@ -33,7 +33,7 @@ function item.DoOnPanel(dimagebutton)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe.png")
end
-function item.DoOnEqupPanel(dimagebutton)
+function item.DoOnEquipPanel(dimagebutton)
print("called with panel:",panel)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe_eq.png")
end
diff --git a/gamemode/itemsystem/weapons/rustyaxe.lua b/gamemode/itemsystem/weapons/rustyaxe.lua
index 4f613de..359580f 100644
--- a/gamemode/itemsystem/weapons/rustyaxe.lua
+++ b/gamemode/itemsystem/weapons/rustyaxe.lua
@@ -43,7 +43,7 @@ function item.DoOnPanel(dimagebutton)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe.png")
end
-function item.DoOnEqupPanel(dimagebutton)
+function item.DoOnEquipPanel(dimagebutton)
print("called with panel:",panel)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe_eq.png")
end
diff --git a/gamemode/itemsystem/weapons/seratedknife.lua b/gamemode/itemsystem/weapons/seratedknife.lua
index 7248426..ee116aa 100644
--- a/gamemode/itemsystem/weapons/seratedknife.lua
+++ b/gamemode/itemsystem/weapons/seratedknife.lua
@@ -34,7 +34,7 @@ function item.DoOnPanel(dimagebutton)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe.png")
end
-function item.DoOnEqupPanel(dimagebutton)
+function item.DoOnEquipPanel(dimagebutton)
print("called with panel:",panel)
dimagebutton:SetImage( "weapons/rustyaxe/rustyaxe_eq.png")
end
diff --git a/gamemode/nrequire.lua b/gamemode/nrequire.lua
index 6595fed..1fc70bd 100644
--- a/gamemode/nrequire.lua
+++ b/gamemode/nrequire.lua
@@ -1,12 +1,15 @@
--[[
A thing that kinda works like require, or at least, works how I wish require worked.
+ calls hooks:
+ artery_nrequire_defined
+ artery_core_loaded
]]
--Don't run ourselves, or we'll get stuck in a recursive loop!
if nrequire ~= nil then return end
print("hello from nrequire!")
local path = (GM or GAMEMODE).Folder:gsub("gamemodes/","") .. "/gamemode"
--[[
- Calls func on all the files under dir
+ Calls func on all the files under dir.
]]
local function TraverseFolder(dir, func)
local fpath = table.concat({path,dir,"/*"})
@@ -102,6 +105,7 @@ local function scan(pretbl, name)
pathparts[#pathparts + 1] = part:gsub("/$",""):gsub("^/","")
end
local filename = name:gfind("[%w_]+%.lua")()
+ assert(filename ~= nil,string.format("Could not file a filename for %q from parts: %s valid files are:\n\t%s",name,table.concat(pathparts,","),table.concat(collect_paths(pretbl),"\n\t")))
local cursor = pretbl[filename]
assert(cursor ~= nil,string.format("Scan did not find a file named %q, valid files are:\n\t%s",filename,table.concat(collect_paths(pretbl),"\n\t")))
local rev = {}
@@ -126,39 +130,58 @@ local ntbl = rebuild_include_table(paths)
local reqtbl = {}
for k,v in pairs(paths) do
if SERVER and not v:match("/?sv_[%w_]+%.lua$") then
- print("Adding CS lua file",v)
+ --print("Adding CS lua file",v)
AddCSLuaFile(v)
end
end
local pathstack = {}
+local coroutines = {}
--[[
Returns the table returned by executing a file. The table is cached after is is loaded, so calling nrequire() on a file twice will only run it once.
]]
function nrequire(req)
- local tpath = scan(ntbl,req)
- if reqtbl[tpath] then
- --print("Cache hit! returning",reqtbl[tpath])
- --for k,v in pairs(reqtbl[tpath]) do print(k,":",v) end
+ local tpath = scan(ntbl,req) --Find the full path from partial path
+ if reqtbl[tpath] then --And just return it if we've already included it.
return reqtbl[tpath]
end
+ --Otherwise, make sure we don't have a circular dependancy
for k,v in pairs(pathstack) do
assert(v ~= tpath,string.format("Circular dependancy detected:\n\t%s\n\t\t|\n\t\tV\n\t%s",table.concat(pathstack,"\n\t\t|\n\t\tV\n\t"),v))
end
+
+ --Override print so it's easy to see what file is printing what
local tab_rep = {}
for k = 1, #pathstack do tab_rep[k] = "\t" end
- print(string.format("%sIncluding %q",table.concat(tab_rep),tpath))
+ --print(string.format("%sIncluding %q",table.concat(tab_rep),tpath))
local oldprint = print
print = function(...) oldprint(" ",unpack({...})) end
+
+ --Deal with bookkeeping dealing with circular dependancies, and include
pathstack[#pathstack + 1] = tpath
- reqtbl[tpath] = include(tpath)
+ co = coroutine.create(function()
+ reqtbl[tpath] = include(tpath)
+ --print("Finished ", tpath)
+ end)
+ coroutines[#coroutines + 1] = co
+ coroutine.resume(co)
pathstack[#pathstack] = nil
+
+ --Try to resume everyone else waiting on something
+ for k,v in pairs(coroutines) do
+ --V will be nil when the coroutine finishes, which removes it from the list, nifty.
+ coroutine.resume(v)
+ end
+
+ --Undo the crazy print
print = oldprint
- print(string.format("%sIncluded %q",table.concat(tab_rep),tpath))
+ --print(string.format("%sIncluded %q",table.concat(tab_rep),tpath))
return reqtbl[tpath]
end
+hook.Call("artery_nrequire_defined")
+
--[[
Automatically include all the files in the gamemode directory based on the file name.
If the file starts with cl_ it will only be included on the client, if it starts with sv_ it will only be included on the server. If it starts with anything else, it will be shared. Will detect and error on circuar dependancy.