From 603b64b1a93b36f04d25018ec3f53b16dcd84019 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 30 Apr 2016 15:35:22 -0400 Subject: Fixed plant eating --- gamemode/itemsystem/common.lua | 69 ++++++++++++++++++++++++++++++- gamemode/itemsystem/common_dropable.lua | 2 - gamemode/itemsystem/items/bananaseeds.lua | 15 +++++++ gamemode/itemsystem/items/berry.lua | 35 ++++++++-------- gamemode/itemsystem/items/grainseeds.lua | 6 +++ gamemode/itemsystem/items/herbs.lua | 2 +- gamemode/itemsystem/items/melonseeds.lua | 13 ++++++ gamemode/itemsystem/items/orangeseeds.lua | 21 ++++++++++ gamemode/itemsystem/items/sprout.lua | 1 + 9 files changed, 142 insertions(+), 22 deletions(-) create mode 100644 gamemode/itemsystem/items/sprout.lua (limited to 'gamemode/itemsystem') diff --git a/gamemode/itemsystem/common.lua b/gamemode/itemsystem/common.lua index 5a47c24..b002a43 100644 --- a/gamemode/itemsystem/common.lua +++ b/gamemode/itemsystem/common.lua @@ -17,9 +17,44 @@ function startProcessGeneric(player, string, time, ondone) end) end -local function plant(player, planttype) - print("Plant method called!") +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) @@ -30,3 +65,33 @@ function genericMakePlantable( tbl ) 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 diff --git a/gamemode/itemsystem/common_dropable.lua b/gamemode/itemsystem/common_dropable.lua index 2b8446d..94513d3 100644 --- a/gamemode/itemsystem/common_dropable.lua +++ b/gamemode/itemsystem/common_dropable.lua @@ -69,7 +69,5 @@ end net.Receive( "gms_dropresources", function(len,pl) local resourcename = net.ReadString() local resourcenum = net.ReadInt(GMS.NETINT_BITCOUNT) - print("resourcename:" .. resourcename) - print("resourcenum:" .. resourcenum) genericDropResource(pl,resourcename,resourcenum) end) diff --git a/gamemode/itemsystem/items/bananaseeds.lua b/gamemode/itemsystem/items/bananaseeds.lua index 72e14b0..4a9d0c0 100644 --- a/gamemode/itemsystem/items/bananaseeds.lua +++ b/gamemode/itemsystem/items/bananaseeds.lua @@ -5,6 +5,21 @@ ITEM.Description = "Something you can plant!" ITEM.Icon = "test.png" ITEM.UniqueData = false + +--Things needed to make something plantable +ITEM.GrowTime = 1 +ITEM.OnGrow = function(self, aor, owner) + local plant = GAMEMODE.MakeGenericPlant( owner, self:GetPos() + Vector( 0, 0, -3 ), "models/props/de_dust/du_palm_tree01_skybx.mdl" ) + plant.Children = 0 + + local num = 1 + if ( IsValid( ply ) && ply:HasUnlock( "Adept_Farmer" ) ) then num = num + math.random( 0, 1 ) end + if ( IsValid( ply ) && ply:HasUnlock( "Expert_Farmer" ) ) then num = num + math.random( 0, 2 ) end + + for i = 1, num do + GAMEMODE.MakeGenericPlantChild( owner, self:GetPos() + Vector( math.random( -7, 7 ), math.random( -7, 7 ), math.random( 48, 55 ) ), "models/props/cs_italy/bananna_bunch.mdl", plant ) + end +end genericMakePlantable(ITEM) genericMakeDroppable(ITEM) diff --git a/gamemode/itemsystem/items/berry.lua b/gamemode/itemsystem/items/berry.lua index acf018d..77a3a35 100644 --- a/gamemode/itemsystem/items/berry.lua +++ b/gamemode/itemsystem/items/berry.lua @@ -9,29 +9,30 @@ if(SERVER) then util.AddNetworkString( "gms_eatberry" ) end +local eat_client = function(ln, player) + net.Start("gms_eatberry") + net.SendToServer() +end + +local finishedeating = function() + player:DecResource( "Berries", 1 ) + player:SendMessage( "You're a little less hungry and thirsty now.", 3, Color( 10, 200, 10, 255 ) ) + --Set hunger and thirst + player:SetFood(math.Clamp(player.Hunger+100,0,1000)) + player:SetThirst(math.Clamp(player.Thirst+100,0,1000)) +end + local eat = function(ln, player) - if(CLIENT) then - net.Start("gms_eatberry") - net.SendToServer() - end - if(SERVER) then - if(player.Resources["Berries"] <= 0) then - player:SendMessage( "You don't have enough to do that!", 3, Color( 10, 200, 10, 255 ) ) - return - end - startProcessGeneric(player,"Eating some berries",3,function() - player:DecResource( "Berries", 1 ) - player:SendMessage( "You're a little less hungry and thirsty now.", 3, Color( 10, 200, 10, 255 ) ) - --Set hunger and thirst - player:SetFood(math.Clamp(player.Hunger+100,0,1000)) - player:SetThirst(math.Clamp(player.Thirst+100,0,1000)) - end) + if(player.Resources["Berries"] <= 0) then + player:SendMessage( "You don't have enough to do that!", 3, Color( 10, 200, 10, 255 ) ) + return end + startProcessGeneric(player,"Eating some berries",3,finishedeating) end net.Receive( "gms_eatberry", eat) ITEM.Actions = {} genericMakeDroppable(ITEM) -ITEM.Actions["Eat Berry"] = eat +ITEM.Actions["Eat Berry"] = eat_client GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/grainseeds.lua b/gamemode/itemsystem/items/grainseeds.lua index 9057df8..5b7ba3c 100644 --- a/gamemode/itemsystem/items/grainseeds.lua +++ b/gamemode/itemsystem/items/grainseeds.lua @@ -5,6 +5,12 @@ ITEM.Description = "Something you can plant, or mash up into flour" ITEM.Icon = "test.png" ITEM.UniqueData = false + +--Things needed to make something plantable +ITEM.GrowTime = 1 +ITEM.OnGrow = function(self, aor, owner) + GAMEMODE.MakeGenericPlant( owner, self:GetPos() + Vector( math.random( -10, 10 ), math.random( -10, 10 ), 0 ), "models/props_foliage/cattails.mdl" ) +end genericMakePlantable(ITEM) genericMakeDroppable(ITEM) diff --git a/gamemode/itemsystem/items/herbs.lua b/gamemode/itemsystem/items/herbs.lua index c9339ce..f0b9dc8 100644 --- a/gamemode/itemsystem/items/herbs.lua +++ b/gamemode/itemsystem/items/herbs.lua @@ -1,7 +1,7 @@ ITEM = {} ITEM.Name = "Herbs" -ITEM.Description = "Something you can plant!" +ITEM.Description = "Blech, vegtables..." ITEM.Icon = "test.png" ITEM.UniqueData = false diff --git a/gamemode/itemsystem/items/melonseeds.lua b/gamemode/itemsystem/items/melonseeds.lua index 8ddaea5..8d82f7a 100644 --- a/gamemode/itemsystem/items/melonseeds.lua +++ b/gamemode/itemsystem/items/melonseeds.lua @@ -5,6 +5,19 @@ ITEM.Description = "Something you can plant!" ITEM.Icon = "test.png" ITEM.UniqueData = false +ITEM.GrowTime = 1 +ITEM.OnGrow = function(self, aor, owner) + local plant = GAMEMODE.MakeGenericPlant( owner, self:GetPos() + Vector( 0, 0, 13 ), "models/props/CS_militia/fern01.mdl" ) + plant.Children = 0 + + local num = 1 + if ( IsValid( ply ) && ply:HasUnlock( "Adept_Farmer" ) ) then num = num + math.random( 0, 1 ) end + if ( IsValid( ply ) && ply:HasUnlock( "Expert_Farmer" ) ) then num = num + math.random( 0, 2 ) end + + for i = 1, num do + GAMEMODE.MakeGenericPlantChild( owner, self:GetPos() + Vector( math.random( -25, 25 ), math.random( -25, 25 ), math.random( 5, 7 ) ), "models/props_junk/watermelon01.mdl", plant ) + end +end genericMakeDroppable(ITEM) genericMakePlantable(ITEM) diff --git a/gamemode/itemsystem/items/orangeseeds.lua b/gamemode/itemsystem/items/orangeseeds.lua index 01122c3..c9c3963 100644 --- a/gamemode/itemsystem/items/orangeseeds.lua +++ b/gamemode/itemsystem/items/orangeseeds.lua @@ -5,6 +5,27 @@ ITEM.Description = "Something you can plant!" ITEM.Icon = "test.png" ITEM.UniqueData = false +--Things needed to make something plantable +ITEM.GrowTime = 1 +ITEM.OnGrow = function(self, aor, owner) + print("Owner:") + print(owner) + local plant = GAMEMODE.MakeGenericPlant( owner, self:GetPos() + Vector( 0, 0, -12 ), "models/props/cs_office/plant01_p1.mdl" ) + plant.Children = 0 + + plant:SetCollisionGroup( 0 ) + plant:SetSolid( SOLID_NONE ) + plant.Children = 0 + + local num = 1 + if ( IsValid( owner ) && owner:HasUnlock( "Adept_Farmer" ) ) then num = num + math.random( 0, 1 ) end + if ( IsValid( owner ) && owner:HasUnlock( "Expert_Farmer" ) ) then num = num + math.random( 0, 2 ) end + + for i = 1, num do + GAMEMODE.MakeGenericPlantChild( owner, self:GetPos() + Vector( math.random( -5, 5 ), math.random( -5, 5 ), math.random( 13, 30 ) ), "models/props/cs_italy/orange.mdl", plant ) + end +end + genericMakePlantable(ITEM) genericMakeDroppable(ITEM) diff --git a/gamemode/itemsystem/items/sprout.lua b/gamemode/itemsystem/items/sprout.lua new file mode 100644 index 0000000..218ff2c --- /dev/null +++ b/gamemode/itemsystem/items/sprout.lua @@ -0,0 +1 @@ +print("Hello from sprout.lua!") -- cgit v1.2.3-70-g09d2