Added node lib & node entity

master
AlmTech Software 5 years ago
parent 222b8a1467
commit b9f7aa5fd3
  1. 2
      entities/entities/q_crafting_station/shared.lua
  2. 12
      entities/entities/q_node/cl_init.lua
  3. 44
      entities/entities/q_node/init.lua
  4. 15
      entities/entities/q_node/shared.lua
  5. 1
      gamemode/cl_init.lua
  6. 13
      gamemode/engine/lib/server/sv_notify.lua
  7. 133
      gamemode/engine/lib/sh_node.lua
  8. 2
      gamemode/init.lua
  9. 16
      gamemode/settings/sh_nodes.lua

@ -8,7 +8,7 @@
ENT.Type = "anim" ENT.Type = "anim"
ENT.Base = "base_entity" ENT.Base = "base_entity"
ENT.PrintName = "Quantum Item" ENT.PrintName = "Quantum Station"
ENT.Author = "AlmTech" ENT.Author = "AlmTech"
ENT.Contact = "elias@almtech.se" ENT.Contact = "elias@almtech.se"
ENT.Spawnable = false ENT.Spawnable = false

@ -0,0 +1,12 @@
-- __ _ _______ _ __
-- / / /\ | | |__ __| | | \ \
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
include( "shared.lua" )
function ENT:Draw()
self:DrawModel()
end

@ -0,0 +1,44 @@
-- __ _ _______ _ __
-- / / /\ | | |__ __| | | \ \
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )
include( "shared.lua" )
function ENT:Initialize()
self:PhysicsInit( SOLID_BSP )
self:SetMoveType( MOVETYPE_VPHYSICS )
self:SetSolid( SOLID_VPHYSICS )
self:SetCollisionGroup( COLLISION_GROUP_NONE )
local physObj = self:GetPhysicsObject()
if( IsValid( physObj ) ) then
physObj:EnableMotion( false ) -- dont want it to move
end
end
function ENT:InitializeNode( nodeid, pos, ang )
if( pos == nil || ang == nil ) then return end
local nodeTbl = Quantum.node.Get( nodeid )
if( nodeTbl != nil ) then
self:SetModel( nodeTbl.model )
self.nodeid = nodeid
self:SetNWString( "q_node_id", nodeid )
self:SetPos( pos )
self:SetAngles( ang )
else
Quantum.Error( "Node Table could not be found '" .. nodeid .. "'!" )
self:Remove()
end
end

@ -0,0 +1,15 @@
-- __ _ _______ _ __
-- / / /\ | | |__ __| | | \ \
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
ENT.Type = "anim"
ENT.Base = "base_entity"
ENT.PrintName = "Quantum Node"
ENT.Author = "AlmTech"
ENT.Contact = "elias@almtech.se"
ENT.Spawnable = false
ENT.AdminSpawnable = false

@ -51,6 +51,7 @@ if CLIENT then
include( "settings/sh_effects.lua" ) include( "settings/sh_effects.lua" )
include( "settings/sh_crafting_stations.lua" ) include( "settings/sh_crafting_stations.lua" )
include( "settings/sh_recipes.lua" ) include( "settings/sh_recipes.lua" )
include( "settings/sh_nodes.lua" )
end end
local function loadPlugins() local function loadPlugins()

@ -39,6 +39,19 @@ function Quantum.Notify.ItemCrafted( pl, item, amount )
pl:SendLua( luaFunc ) pl:SendLua( luaFunc )
end end
function Quantum.Notify.ItemGathered( pl, item, amount )
local amtStr = ""
if( amount > 1 ) then amtStr = tostring(amount) .. "x " end
local itemColor = item.rarity.color || baseClr
local itemName = item.name || "[ERROR name=nil]"
local luaArgs = makeColorAString(baseClr) .. ",'You gathered '," .. makeColorAString(baseClr) .. ",'" .. tostring(amtStr) .. "'," .. makeColorAString(itemColor) .. "," .. "'" .. tostring(itemName) .. "'"
local luaFunc = "chat.AddText(" .. luaArgs .. ")"
pl:SendLua( luaFunc )
end
function Quantum.Notify.Deny( pl, text ) function Quantum.Notify.Deny( pl, text )
local luaArgs = makeColorAString( Color( 245, 20, 20 ) ) .. ",'" .. tostring( text ) .. "'" local luaArgs = makeColorAString( Color( 245, 20, 20 ) ) .. ",'" .. tostring( text ) .. "'"

@ -0,0 +1,133 @@
-- __ _ _______ _ __
-- / / /\ | | |__ __| | | \ \
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
Quantum.Node = {} -- lib
Quantum.Nodes = {} -- container for vars
function Quantum.Node.Create( nodeid, tbl )
local node = {
name = tbl.name || "Unknown Node",
model = tbl.model,
toolids = tbl.toolids || { "q_hands" },
give = tbl.give || {},
giveprobability = tbl.giveprobability || 1
}
node.id = nodeid
Quantum.Nodes[nodeid] = node
return node
end
function Quantum.Node.Get( nodeid )
return Quantum.Nodes[nodeid]
end
if SERVER then
function Quantum.Node.Spawn( nodeid, vec, ang, respawndelay, probability )
local node = Quantum.Node.Get( nodeid )
local ent = ents.Create( "q_node" )
ent.node = node
ent.respawndelay = respawndelay || 30
ent.probability = probability || 1
ent:SetModel( node.model )
ent:SetPos( vec )
ent:SetAngles( ang )
ent:Spawn()
end
function Quantum.Node.Remove( ent )
local nodeTbl = ent.node
if( ent.node != nil ) then
local nodeid = nodeTbl.id
timer.Simple( ent.respawndelay, function()
Quantum.Node.Spawn( nodeid, ent:GetPos(), ent:GetAngles(), ent.respawndelay, ent.probability ) -- respawn it after x seconds
end)
ent:Remove() -- remove the node
else
Quantum.Error( "Node table is nil! Aborting..." )
return
end
end
function Quantum.Node.RemoveAll()
for k, node in pairs( ents.FindByClass("q_node") ) do
Quantum.Node.Remove( node )
end
end
function Quantum.Node.Register( nodeid, vec, ang1 )
Quantum.Nodes[ #Quantum.Nodes + 1 ] = { id = nodeid, pos = vec, ang = ang1 }
end
function Quantum.Node.SpawnAllRegistered()
local nodeTbl
for k, v in pairs( Quantum.Nodes ) do
nodeTbl = Quantum.Node.Get( v.id )
if( nodeTbl != nil ) then
Quantum.Node.Spawn( v.id, v.pos, v.ang, nodeTbl.respawndelay, nodeTbl.probability )
else
Quantum.Error( "Tried to spawn an invalid node ('" .. v.id .. "')!" )
end
end
end
hook.Add( "PlayerInitialSpawn", "Quantum_Init_Nodes_Load", function()
Quantum.Debug( "Spawning registered nodes..." )
if( #player.GetAll() == 1 ) then -- spawn the stations when the first player joins
Quantum.Node.SpawnAllRegistered()
end
end)
local function randomizeLootTable( tbl, prob )
local n = math.Rand( 0.00000000001, 1 )
Quantum.Debug( "Probability: " .. n .. " <= " .. prob )
if( n <= prob ) then
local index = table.random( 1, #tbl )
return tbl[index].item, tbl[index].amount || 1
end
end
function Quantum.Node.Gather( pl, tool, ent )
local nodeTbl = ent.node
if( ent.node != nil ) then
local nodeid = nodeTbl.id
local toolids = nodeTbl.toolids
if( #toolids > 1 ) then
local canGather = false
for i, t in pairs( toolids ) do
if( tool == t ) then
canGather = true
break
end
end
if( canGather ) then
local loot, amount = randomizeLootTable( nodeTbl.give, nodeTbl.giveprobability )
if( loot != nil ) then
Quantum.Server.Inventory.GiveItem( pl, loot, amount )
local itemTbl = Quantum.Item.Get( loot )
Quantum.Notify.ItemGathered( pl, itemTbl.name, amount )
else
return
end
end
end
end
end
end

@ -16,6 +16,7 @@ if SERVER then
AddCSLuaFile( "settings/sh_effects.lua" ) AddCSLuaFile( "settings/sh_effects.lua" )
AddCSLuaFile( "settings/sh_recipes.lua" ) AddCSLuaFile( "settings/sh_recipes.lua" )
AddCSLuaFile( "settings/sh_crafting_stations.lua" ) AddCSLuaFile( "settings/sh_crafting_stations.lua" )
AddCSLuaFile( "settings/sh_nodes.lua" )
AddCSLuaFile( "cl_init.lua" ) AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" ) AddCSLuaFile( "shared.lua" )
@ -120,6 +121,7 @@ if SERVER then
include( "settings/sh_crafting_stations.lua" ) include( "settings/sh_crafting_stations.lua" )
include( "settings/sh_recipes.lua" ) include( "settings/sh_recipes.lua" )
include( "settings/sv_crafting_stations_locations.lua" ) include( "settings/sv_crafting_stations_locations.lua" )
include( "settings/sh_nodes.lua" )
Quantum.Server.Station.UpdateAll() Quantum.Server.Station.UpdateAll()
end end

@ -0,0 +1,16 @@
-- __ _ _______ _ __
-- / / /\ | | |__ __| | | \ \
-- / / / \ | |_ __ ___ | | ___ ___| |__ \ \
-- < < / /\ \ | | '_ ` _ \| |/ _ \/ __| '_ \ > >
-- \ \ / ____ \| | | | | | | | __/ (__| | | | / /
-- \_\ /_/ \_\_|_| |_| |_|_|\___|\___|_| |_| /_/
Quantum.Node.Create( "stone", {
name = "Stone",
model = "",
toolids = {"q_hands"},
give = {
{ item = "test2", amount = 1 }
},
giveprobability = 1/2
} )
Loading…
Cancel
Save