diff options
| author | Apickx <apickx@cogarr.com> | 2018-03-24 20:47:32 -0400 |
|---|---|---|
| committer | Apickx <apickx@cogarr.com> | 2018-03-24 20:47:32 -0400 |
| commit | d22897e044a422e125f46e52c3467473a3656378 (patch) | |
| tree | b7eedbaa95f3ec6c7c28a2b33405dda84adbf945 /data/artery/global/art_workbench | |
| download | artery_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.lua | 63 | ||||
| -rw-r--r-- | data/artery/global/art_workbench/sh_ent_workbench.lua | 37 | ||||
| -rw-r--r-- | data/artery/global/art_workbench/sv_ent_workbench.lua | 111 |
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") |
