From dc10ffe19c42aba8e365e2651c8368f5300531e9 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sun, 1 May 2016 09:30:17 -0400 Subject: Moved item planting code into it's own file --- gamemode/itemsystem/common_plantable.lua | 85 +++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 1 deletion(-) (limited to 'gamemode/itemsystem/common_plantable.lua') 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 -- cgit v1.2.3-70-g09d2