summaryrefslogtreecommitdiff
path: root/data/artery/global/art_workbench
diff options
context:
space:
mode:
authorApickx <apickx@cogarr.com>2018-03-24 20:47:32 -0400
committerApickx <apickx@cogarr.com>2018-03-24 20:47:32 -0400
commitd22897e044a422e125f46e52c3467473a3656378 (patch)
treeb7eedbaa95f3ec6c7c28a2b33405dda84adbf945 /data/artery/global/art_workbench
downloadartery_stranded-d22897e044a422e125f46e52c3467473a3656378.tar.gz
artery_stranded-d22897e044a422e125f46e52c3467473a3656378.tar.bz2
artery_stranded-d22897e044a422e125f46e52c3467473a3656378.zip
Inital commit
Inital commit
Diffstat (limited to 'data/artery/global/art_workbench')
-rw-r--r--data/artery/global/art_workbench/cl_ent_workbench.lua63
-rw-r--r--data/artery/global/art_workbench/sh_ent_workbench.lua37
-rw-r--r--data/artery/global/art_workbench/sv_ent_workbench.lua111
3 files changed, 211 insertions, 0 deletions
diff --git a/data/artery/global/art_workbench/cl_ent_workbench.lua b/data/artery/global/art_workbench/cl_ent_workbench.lua
new file mode 100644
index 0000000..8f4b722
--- /dev/null
+++ b/data/artery/global/art_workbench/cl_ent_workbench.lua
@@ -0,0 +1,63 @@
+--[[
+ Client stuff!
+]]
+local ENT = nrequire("sh_ent_workbench.lua")
+
+function ENT:Draw()
+
+ self.Entity:DrawModel()
+
+end
+
+net.Receive("art_workbench_open",function()
+ local who = net.ReadEntity()
+ print("Opening sawhorse")
+ local selectframe = vgui.Create("DFrame")
+ selectframe:SetSize(ScrW()/2, ScrH()/2)
+ selectframe:Center()
+ selectframe:SetTitle("Sawhorse")
+
+ local scroll = vgui.Create( "DScrollPanel",selectframe )
+ scroll:Dock(FILL)
+
+ local grid = vgui.Create( "DGrid", scroll )
+ grid:SetPos( 10, 30 )
+ grid:SetCols( 2 )
+ grid:SetColWide( 200 )
+ grid:SetRowHeight(100)
+ grid:Dock(FILL)
+
+ print("s.props is",ENT.props)
+ PrintTable(ENT.props)
+
+ for k,v in pairs(ENT.props) do
+ local p = vgui.Create("DPanel")
+ p:SetSize(200,100)
+ --p:Dock(FILL)
+ local but = vgui.Create("DModelPanel",p)
+ but:SetModel(v.model)
+ but:SetSize(100,100)
+ but:Dock(LEFT)
+ but.DoClick = function(self)
+ net.Start("art_workbench_select")
+ net.WriteString(k)
+ net.WriteEntity(who)
+ net.SendToServer()
+ print("I want to make a ", k)
+ end
+ local label = vgui.Create("DLabel",p)
+ label:SetSize(100,100)
+ label:Dock(RIGHT)
+ local costtbl = {}
+ for k,v in pairs(v.reqs) do
+ costtbl[#costtbl+1] = string.format("%10s : %5d", k, v)
+ end
+ label:SetText(string.format("%s\nCost:\n%s",k,table.concat(costtbl,"\n")))
+ label:SetDark(true)
+ grid:AddItem(p)
+ end
+
+ selectframe:MakePopup()
+end)
+
+scripted_ents.Register(ENT,"art_workbench")
diff --git a/data/artery/global/art_workbench/sh_ent_workbench.lua b/data/artery/global/art_workbench/sh_ent_workbench.lua
new file mode 100644
index 0000000..4900d3e
--- /dev/null
+++ b/data/artery/global/art_workbench/sh_ent_workbench.lua
@@ -0,0 +1,37 @@
+if not nrequire then return end
+
+local ENT = {}
+
+ENT.Type = "anim"
+ENT.Base = "art_chest"
+ENT.PrintName = "art_sawhorse"
+ENT.Author = "Apickx"
+
+ENT.Spawnable = false
+ENT.AdminSpawnable = false
+
+local skil = nrequire("sh_skillcommon.lua")
+skil.RegisterSkill({"Crafting","Toolbuilding"})
+
+ENT.props = {
+ ["Hammer"] = {
+ model = "models/weapons/w_hammer.mdl",
+ reqs = {
+ ["Wood"] = 2,
+ ["Iron"] = 1
+ }
+ },
+ ["Nail"] = {
+ model = "models/crossbow_bolt.mdl",
+ reqs = {
+ ["Copper"] = 1
+ }
+ },
+ ["Paddle"] = {
+ model = "models/weapons/w_hammer.mdl",
+ reqs = {
+ ["Wood"] = 4
+ }
+ }
+}
+return ENT
diff --git a/data/artery/global/art_workbench/sv_ent_workbench.lua b/data/artery/global/art_workbench/sv_ent_workbench.lua
new file mode 100644
index 0000000..9ce7e0f
--- /dev/null
+++ b/data/artery/global/art_workbench/sv_ent_workbench.lua
@@ -0,0 +1,111 @@
+--[[
+ This entity gives townies things to do
+]]
+if not nrequire then return end
+
+DEFINE_BASECLASS("art_chest") -- this defined a local variable called BaseClass
+
+AddCSLuaFile( "cl_init.lua" )
+AddCSLuaFile( "shared.lua" )
+
+print("Hello from art_workbench init.lua!")
+
+local ENT = nrequire("sh_ent_workbench.lua")
+local inv = nrequire("core/inventory/inventory.lua")
+local itm = nrequire("core/inventory/item.lua")
+
+function ENT:Initialize( )
+ self.InvType = "Crafting Inventory"
+ BaseClass.Initialize(self)
+ timer.Simple(0.1,function()
+ self.data.inventories[self:GetCreationID()].accepts = {
+ ["Wood"] = true,
+ ["Copper"] = true,
+ ["Iron"] = true
+ }
+ end)
+ self.Entity:SetModel("models/props/cs_militia/sawhorse.mdl")
+ self.Entity:PhysicsInit( SOLID_VPHYSICS )
+ self.Entity:SetMoveType( MOVETYPE_VPHYSICS )
+ self.Entity:SetSolid( SOLID_VPHYSICS )
+ self.Entity:Activate()
+ local phys = self.Entity:GetPhysicsObject()
+ if (phys:IsValid()) then
+ phys:Wake()
+ phys:SetMass(100)
+ end
+ self.selfPos = self.Entity
+ self:SetUseType(SIMPLE_USE)
+end
+
+
+util.AddNetworkString("art_workbench_open")
+util.AddNetworkString("art_workbench_select")
+util.AddNetworkString("art_workbench_puzzle")
+util.AddNetworkString("art_workbench_put")
+util.AddNetworkString("art_workbench_close")
+
+function ENT:Use(a,c,u,v)
+ net.Start("art_workbench_open")
+ net.WriteEntity(self)
+ net.Send(c)
+ BaseClass.Use(self,a,c,u,v)
+end
+
+function ENT:NumOf(name)
+ local myinv = self.data.inventories[self:GetCreationID()]
+ local cursor = myinv:Has(name)
+ local titm = nil
+ local num = 0
+ while cursor ~= nil do
+ titm = myinv:Remove(cursor)
+ num = num + 1
+ cursor = myinv:Has(name)
+ end
+ --Put stuff back in
+ for i = 1,num do
+ if titm ~= nil then
+ local pos = myinv:FindPlaceFor(titm)
+ myinv:Put(pos,titm)
+ end
+ end
+
+ return num
+end
+
+net.Receive("art_workbench_select",function(ln,ply)
+ local name = net.ReadString()
+ local who = net.ReadEntity()
+ print("props are:")
+ PrintTable(s.props)
+ assert(s.props[name],"Player " .. ply:Nick() .. " tried to make a prop we don't have:" .. name)
+ local reqs = s.props[name].reqs
+ print("player wanted to make a ",name,reqs)
+ PrintTable(reqs)
+ local canmake = true
+ for k,v in pairs(reqs) do
+ if who:NumOf(k) < v then
+ canmake = false
+ break
+ end
+ end
+
+ local myinv = who.data.inventories[who:GetCreationID()]
+ if canmake then
+ print("Player can make, giveing")
+ xpcall(function()
+ ply:GiveItem(itm.GetItemByName(name))
+ ply:AddSkill("Toolbuilding",#reqs)
+ for k,v in pairs(reqs) do
+ for i = 1,v do
+ local cur = myinv:Has(k)
+ myinv:Remove(cur)
+ end
+ end
+ end,function(err)
+ Msg("Failed to insert:" .. err)
+ end)
+ end
+end)
+
+scripted_ents.Register(ENT,"art_workbench")