summaryrefslogtreecommitdiff
path: root/gamemode/itemsystem/common_plantable.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/itemsystem/common_plantable.lua')
-rw-r--r--gamemode/itemsystem/common_plantable.lua85
1 files changed, 84 insertions, 1 deletions
diff --git a/gamemode/itemsystem/common_plantable.lua b/gamemode/itemsystem/common_plantable.lua
index 383d8d2..5e3ad55 100644
--- a/gamemode/itemsystem/common_plantable.lua
+++ b/gamemode/itemsystem/common_plantable.lua
@@ -1 +1,84 @@
-print("Hello from common_plantable.lua!")
+--[[
+You can call genericMakePlantable(ITEM) on items to make them have a plant option.
+Before genericMakePlantable get called, be sure the item has an .GrowTime =number
+and a .OnGrow = function(player)
+]]
+
+if(SERVER) then
+ util.AddNetworkString( "gms_plantseed" )
+end
+local function plant(player, resourcename)
+ if(CLIENT) then
+ net.Start("gms_plantseed")
+ net.WriteString(resourcename)
+ net.SendToServer()
+ end
+ if(SERVER) then
+ print("Planting " .. resourcename)
+ local tbl = GMS.Resources[resourcename]
+ print("Plant table:")
+ PrintTable(tbl)
+ if(tbl.GrowTime == nil) then
+ print(tbl.Name .. " .GrowTime is nil, this might be a bug!")
+ return
+ end
+ if(tbl.OnGrow == nil) then
+ print(tbl.Name .. " .OnGrow is nil, this might be a bug!")
+ return
+ end
+
+ local tr = player:GetEyeTrace()
+ local pent = ents.Create("gms_generic_plantable")
+ pent:SetPos(tr.HitPos)
+ pent.GrowTime = tbl.GrowTime
+ pent.OnGrow = tbl.OnGrow
+ print("Setting seed's owner to:")
+ print(player)
+ pent:SetOwner(player)
+ pent:Spawn()
+ end
+end
+net.Receive( "gms_plantseed", function(len,pl)
+ local resourcename = net.ReadString()
+ plant(pl,resourcename)
+end)
+
+function genericMakePlantable( tbl )
+ local plant = function(player)
+ plant(player,tbl.Name)
+ end
+ if(tbl.Actions == nil) then
+ tbl.Actions = {}
+ end
+ tbl.Actions["Plant " .. tbl.Name] = plant
+end
+
+GAMEMODE = GAMEMODE or {}
+function GAMEMODE.MakeGenericPlantChild( ply, pos, mdl, parent )
+ local ent = ents.Create( "prop_physics" )
+ ent:SetAngles( Angle( 0, math.random( 0, 360 ) , 0 ) )
+ ent:SetModel( mdl )
+ ent:SetPos( pos )
+ ent:Spawn()
+ ent.IsPlantChild = true
+
+ ent:SetHealth( 99999 )
+ ent:Fadein()
+
+ local phys = ent:GetPhysicsObject()
+ if ( phys ) then phys:EnableMotion( false ) end
+
+ ent.PlantParent = parent
+ ent.PlantParentName = parent:GetName()
+ parent.Children = parent.Children + 1
+
+ if ( IsValid( ply ) ) then
+ SPropProtection.PlayerMakePropOwner( ply, ent )
+ else
+ ent:SetNWString( "Owner", "World" )
+ end
+
+ ent.PhysgunDisabled = true
+
+ return ent
+end