summaryrefslogtreecommitdiff
path: root/gamemode
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2016-05-25 22:06:26 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2016-05-25 22:06:26 -0400
commit4adec24c3a2a53f518d817ae8a6ddd0c4c47422c (patch)
treeadb91a867dfda05f5c2880e19d0111fb657ecb9f /gamemode
parent699df0d5df4e7d00a0d2b838b8c851c9b5027cea (diff)
downloadgmstranded-4adec24c3a2a53f518d817ae8a6ddd0c4c47422c.tar.gz
gmstranded-4adec24c3a2a53f518d817ae8a6ddd0c4c47422c.tar.bz2
gmstranded-4adec24c3a2a53f518d817ae8a6ddd0c4c47422c.zip
more work on the structure system
Diffstat (limited to 'gamemode')
-rw-r--r--gamemode/cl_init.lua1
-rw-r--r--gamemode/configure_me.lua2
-rw-r--r--gamemode/init.lua18
-rw-r--r--gamemode/itemsystem/items/sprout.lua2
-rw-r--r--gamemode/server/admin_commands.lua10
-rw-r--r--gamemode/server/player_functions.lua3
-rw-r--r--gamemode/spp/sv_init.lua2
-rw-r--r--gamemode/structuresystem/common_smelt.lua83
-rw-r--r--gamemode/structuresystem/loadstructures.lua34
-rw-r--r--gamemode/structuresystem/structures/aaaStructureExample.lua22
-rw-r--r--gamemode/structuresystem/structures/stonefurnace.lua31
11 files changed, 191 insertions, 17 deletions
diff --git a/gamemode/cl_init.lua b/gamemode/cl_init.lua
index bb9e7b4..3394874 100644
--- a/gamemode/cl_init.lua
+++ b/gamemode/cl_init.lua
@@ -4,6 +4,7 @@ includeFolder("craftablesystem",true)
includeFolder("itemsystem",true)
includeFolder("client",true)
includeFolder("shared",true)
+includeFolder("structuresystem",true)
include( "shared.lua" )
diff --git a/gamemode/configure_me.lua b/gamemode/configure_me.lua
index f7651af..15a86f4 100644
--- a/gamemode/configure_me.lua
+++ b/gamemode/configure_me.lua
@@ -19,7 +19,7 @@ GM.GAMEMODE_FOLDER_NAME = "gmstranded"
GMS = GMS or {}
-//If you're experienceing network latency, lowering this might help. If too low, might cause graphical errors on the client when displaying resources
+//If you're experienceing network latency, lowering this might help. If too low, might cause various errors
//max:32
GMS.NETINT_BITCOUNT = 16
diff --git a/gamemode/init.lua b/gamemode/init.lua
index 7ba8b25..50006b5 100644
--- a/gamemode/init.lua
+++ b/gamemode/init.lua
@@ -4,6 +4,7 @@ include( "init_static.lua")
includeFolder("server",true)
includeFolder("craftablesystem",true)
includeFolder("itemsystem",true)
+includeFolder("structuresystem",true)
includeFolder("shared",true)
AddCSLuaFile( "configure_me.lua" )
@@ -11,6 +12,7 @@ AddCSLuaFile( "utility.lua" )
AddCSLuaFolder("client",true)
AddCSLuaFolder("craftablesystem",true)
AddCSLuaFolder("itemsystem",true)
+AddCSLuaFolder("structuresystem",true)
AddCSLuaFolder("shared",true)
-- Send clientside files
@@ -155,7 +157,7 @@ hook.Add( "InitPostEntity", "gms_custom_antspawns", function()
ent:SetPos( pos )
ent:Spawn()
ent.GMSAutoSpawned = true
- ent:SetNetworkedString( "Owner", "World" )
+ ent:SetNWString( "Owner", "World" )
end
end )
@@ -169,7 +171,7 @@ hook.Add( "InitPostEntity", "gms_custom_treespawns", function()
ent:SetPos( pos )
ent:Spawn()
ent.GMSAutoSpawned = true
- ent:SetNetworkedString( "Owner", "World" )
+ ent:SetNWString( "Owner", "World" )
end
end )
@@ -252,7 +254,7 @@ function GM.ReproduceTrees()
seed:SetPos( pos )
seed:DropToGround()
seed:Setup( "tree", 180 )
- seed:SetNetworkedString( "Owner", "World" )
+ seed:SetNWString( "Owner", "World" )
seed:Spawn()
end
end
@@ -308,7 +310,7 @@ function GM.ReproduceTrees()
seed:SetPos( groundtrace.HitPos )
seed:DropToGround()
seed:Setup( "tree", 180 + math.random( -20, 20 ) )
- seed:SetNetworkedString( "Owner", "World" )
+ seed:SetNWString( "Owner", "World" )
seed:Spawn()
end
end
@@ -1235,7 +1237,7 @@ hook.Add( "PlayerDeath", "Death", function( ply )
grave:Spawn()
grave:SetplName(ply:Nick())
- grave:SetNetworkedString( "Owner", "Everyone" )
+ grave:SetNWString( "Owner", "Everyone" )
wepstbl = {}
restbl = {}
@@ -1800,7 +1802,7 @@ function GM:LoadMapEntity( savegame, max, k )
if ( ent.IsPlant ) then ent:SetNWEntity( "plantowner", player.FindByName( entry["owner"] ) ) end
SPropProtection.PlayerMakePropOwner( player.FindByName( entry["owner"] ), ent )
elseif ( entry["owner"] == "World" ) then
- ent:SetNetworkedString( "Owner", entry["owner"] )
+ ent:SetNWString( "Owner", entry["owner"] )
end
if ( entry["class"] == "gms_resourcedrop" ) then // RP
@@ -2055,7 +2057,7 @@ function gms_addbuildsiteresource( ent_resourcedrop, ent_buildsite )
for k, v in pairs( ent_buildsite.Costs ) do
str = str .. " " .. string.Replace( k, "_", " " ) .. " ( " .. v .. "x )"
end
- ent_buildsite:SetNetworkedString( "Resources", str )
+ ent_buildsite:SetNWString( "Resources", str )
end
end
end
@@ -2104,7 +2106,7 @@ function gms_addbuildsiteresourcePack( ent_resourcepack, ent_buildsite )
for k, v in pairs( ent_buildsite.Costs ) do
str = str .. " " .. string.Replace( k, "_", " " ) .. " ( " .. v .. "x )"
end
- ent_buildsite:SetNetworkedString( "Resources", str )
+ ent_buildsite:SetNWString( "Resources", str )
end
end
end
diff --git a/gamemode/itemsystem/items/sprout.lua b/gamemode/itemsystem/items/sprout.lua
index 3aab4c5..d5ae254 100644
--- a/gamemode/itemsystem/items/sprout.lua
+++ b/gamemode/itemsystem/items/sprout.lua
@@ -12,7 +12,7 @@ ITEM.OnGrow = function(self, aor, owner)
ent:SetPos( self:GetPos() )
ent:Spawn()
ent.GMSAutoSpawned = true
- ent:SetNetworkedString( "Owner", "World" )
+ ent:SetNWString( "Owner", "World" )
end
genericMakePlantable(ITEM)
diff --git a/gamemode/server/admin_commands.lua b/gamemode/server/admin_commands.lua
index 284792c..d21c884 100644
--- a/gamemode/server/admin_commands.lua
+++ b/gamemode/server/admin_commands.lua
@@ -1,7 +1,11 @@
concommand.Add( "gms_admin_maketree", function( ply )
if ( IsValid( ply ) && !ply:IsAdmin() ) then ply:SendMessage( "You need admin rights for this!", 3, Color( 200, 0, 0, 255 ) ) return end
local tr = ply:TraceFromEyes( 10000 )
- GAMEMODE.MakeTree( tr.HitPos )
+ local ent = ents.Create( "gms_tree" )
+ ent:SetPos( tr.HitPos )
+ ent:Spawn()
+ ent.GMSAutoSpawned = true
+ ent:SetNWString( "Owner", "World" )
end )
concommand.Add( "gms_admin_makerock", function( ply )
@@ -28,7 +32,7 @@ concommand.Add( "gms_admin_makeantlionbarrow", function( ply, cmd, args )
local ent = ents.Create( "gms_antlionbarrow" )
ent:SetPos( tr.HitPos )
ent:Spawn()
- ent:SetNetworkedString( "Owner", "World" )
+ ent:SetNWString( "Owner", "World" )
ent:SetKeyValue( "MaxAntlions", args[1] )
end )
@@ -132,7 +136,7 @@ concommand.Add( "gms_admin_populatearea", function( ply, cmd, args )
ent:SetModel( GMS.RockModels[math.random( 1, #GMS.RockModels )] )
ent:SetPos( groundtrace.HitPos )
ent:Spawn()
- ent:SetNetworkedString( "Owner", "World" )
+ ent:SetNWString( "Owner", "World" )
ent:Fadein()
ent.PhysgunDisabled = true
ent:GetPhysicsObject():EnableMotion( false )
diff --git a/gamemode/server/player_functions.lua b/gamemode/server/player_functions.lua
index 561a618..4da63c8 100644
--- a/gamemode/server/player_functions.lua
+++ b/gamemode/server/player_functions.lua
@@ -143,12 +143,9 @@ end
util.AddNetworkString( "gms_SetResource" )
function PlayerMeta:SetResource( resource, int )
- print("SetResource called!")
if(isstring(resource)) then
resource = GMS.GetResourceByName(resource)
end
- PrintTable(resource)
- print(int)
--if ( !self.Resources[resource] ) then self.Resources[resource] = 0 end
diff --git a/gamemode/spp/sv_init.lua b/gamemode/spp/sv_init.lua
index a4df311..d4eb2d2 100644
--- a/gamemode/spp/sv_init.lua
+++ b/gamemode/spp/sv_init.lua
@@ -223,7 +223,7 @@ hook.Add( "InitPostEntity", "spp_map_ents", function()
local WorldEnts = 0
for k, v in pairs( ents.GetAll() ) do
if ( !v:IsPlayer() and !v:GetNWString( "Owner", false ) ) then
- v:SetNetworkedString( "Owner", "World" )
+ v:SetNWString( "Owner", "World" )
WorldEnts = WorldEnts + 1
end
end
diff --git a/gamemode/structuresystem/common_smelt.lua b/gamemode/structuresystem/common_smelt.lua
new file mode 100644
index 0000000..bb34331
--- /dev/null
+++ b/gamemode/structuresystem/common_smelt.lua
@@ -0,0 +1,83 @@
+
+if SERVER then
+ util.AddNetworkString( "makerecipe" )
+end
+function genericMakeFurnace(tbl)
+ local oldusefunc = tbl.onUse
+ local overrideuse = function(self, ply)
+ if SERVER or ply != LocalPlayer() then return end
+ print("I am the local player!")
+ local DermaPanel = vgui.Create( "DFrame" )
+ DermaPanel:SetPos( 100, 100 )
+ DermaPanel:SetSize( ScrW() / 1.3, ScrH() / 1.4 )
+ DermaPanel:SetTitle( tbl.Name )
+ DermaPanel:SetDraggable( true )
+ DermaPanel:Center()
+ local Grid = vgui.Create("DGrid",DermaPanel)
+ Grid:SetPos(10,30)
+ Grid:SetColWide(128)
+ Grid:SetRowHeight(128)
+ for k,v in pairs(tbl.Recipes) do
+ local testbut = vgui.Create("DButton")
+ testbut:SetText(v.Name)
+ testbut:SetSize(128,128)
+ testbut.DoClick = function(button)
+ net.Start("makerecipe")
+ net.WriteString(tbl.Name)
+ if(tbl.uniquedata) then net.WriteUInt(self:EntIndex(), GMS.NETINT_BITCOUNT) end
+ net.WriteUInt(k, GMS.NETINT_BITCOUNT)
+ net.SendToServer()
+ end
+ Grid:AddItem(testbut)
+ DermaPanel:MakePopup()
+ end
+ oldusefunc(self,ply)
+ end
+ tbl.onUse = overrideuse
+end
+net.Receive( "makerecipe", function(ln,ply)
+ local tblname = net.ReadString()
+ local tbl = GMS.Structures[tblname]
+ print("Table is:")
+ PrintTable(tbl)
+ print("Recipes table is:")
+ PrintTable(tbl.Recipes)
+ assert(tbl != nil,"Maybe someone's trying to hack lol")
+ if tbl.uniquedata then
+ local entnum = net.ReadUInt(GMS.NETINT_BITCOUNT)
+ tbl = GMS.UniqueStructures[entnum]
+ end
+ local recipenum = net.ReadUInt(GMS.NETINT_BITCOUNT)
+ print("Useing recipes:")
+ PrintTable(tbl.Recipes)
+ print("And recipenum:")
+ PrintTable(tbl.Recipes[recipenum])
+ assert(tbl.Recipes != nil and tbl.Recipes[recipenum] != nil, "Invalid recpie!")
+ print("Attempting to craft recpie:")
+ PrintTable(tbl.Recipes[recipenum])
+ local recipe = tbl.Recipes[recipenum]
+ local numrequired = 1
+ for k, v in pairs( recipe.Req ) do
+ numrequired = numrequired + v
+ print("numrequired is now:" .. numrequired)
+ end
+ local time = math.pow(numrequired,tbl.timemult) - ((numrequired * tbl.timemult) * math.pow(ply:GetSkill("Smelting"),tbl.skillease))
+ time = time * numrequired / 5
+ --time = math.max( time - math.floor( ply:GetSkill( "Smelting" ) / 5 ), math.max( timecount * tbl.skillease, 2 ) )
+
+ print("I think smelting this should take " .. time .. " seconds")
+
+end)
+
+function recipieForSmelt(tbl, name, description, required, result, ratio, mults)
+ for k,v in pairs(mults) do
+ local thisrecipie = {}
+ thisrecipie.Name = name .. " x" .. v
+ thisrecipie.Description = description
+ thisrecipie.Req = {}
+ thisrecipie.Req[required] = ratio[1] * v
+ thisrecipie.Results = {}
+ thisrecipie.Results[result] = ratio[2] * v
+ table.insert(tbl,0,thisrecipie)
+ end
+end
diff --git a/gamemode/structuresystem/loadstructures.lua b/gamemode/structuresystem/loadstructures.lua
new file mode 100644
index 0000000..858d976
--- /dev/null
+++ b/gamemode/structuresystem/loadstructures.lua
@@ -0,0 +1,34 @@
+print("Loading structures!")
+GMS = GMS or {}
+GMS.Structures = GMS.Structures or {}
+GMS.UniqueStructures = {}
+
+function registerStructure(tbl)
+ assert(tbl.Name != nil, "Structure's name is nil!")
+ GMS.Structures[tbl.Name] = tbl
+end
+
+concommand.Add("gms_spawnstructure",function(ply,cmd,args)
+ if !ply:IsDeveloper() then return end
+ assert(args[1] != "","Failed to find structure name")
+ assert(GMS.Structures[args[1]] != nil, "Structure \"" .. args[1] .. "\" does not exist!")
+
+ local tr = ply:GetEyeTrace()
+ local e = ents.Create("gms_generic_structure")
+
+ local tbl = GMS.Structures[args[1]]
+ if tbl.uniquedata then
+ tbl = table.Copy(tbl)
+ GMS.UniqueStructures[e:EntIndex()] = tbl
+ end
+
+ for k,v in pairs(tbl) do
+ print("Setting " .. k .. " to")
+ print(v)
+ e[k] = v
+ end
+ e:Spawn()
+ e:SetPos(tr.HitPos)
+ SPropProtection.PlayerMakePropOwner( ply, e )
+ --e:SetNWString("Owner",ply:Nick())
+end)
diff --git a/gamemode/structuresystem/structures/aaaStructureExample.lua b/gamemode/structuresystem/structures/aaaStructureExample.lua
new file mode 100644
index 0000000..abe91ba
--- /dev/null
+++ b/gamemode/structuresystem/structures/aaaStructureExample.lua
@@ -0,0 +1,22 @@
+--This file is to help developers add new structures to the game!
+
+STRUCT = {}
+
+--A name for this structure, each type of structure must have a different name
+STRUCT.Name = "Example Structure"
+
+--The model for this structure.
+STRUCT.Model = "models/props/de_inferno/ClayOven.mdl"
+
+--The initalize method. Called on both the server and the client
+STRUCT.onInitialize = function(self)
+ print("Initalize called!")
+end
+
+--If this structure is not like every other structures of the same name (for example, if it has an internal inventory)
+STRUCT.uniquedata = false
+
+--Called when a player presses e on this structure, called on both the server and the client. Keep in mind that on the client side, ply may not be the local player!
+STRUCT.onUse = function(self,ply)
+ print("onUse called!")
+end
diff --git a/gamemode/structuresystem/structures/stonefurnace.lua b/gamemode/structuresystem/structures/stonefurnace.lua
new file mode 100644
index 0000000..84c0311
--- /dev/null
+++ b/gamemode/structuresystem/structures/stonefurnace.lua
@@ -0,0 +1,31 @@
+local STRUCT = {}
+
+STRUCT.Name = "Stone Furnace"
+STRUCT.Model = "models/props/de_inferno/ClayOven.mdl"
+
+STRUCT.Structure = {
+ {"models/props/de_inferno/ClayOven.mdl",Vector(0,0,0),Angle(0,0,0)}
+}
+
+STRUCT.onInitialize = function(self)
+ print("Initalize called!")
+end
+
+STRUCT.uniquedata = false
+
+STRUCT.onUse = function(self, ply)
+ print("I am the old use function!")
+end
+
+STRUCT.Recipes = {}
+
+STRUCT.timemult = 0.5
+STRUCT.skillease = 0.25
+
+genericMakeFurnace(STRUCT)
+recipieForSmelt(STRUCT.Recipes,"Copper", "Smelt copper ore into copper", "Copper Ore", "Copper", {1,1}, {1,5,10})
+
+print("stone furnace's recipies:")
+PrintTable(STRUCT.Recipes)
+
+registerStructure(STRUCT)