diff options
| author | Scott <scotth0828@gmail.com> | 2016-04-30 20:34:42 -0400 |
|---|---|---|
| committer | Scott <scotth0828@gmail.com> | 2016-04-30 20:34:42 -0400 |
| commit | bdf6cacc1fe7af364b93604253f3229d842d6170 (patch) | |
| tree | 21015081b4d66d45390ba625c09fb84d143f63db /gamemode | |
| parent | e8fc8b5bf824ed3283dede946e66f5fd843d54ff (diff) | |
| parent | c6b56a911622f9a52fd92293074192d1f13d3e96 (diff) | |
| download | gmstranded-bdf6cacc1fe7af364b93604253f3229d842d6170.tar.gz gmstranded-bdf6cacc1fe7af364b93604253f3229d842d6170.tar.bz2 gmstranded-bdf6cacc1fe7af364b93604253f3229d842d6170.zip | |
Merge branch 'master' of ssh://cogarr.net:43/home/git/gmsurvival
Diffstat (limited to 'gamemode')
33 files changed, 532 insertions, 183 deletions
diff --git a/gamemode/cl_init.lua b/gamemode/cl_init.lua index 776f894..6d496ac 100644 --- a/gamemode/cl_init.lua +++ b/gamemode/cl_init.lua @@ -3,6 +3,7 @@ include( "utility.lua") includeFolder("craftablesystem",true) includeFolder("itemsystem",true) includeFolder("client",true) +includeFolder("shared",true) include( "shared.lua" ) diff --git a/gamemode/client/cl_inventory.lua b/gamemode/client/cl_inventory.lua index 94690ac..7578609 100644 --- a/gamemode/client/cl_inventory.lua +++ b/gamemode/client/cl_inventory.lua @@ -25,6 +25,13 @@ local function createPanel() frame:SetTitle( "Inventory" ) frame:MakePopup() frame:SetPos(scrx-invxsize,0) + frame:SetKeyboardInputEnabled(true) + frame:ShowCloseButton(false) + frame.OnKeyCodePressed = function(self, key) + if(key == KEY_Q) then + frame:Close() + end + end local tabsheet = vgui.Create("DPropertySheet", frame) tabsheet:Dock(FILL) @@ -41,6 +48,7 @@ local function createPanel() end --Inventory + local layout = vgui.Create( "DTileLayout", invtab ) layout:SetBaseSize( 64 ) -- Tile size layout:Dock( FILL ) @@ -48,6 +56,9 @@ local function createPanel() layout:MakeDroppable( "unique_name" ) -- Allows us to rearrange children PrintTable(Resources) for k, v in SortedPairs( Resources ) do + if(v == 0) then + continue + end local selection = vgui.Create("DImageButton") if(GMS.Resources[k] == nil) then --This resource is not registered! selection:SetImage("vgui/avatar_default") @@ -59,6 +70,7 @@ local function createPanel() continue else selection:SetImage(GMS.Resources[k].Icon) + selection:SetTooltip(GMS.Resources[k].Description) end selection:SetSize(64,64) @@ -77,13 +89,34 @@ local function createPanel() end layout:Add( selection ) end + + return frame end local invpanel = nil function GM:OnSpawnMenuOpen() - print("Spawn menu hooked correctly") + + if(invpanel == nil) then + invpanel = createPanel() + return + end + if(! invpanel:IsValid()) then + invpanel = createPanel() + return + end +end + +function GM:ReloadSpawnMenu() if(invpanel == nil) then + return + end + if(!invpanel:IsValid()) then + return + end + if(invpanel != nil) then + invpanel:Close() invpanel = createPanel() + return end end diff --git a/gamemode/client/cl_syncronize.lua b/gamemode/client/cl_syncronize.lua index 32d667c..189dd08 100644 --- a/gamemode/client/cl_syncronize.lua +++ b/gamemode/client/cl_syncronize.lua @@ -21,6 +21,7 @@ net.Receive( "gms_SetResource", function( length, pl) Resources[name] = num end print("Finished resource get") + GAMEMODE:ReloadSpawnMenu() end) concommand.Add("gms_cl_printresources",function(ply,cmd,args) diff --git a/gamemode/configure_me.lua b/gamemode/configure_me.lua index 86bbd89..6e26eb9 100644 --- a/gamemode/configure_me.lua +++ b/gamemode/configure_me.lua @@ -4,7 +4,7 @@ jA_cOp, prop_dynamic, Chewgum, Wokkel, robotboy655 Additional content by - Djarex, Apickx + Djarex, Scott, Apickx */ //Make sure that this is the gamemode folder name @@ -26,3 +26,8 @@ GMS.LootableNPCs = { "npc_pigeon", "npc_zombie" } + +//SteamID's of any developers, this list should be empty on production servers! +GMS.Developers = { + "STEAM_0:0:0" //the single-player steamid +} diff --git a/gamemode/init.lua b/gamemode/init.lua index eb00238..5b1fa5a 100644 --- a/gamemode/init.lua +++ b/gamemode/init.lua @@ -4,10 +4,12 @@ include( "init_static.lua") AddCSLuaFolder("client",false) AddCSLuaFolder("craftablesystem",true) AddCSLuaFolder("itemsystem",true) +AddCSLuaFolder("shared",true) includeFolder("server",false) includeFolder("craftablesystem",true) includeFolder("itemsystem",true) +includeFolder("shared",true) AddCSLuaFile( "configure_me.lua" ) @@ -129,7 +131,11 @@ function GM.FindTribeByID( id ) end -- Cancel process -concommand.Add( "gms_cancelprocess", function( ply, cmd, args ) ply:CancelProcess() end ) +concommand.Add( "gms_cancelprocess", function( ply, cmd, args ) + ply:CancelProcess() + + +end ) /* Menu toggles */ function GM:ShowHelp( ply ) end @@ -933,6 +939,7 @@ concommand.Add( "gms_makefire", GM.MakeCampfire ) ---------------------------------------------------------------------------------------------------- */ function GM:PlayerInitialSpawn( ply ) + print("--------Inital spawn called!---------") ply:SetTeam( 1 ) ply.Skills = {} @@ -992,6 +999,7 @@ function GM:PlayerInitialSpawn( ply ) ply.FeatureUnlocks = tbl["unlocks"] ply.MaxResources = ( ply.Skills["Survival"] * 5 ) + 25 + print("Setting MaxResources to " .. ply.MaxResources) ply:SendMessage( "Loaded character successfully.", 3, Color( 255, 255, 255, 255 ) ) ply:SendMessage( "Last visited on " .. tbl.date .. ", enjoy your stay.", 10, Color( 255, 255, 255, 255 ) ) diff --git a/gamemode/itemsystem/common.lua b/gamemode/itemsystem/common.lua index f7d6c72..b002a43 100644 --- a/gamemode/itemsystem/common.lua +++ b/gamemode/itemsystem/common.lua @@ -18,29 +18,80 @@ function startProcessGeneric(player, string, time, ondone) end if(SERVER) then - util.AddNetworkString( "gms_dropresources" ) + util.AddNetworkString( "gms_plantseed" ) end -function genericDropResource(player, resource, ammount) +local function plant(player, resourcename) if(CLIENT) then - net.Start("gms_dropresources") - net.WriteString(resource) - net.WriteInt(ammount,GMS.NETINT_BITCOUNT) + net.Start("gms_plantseed") + net.WriteString(resourcename) net.SendToServer() end if(SERVER) then - if(player.Resources[resource] <= ammount) then - player:SendMessage("You don't have that many to drop!", 3, Color(255, 255, 255, 255)) + 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 - local res = ply:GetResource( Type ) - - if ( ammount > res ) then - ammount = res + if(tbl.OnGrow == nil) then + print(tbl.Name .. " .OnGrow is nil, this might be a bug!") + return end - ply:DropResource( Type, int ) - ply:DecResource( Type, int ) + + 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_dropresources", function(len,pl) - genericDropResource(pl,net.ReadString(),net.ReadInt(GMS.NETINT_BITCOUNT)) +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 diff --git a/gamemode/itemsystem/common_dropable.lua b/gamemode/itemsystem/common_dropable.lua new file mode 100644 index 0000000..94513d3 --- /dev/null +++ b/gamemode/itemsystem/common_dropable.lua @@ -0,0 +1,73 @@ +function genericMakeDroppable(tbl) + if(SERVER) then return end + local drop1 = function(player) + genericDropResource(player,tbl.Name,1) + end + local dropall = function(player) + PrintTable(Resources) + print("Ammount:" .. Resources[tbl.Name]) + genericDropResource(player,tbl.Name,Resources[tbl.Name]) + end + local drophalf = function(player) + genericDropResource(player,tbl.Name,math.ceil(Resources[tbl.Name]/2.0)) + end + local dropx = function(player) + if(SERVER) then return end + local frame = vgui.Create( "DFrame" ) + frame:SetSize( 400, 60 ) + frame:Center() + frame:MakePopup() + + local TextEntry = vgui.Create( "DTextEntry", frame ) -- create the form as a child of frame + TextEntry:SetPos( 20, 30 ) + TextEntry:SetSize( 360, 20 ) + TextEntry:SetText( "Number to drop:" ) + TextEntry.OnEnter = function( self ) + if(tonumber(self:GetValue(),10) == nil) then return end + genericDropResource(player,tbl.Name,self:GetValue()) + frame:Close() + end + + end + if(tbl.Actions == nil) then + tbl.Actions = {} + end + if(tbl.Actions["Drop"] == nil) then + tbl.Actions["Drop"] = {} + end + tbl.Actions["Drop"]["Drop 1"] = drop1 + tbl.Actions["Drop"]["Drop Half"] = drophalf + tbl.Actions["Drop"]["Drop all"] = dropall + tbl.Actions["Drop"]["Drop X"] = dropx +end + + +if(SERVER) then + util.AddNetworkString( "gms_dropresources" ) +end +function genericDropResource(player, resource, ammount) + if(CLIENT) then + net.Start("gms_dropresources") + net.WriteString(resource) + net.WriteInt(ammount,GMS.NETINT_BITCOUNT) + net.SendToServer() + end + if(SERVER) then + if(player.Resources[resource] < ammount) then + player:SendMessage("You don't have that many to drop!", 3, Color(255, 255, 255, 255)) + return + end + local res = player.Resources[resource] + + if ( ammount > res ) then + ammount = res + end + player:DropResource( resource, ammount ) + player:DecResource( resource, ammount ) + end +end +net.Receive( "gms_dropresources", function(len,pl) + local resourcename = net.ReadString() + local resourcenum = net.ReadInt(GMS.NETINT_BITCOUNT) + genericDropResource(pl,resourcename,resourcenum) +end) diff --git a/gamemode/itemsystem/common_plantable.lua b/gamemode/itemsystem/common_plantable.lua new file mode 100644 index 0000000..383d8d2 --- /dev/null +++ b/gamemode/itemsystem/common_plantable.lua @@ -0,0 +1 @@ +print("Hello from common_plantable.lua!") diff --git a/gamemode/itemsystem/items/admantineore.lua b/gamemode/itemsystem/items/admantineore.lua new file mode 100644 index 0000000..2b1ac16 --- /dev/null +++ b/gamemode/itemsystem/items/admantineore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Adamantine Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/anexample.lua b/gamemode/itemsystem/items/anexample.lua index 19cdbd7..100096f 100644 --- a/gamemode/itemsystem/items/anexample.lua +++ b/gamemode/itemsystem/items/anexample.lua @@ -14,5 +14,23 @@ ITEM.Icon = "test.png" --If this item has "unique data", for example batteries that run out of charge ITEM.UniqueData = false +--A table of strings to functions that show up when the player clicks the item in their inventory. +--The you may also use strings to tables of strings to functions (and so on) to make drop-down menus. +--Example: +--[[ +ITEM.Actions = { + "Click me!" = functions(player) print("I was clicked!") end + "Or me!" = functions(player) print("I was clicked by " .. player:Name()) end + "Drop down" = { + "This is an item in a drop down" = function(player) print("Drop1") end + "Drop downs can have more drop downs!" = { + "Drop2" = function(player) print("Drop2") end + "Drop3" = function(player) print("Drop3") end + } + } +} +--]] +ITEM.Actions = {} + --Be sure to register when everything is said and done! GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/baits.lua b/gamemode/itemsystem/items/baits.lua index 47bf1d0..47a6fbb 100644 --- a/gamemode/itemsystem/items/baits.lua +++ b/gamemode/itemsystem/items/baits.lua @@ -1,26 +1,10 @@ ITEM = {} ITEM.Name = "Baits" -ITEM.Description = "Something you can plant!" +ITEM.Description = "Something you can use to fish with! (Consumed automatically)" ITEM.Icon = "test.png" ITEM.UniqueData = false -local drop1 = function(player) - print("Drop 1 called") -end - -local dropall = function(player) - print("Drop all called") -end - -local dropx = function(player) - print("Drop x called") -end - -ITEM.Actions = {} -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx +genericMakeDroppable(ITEM) GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/bananaseeds.lua b/gamemode/itemsystem/items/bananaseeds.lua index 358ed63..4a9d0c0 100644 --- a/gamemode/itemsystem/items/bananaseeds.lua +++ b/gamemode/itemsystem/items/bananaseeds.lua @@ -5,22 +5,22 @@ ITEM.Description = "Something you can plant!" ITEM.Icon = "test.png" ITEM.UniqueData = false -local drop1 = function(player) - print("Drop 1 called") -end -local dropall = function(player) - print("Drop all called") -end +--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 dropx = function(player) - print("Drop x called") -end + 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 -ITEM.Actions = {} -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx + 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) GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/berry.lua b/gamemode/itemsystem/items/berry.lua index 2021ffd..77a3a35 100644 --- a/gamemode/itemsystem/items/berry.lua +++ b/gamemode/itemsystem/items/berry.lua @@ -9,45 +9,30 @@ if(SERVER) then util.AddNetworkString( "gms_eatberry" ) end -local eat = function(ln, player) - if(CLIENT) then - net.Start("gms_eatberry") - net.SendToServer() - end - if(SERVER) then - if(player.Resources[ITEM.Name] <= 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) - end -end -net.Receive( "gms_eatberry", eat) - -local drop1 = function(player) - genericDropResource(player,ITEM.Name,1) +local eat_client = function(ln, player) + net.Start("gms_eatberry") + net.SendToServer() end -local dropall = function(player) - genericDropResource(player,ITEM.Name,9999) +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 dropx = function(player) - print("Drop x called") +local eat = function(ln, player) + 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 = {} -ITEM.Actions["EatBerry"] = eat - -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx +genericMakeDroppable(ITEM) +ITEM.Actions["Eat Berry"] = eat_client GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/copperore.lua b/gamemode/itemsystem/items/copperore.lua new file mode 100644 index 0000000..c7e1fea --- /dev/null +++ b/gamemode/itemsystem/items/copperore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Copper Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/goldore.lua b/gamemode/itemsystem/items/goldore.lua new file mode 100644 index 0000000..a5b1a53 --- /dev/null +++ b/gamemode/itemsystem/items/goldore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Gold Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/grainseeds.lua b/gamemode/itemsystem/items/grainseeds.lua index 9b22a0b..5b7ba3c 100644 --- a/gamemode/itemsystem/items/grainseeds.lua +++ b/gamemode/itemsystem/items/grainseeds.lua @@ -5,22 +5,13 @@ ITEM.Description = "Something you can plant, or mash up into flour" ITEM.Icon = "test.png" ITEM.UniqueData = false -local drop1 = function(player) - print("Drop 1 called") -end - -local dropall = function(player) - print("Drop all called") -end -local dropx = function(player) - print("Drop x called") +--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 - -ITEM.Actions = {} -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx +genericMakePlantable(ITEM) +genericMakeDroppable(ITEM) GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/herbs.lua b/gamemode/itemsystem/items/herbs.lua index 9db5417..f0b9dc8 100644 --- a/gamemode/itemsystem/items/herbs.lua +++ b/gamemode/itemsystem/items/herbs.lua @@ -1,26 +1,10 @@ ITEM = {} ITEM.Name = "Herbs" -ITEM.Description = "Something you can plant!" +ITEM.Description = "Blech, vegtables..." ITEM.Icon = "test.png" ITEM.UniqueData = false -local drop1 = function(player) - print("Drop 1 called") -end - -local dropall = function(player) - print("Drop all called") -end - -local dropx = function(player) - print("Drop x called") -end - -ITEM.Actions = {} -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx +genericMakeDroppable(ITEM) GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/ironore.lua b/gamemode/itemsystem/items/ironore.lua new file mode 100644 index 0000000..b94d9eb --- /dev/null +++ b/gamemode/itemsystem/items/ironore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Iron Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/melonseeds.lua b/gamemode/itemsystem/items/melonseeds.lua index 874ac46..8d82f7a 100644 --- a/gamemode/itemsystem/items/melonseeds.lua +++ b/gamemode/itemsystem/items/melonseeds.lua @@ -5,22 +5,20 @@ ITEM.Description = "Something you can plant!" ITEM.Icon = "test.png" ITEM.UniqueData = false -local drop1 = function(player) - print("Drop 1 called") -end +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 dropall = function(player) - print("Drop all called") -end + 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 -local dropx = function(player) - print("Drop x called") + 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 - -ITEM.Actions = {} -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx +genericMakeDroppable(ITEM) +genericMakePlantable(ITEM) GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/mithirilore.lua b/gamemode/itemsystem/items/mithirilore.lua new file mode 100644 index 0000000..da3dea8 --- /dev/null +++ b/gamemode/itemsystem/items/mithirilore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Mithril Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/orangeseeds.lua b/gamemode/itemsystem/items/orangeseeds.lua index 33fd698..c9c3963 100644 --- a/gamemode/itemsystem/items/orangeseeds.lua +++ b/gamemode/itemsystem/items/orangeseeds.lua @@ -5,22 +5,28 @@ ITEM.Description = "Something you can plant!" ITEM.Icon = "test.png" ITEM.UniqueData = false -local drop1 = function(player) - print("Drop 1 called") -end +--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 -local dropall = function(player) - print("Drop all called") -end + 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 -local dropx = function(player) - print("Drop x called") + 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 -ITEM.Actions = {} -ITEM.Actions["Drop"] = {} -ITEM.Actions["Drop"]["Drop 1"] = drop1 -ITEM.Actions["Drop"]["Drop all"] = dropall -ITEM.Actions["Drop"]["Drop X"] = dropx +genericMakePlantable(ITEM) +genericMakeDroppable(ITEM) GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/platinumore.lua b/gamemode/itemsystem/items/platinumore.lua new file mode 100644 index 0000000..14b3f62 --- /dev/null +++ b/gamemode/itemsystem/items/platinumore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Platinum Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/silverore.lua b/gamemode/itemsystem/items/silverore.lua new file mode 100644 index 0000000..f0b0505 --- /dev/null +++ b/gamemode/itemsystem/items/silverore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Silver Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(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!") diff --git a/gamemode/itemsystem/items/steelore.lua b/gamemode/itemsystem/items/steelore.lua new file mode 100644 index 0000000..c245ade --- /dev/null +++ b/gamemode/itemsystem/items/steelore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Steel Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/stone.lua b/gamemode/itemsystem/items/stone.lua new file mode 100644 index 0000000..d288d27 --- /dev/null +++ b/gamemode/itemsystem/items/stone.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Stone" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/strangestone.lua b/gamemode/itemsystem/items/strangestone.lua new file mode 100644 index 0000000..9d684ce --- /dev/null +++ b/gamemode/itemsystem/items/strangestone.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Strange Stone" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/techore.lua b/gamemode/itemsystem/items/techore.lua new file mode 100644 index 0000000..cc494e6 --- /dev/null +++ b/gamemode/itemsystem/items/techore.lua @@ -0,0 +1,10 @@ +ITEM = {} + +ITEM.Name = "Tech Ore" +ITEM.Description = "Something you can craft with!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +genericMakeDroppable(ITEM) + +GMS.RegisterResource(ITEM) diff --git a/gamemode/itemsystem/items/waterbottle.lua b/gamemode/itemsystem/items/waterbottle.lua new file mode 100644 index 0000000..df43749 --- /dev/null +++ b/gamemode/itemsystem/items/waterbottle.lua @@ -0,0 +1,37 @@ +ITEM = {} + +ITEM.Name = "Water Bottle" +ITEM.Description = "A delicious edible!" +ITEM.Icon = "test.png" +ITEM.UniqueData = false + +if(SERVER) then + util.AddNetworkString( "gms_drinkwaterbottle" ) +end + +local eat_client = function(ln, player) + net.Start("gms_drinkwaterbottle") + net.SendToServer() +end + +local finisheddrink = function() + player:DecResource( "Water Bottle", 1 ) + player:SendMessage( "You're a little less hungry and thirsty now.", 3, Color( 10, 200, 10, 255 ) ) + --Set thirst + player:SetThirst(math.Clamp(player.Thirst+100,0,1000)) +end + +local drink = function(ln, player) + if(player.Resources["Water Bottle"] <= 0) then + player:SendMessage( "You don't have enough to do that!", 3, Color( 10, 200, 10, 255 ) ) + return + end + startProcessGeneric(player,"Drinking some water",1,finisheddrink) +end +net.Receive( "gms_drinkwaterbottle", drink) + +ITEM.Actions = {} +genericMakeDroppable(ITEM) +ITEM.Actions["Drink Water"] = drink_client + +GMS.RegisterResource(ITEM) diff --git a/gamemode/processes.lua b/gamemode/processes.lua index 4b7fc15..58a2b48 100644 --- a/gamemode/processes.lua +++ b/gamemode/processes.lua @@ -93,11 +93,11 @@ function PROCESS:OnStart() if ( plant ) then owner = plant:GetNWEntity( "plantowner" ) end if ( self.Data.Entity:GetModel() == "models/props_junk/watermelon01.mdl" ) then - self.SideGain = "Melon_Seeds" + self.SideGain = "Melon Seeds" elseif ( self.Data.Entity:GetModel() == "models/props/cs_italy/orange.mdl" ) then - self.SideGain = "Orange_Seeds" + self.SideGain = "Orange Seeds" elseif ( self.Data.Entity:GetModel() == "models/props/cs_italy/bananna_bunch.mdl" ) then - self.SideGain = "Banana_Seeds" + self.SideGain = "Banana Seeds" end if ( plant ) then @@ -122,7 +122,7 @@ function PROCESS:OnStop() local num = math.random( numstart, numto ) if ( num ~= 0 ) then self.Owner:IncResource( self.SideGain, num ) - self.Owner:SendMessage( string.gsub( self.SideGain, "_", " " ) .. " ( " .. num .. "x )", 3, Color( 10, 200, 10, 255 ) ) + self.Owner:SendMessage( self.SideGain .. " ( " .. num .. "x )", 3, Color( 10, 200, 10, 255 ) ) self.Owner:EmitSound( Sound( "items/ammo_pickup.wav" ) ) end end @@ -407,7 +407,7 @@ function PROCESS:OnStop() if ( num > 50 - self.Owner:GetSkill( "Harvesting" ) - add ) then local amount = math.random( 1, 2 ) - self.Owner:IncResource( "Grain_Seeds", amount ) + self.Owner:IncResource( "Grain Seeds", amount ) self.Owner:IncXP( "Harvesting", math.Clamp( math.Round( 50 / self.Owner:GetSkill( "Harvesting" ) ), 1, 1000 ) ) self.Owner:SendMessage( "Grain Seeds ( " .. amount .. "x )", 3, Color( 10, 200, 10, 255 ) ) self.Owner:EmitSound( Sound( "items/ammo_pickup.wav" ) ) @@ -615,34 +615,34 @@ function PROCESS:OnStop() self.Owner:IncResource( "Stone", num3 ) self.Owner:SendMessage( "Stone ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 2 ) then - self.Owner:IncResource( "Copper_Ore", num3 ) + self.Owner:IncResource( "Copper Ore", num3 ) self.Owner:SendMessage( "Copper Ore ( "..num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 3 ) then - self.Owner:IncResource( "Iron_Ore", num3 ) + self.Owner:IncResource( "Iron Ore", num3 ) self.Owner:SendMessage( "Iron Ore ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 4 ) then - self.Owner:IncResource( "Tech_Ore", num3 ) + self.Owner:IncResource( "Tech Ore", num3 ) self.Owner:SendMessage( "Tech Ore ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 5 ) then - self.Owner:IncResource( "Silver_Ore", num3 ) + self.Owner:IncResource( "Silver Ore", num3 ) self.Owner:SendMessage( "Silver Ore ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 6 ) then - self.Owner:IncResource( "Gold_Ore", num3 ) + self.Owner:IncResource( "Gold Ore", num3 ) self.Owner:SendMessage( "Gold Ore ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 7 ) then - self.Owner:IncResource( "Steel_Ore", num3 ) + self.Owner:IncResource( "Steel Ore", num3 ) self.Owner:SendMessage( "Steel Ore ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 8 ) then - self.Owner:IncResource( "Platinum_Ore", num3 ) + self.Owner:IncResource( "Platinum Ore", num3 ) self.Owner:SendMessage( "Platinum Ore ( " .. num3 .. "x )", 3, Color( 10, 200, 10, 255 ) ) elseif ( num2 == 85 ) then - self.Owner:IncResource( "Strange_Stone", num3 ) + self.Owner:IncResource( "Strange Stone", num3 ) self.Owner:SendMessage( "Strange Stone ( " .. num3 .. "x ) ", 3, Color( 0, 247, 255, 255) ) elseif ( num2 == 9 ) then - self.Owner:IncResource( "Mithril_Ore", num3 ) + self.Owner:IncResource( "Mithril Ore", num3 ) self.Owner:SendMessage( "Mithril Ore ( " .. num3 .. "x ) ", 3, Color(10, 200, 10, 255) ) elseif ( num2 == 10) then - self.Owner:IncResource( "Adamantine_Ore", num3 ) + self.Owner:IncResource( "Adamantine Ore", num3 ) self.Owner:SendMessage( "Adamantine Ore( " .. num3 .. "x ) ", 3, Color(255,0, 111, 255) ) end @@ -698,10 +698,10 @@ GMS.RegisterProcess( "SproutCollect", PROCESS ) ---------------------------------------------------------*/ /*Alright, let's refactor this planting code*/ local plant_generic = { - {"Watermelon","Melon_Seeds","melon","PlantMelon"}, - {"Banana","Banana_Seeds","banana","PlantBanana"}, - {"Orange","Orange_Seeds","orange","PlantOrange"}, - {"Grain","Grain_Seeds","grain","PlantGrain"}, + {"Watermelon","Melon Seeds","melon","PlantMelon"}, + {"Banana","Banana Seeds","banana","PlantBanana"}, + {"Orange","Orange Seeds","orange","PlantOrange"}, + {"Grain","Grain Seeds","grain","PlantGrain"}, {"Berry Bush","Berries","berry","PlantBush"}, {"Tree","Sprouts","tree","PlantTree"}, } @@ -844,11 +844,11 @@ end function PROCESS:OnStop() if (self.Owner:GetActiveWeapon():GetClass() == "gms_bucket") then - self.Owner:IncResource( "Water_Bottles", 10 ) + self.Owner:IncResource( "Water Bottles", 10 ) self.Owner:SendMessage( "Water Bottle ( 10x )", 3, Color( 10, 200, 10, 255 ) ) self.Owner:EmitSound( Sound( "ambient/water/water_spray" .. math.random( 1, 3 ) .. ".wav" ) ) else - self.Owner:IncResource( "Water_Bottles", 1 ) + self.Owner:IncResource( "Water Bottles", 1 ) self.Owner:SendMessage( "Water Bottle ( 1x )", 3, Color( 10, 200, 10, 255 ) ) self.Owner:EmitSound( Sound( "ambient/water/water_spray" .. math.random( 1, 3 ) .. ".wav" ) ) end diff --git a/gamemode/server/player_functions.lua b/gamemode/server/player_functions.lua index b335553..09de491 100644 --- a/gamemode/server/player_functions.lua +++ b/gamemode/server/player_functions.lua @@ -150,9 +150,9 @@ function PlayerMeta:SetResource( resource, int ) PrintTable(resource) print(int) - if ( !self.Resources[resource] ) then self.Resources[resource] = 0 end + --if ( !self.Resources[resource] ) then self.Resources[resource] = 0 end - self.Resources[resource] = int + --self.Resources[resource] = int if(net.Start("gms_SetResource",false)) then net.WriteString(resource.Name) @@ -186,6 +186,10 @@ function PlayerMeta:IncResource( resource, int ) if ( !self.Resources[resource] ) then self.Resources[resource] = 0 end local all = self:GetAllResources() local max = self.MaxResources + print("When adding resources, max resource is:") + print(max) + print("All is:") + print(all) if ( all + int > max ) then self.Resources[resource] = self.Resources[resource] + ( max - all ) @@ -196,10 +200,12 @@ function PlayerMeta:IncResource( resource, int ) end self:SetResource(resource, self:GetResource( resource )) + print("Now all is:") + print(self:GetAllResources()) end function PlayerMeta:DecResource( resource, int ) - if ( !self.Resources[resource] ) then self.Resources[resource] = 0 end + if ( self.Resources[resource] == nil ) then self.Resources[resource] = 0 end self.Resources[resource] = self.Resources[resource] - int local r = self.Resources[resource] @@ -215,12 +221,14 @@ function PlayerMeta:DecResource( resource, int ) end function PlayerMeta:GetAllResources() + print("Totaling data in:") + PrintTable(self.Resources) local num = 0 for k, v in pairs( self.Resources ) do num = num + v end - + print("Total was " .. num) return num end @@ -290,6 +298,9 @@ function PlayerMeta:GetBuildingSite() end function PlayerMeta:DropResource( resource, int ) + print("PlayerMeta:DropResource") + print("Resource:" .. resource) + print("Ammount:" .. int) local nearby = {} for k, v in pairs( ents.FindByClass( "gms_resource*" ) ) do @@ -653,18 +664,9 @@ end function PlayerMeta:CancelProcess() if ( !self.InProcess ) then return end - - local v = self.ProcessTable - if ( !v.Cancel ) then return end - - if ( v.Owner and v.Owner != NULL and IsValid( v.Owner ) ) then - v.Owner:Freeze( false ) - v.Owner:StopProcessBar() - v.Owner.InProcess = false - v.Owner:SendMessage( "Cancelled.", 3, Color( 200, 0, 0, 255 ) ) - end - - v.IsStopped = true - timer.Destroy( "GMS_ProcessTimer_" .. v.TimerID ) - GAMEMODE:RemoveProcessThink( v ) + timer.Destroy("process") + self:Freeze(false) + self.InProcess = false + self:SendMessage( "Cancelled.", 3, Color( 200, 0, 0, 255 ) ) + self:StopProcessBar() end diff --git a/gamemode/shared.lua b/gamemode/shared.lua index 2cc0234..5588e1f 100644 --- a/gamemode/shared.lua +++ b/gamemode/shared.lua @@ -93,7 +93,11 @@ end local PlayerMeta = FindMetaTable( "Player" ) function PlayerMeta:IsDeveloper() - if ( self:SteamID() == "STEAM_0:0:18313012" ) then return true end + for k,v in pairs(GMS.Developers) do + if(self:SteamID() == v) then + return true + end + end return false end diff --git a/gamemode/shared/developer_cheats.lua b/gamemode/shared/developer_cheats.lua new file mode 100644 index 0000000..e8c4fbb --- /dev/null +++ b/gamemode/shared/developer_cheats.lua @@ -0,0 +1,56 @@ +--This file contains things to help developers debug while working on the code. All this stuff relies on the Developers table in configre_me.lua + +local pmeta = FindMetaTable( "Player" ) + +function pmeta:IsDeveloper() + for k,v in pairs(GMS.Developers) do + if(self:SteamID() == v) then + return true + end + end + return false +end + +-----------------Print inventory--------------------- +local printServerResources = function(ply,cmd,args) + if(CLIENT or (!ply:IsDeveloper())) then return end + PrintTable(ply.Resources) +end + +local printServerResourcesAuto = function(cmd,args) end + +concommand.Add("gms_sv_printSvRes",printServerResources,printServerResourcesAuto,"Prints the server representation of your resources") + +local printClientResources = function(ply,cmd,args) + if(SERVER or (!ply:IsDeveloper())) then return end + PrintTable(Resources) +end + +local printClientResourcesAuto = function(cmd,args) end + +concommand.Add("gms_sv_printClRes",printClientResources,printClientResourcesAuto,"Prints the client representation of your resources") + +------------------Give weapons---------------------- +local giveWeapon = function(ply,cmd,args) + if(!ply:IsDeveloper()) then return end + if(weapons.Get(args[1]) == nil) then + print("Could not find weapon:" .. args[1]) + return + end + ply:Give(args[1]) +end + +local giveWeaponAuto = function(cmd,args) + local possibles = {} + local needle = string.Trim(args) + print("\"" .. needle .. "\"") + for k,v in pairs(weapons.GetList()) do + local fplace = string.find(v.ClassName,needle) + if(fplace != nil) then + table.insert(possibles,cmd .. " " .. v.ClassName) + end + end + return possibles +end + +concommand.Add("gms_sv_givewep",giveWeapon,giveWeaponAuto) |
