Hey, I’m working on a simple menu that the player will use to choose their team, and I’m using the net library to send information between the client and server. However, whenever the server receives the client’s info, it always receives 0. Here is my code:
init.lua
-- /// FILES ///
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
AddCSLuaFile("cl_menus.lua")
--include("init.lua")
include("shared.lua")
include("player.lua")
-- /// END FILES ///
-- /// NETWORKING ///
util.AddNetworkString("cl_OpenTeamMenu")
util.AddNetworkString("sv_OpenTeamMenu")
-- /// END NETWORKING ///
function GM:PlayerConnect( name, ip )
print("Player: " .. name .. ", has joined the game.")
end
function GM:PlayerInitialSpawn( ply )
print("Player: " .. ply:Nick() .. " has spawned.")
GAMEMODE:SetPlayerSpeed( ply, 225, 350 )
net.Start("cl_OpenTeamMenu")
net.Send(ply)
net.Receive("sv_OpenTeamMenu", function( len )
TeamResult = net.ReadFloat()
print( TeamResult )
ply:SetGamemodeTeam( TeamResult )
end )
end
hook.Add( "Player Spawn", "playerSetSpeedtest", playerSetSpeed )
function GM:PlayerSpawn( ply )
n = ply:Team()
ply:SetGamemodeTeam( n )
ply:AllowFlashlight(true)
end
function GM:PlayerAuthed( ply, steamID, uniqueID )
print("Player: " .. ply:Nick() .. " has been authorized.")
end
function GM:PlayerShouldTakeDamage( ply, victim )
if ply:IsPlayer() or ply:IsAdmin() or ply:IsSuperAdmin() then
if ply:Team() == victim:Team() then
return false
end
end
return true
end
cl_menus.lua
net.Receive("cl_OpenTeamMenu", function() OpenTeamMenu() end)
function OpenTeamMenu()
local ply = LocalPlayer()
-- Background
local BackGround = vgui.Create("DFrame")
BackGround:SetSize(600, 150)
BackGround:SetPos( (ScrW()/2)-(BackGround:GetWide()/2),(ScrH()/3)-(BackGround:GetTall()/2) ) -- Set the position to center of the screen
BackGround:SetTitle("Team Selection")
BackGround:SetVisible(true)
BackGround:SetDraggable(false)
BackGround:ShowCloseButton(true) -- Don't forget to set this to false on initial run!
BackGround:MakePopup()
-- List
List = vgui.Create("DPanelList", BackGround)
List:SetSize(560, 180)
List:SetPos(20, 40)
List:SetSpacing(10) -- Set spacing between items
List:EnableHorizontal(false) -- Only allow vertical items
List:EnableVerticalScrollbar(true) -- Allow scrollbar if y axis is exceeded
-- Team 1 Button
local Team1 = vgui.Create("DButton")
Team1:SetText("SWAT")
Team1:SetSize(560, 40)
Team1.Paint = function()
surface.SetDrawColor(70, 70, 255) -- Inside of box
surface.DrawRect(0, 0, Team1:GetWide(), Team1:GetTall())
surface.SetDrawColor(255, 255, 255) -- Outline of box
surface.DrawOutlinedRect(0, 0, Team1:GetWide(), Team1:GetTall())
end
Team1.DoClick = function()
TeamResult = 0 -- Team 1 is entry 0 in the teams table; send this to server
TeamMenuResult()
end
List:AddItem(Team1) -- Add to list
-- Team 2 Button
local Team2 = vgui.Create("DButton")
Team2:SetText("Rebels")
Team2:SetSize(560, 40)
Team2.Paint = function()
surface.SetDrawColor(255, 70, 70) -- Inside of box
surface.DrawRect(0, 0, Team1:GetWide(), Team1:GetTall())
surface.SetDrawColor(255, 255, 255) -- Outline of box
surface.DrawOutlinedRect(0, 0, Team1:GetWide(), Team1:GetTall())
end
Team2.DoClick = function()
TeamResult = 1 -- Team 2 is entry 1 in the teams table; send this to server
TeamMenuResult()
end
List:AddItem(Team2) -- Add to list
end
concommand.Add("blk_teammenu", OpenTeamMenu)
function TeamMenuResult()
net.Start("sv_OpenTeamMenu")
net.WriteFloat(TeamResult)
net.SendToServer()
end
player.lua
local ply = FindMetaTable("Player")
-- ///// TEAM TABLE /////
local teams = {}
-- Team 1 (SWAT) = Blue, Team 2 (Rebels) = Red
teams[0] = {name = "SWAT", color = Vector( .2, .2, 1.0 ), weapons = {"m9k_knife", "m9k_dbarrel"} }
teams[1] = {name = "Rebels", color = Vector( 1.0, .2, .2 ), weapons = {"m9k_knife", "m9k_dbarrel"} }
-- ///// END TEAM TABLE /////
function ply:SetGamemodeTeam( n )
if not teams[n] then return end -- If the selected team does not exist, return
self:SetTeam( n ) -- Set team
self:SetPlayerColor( teams[n].color ) -- Set player model color according to the team
self:GiveGamemodeWeapons() -- Distribute weapons
self:ApplyCharacterModel() -- Randomize and set character model
return true
end
function ply:GiveGamemodeWeapons()
local n = self:Team()
self:StripWeapons()
for k, wep in pairs(teams[n].weapons) do
self:Give(wep)
end
end
function ply:ApplyCharacterModel()
local n = self:Team()
-- // PLAYER MODEL RANDOMIZATION //
if n == 0 then
self:SetModel("models/player/Police.mdl")
elseif t == 1 then
local modelDice = math.random(1, 9)
if modelDice == 1 then
self:SetModel("models/player/Group03/Male_01.mdl")
elseif modelDice == 2 then
self:SetModel("models/player/Group03/Male_02.mdl")
elseif modelDice == 3 then
self:SetModel("models/player/Group03/Male_03.mdl")
elseif modelDice == 4 then
self:SetModel("models/player/Group03/Male_04.mdl")
elseif modelDice == 5 then
self:SetModel("models/player/Group03/Male_05.mdl")
elseif modelDice == 6 then
self:SetModel("models/player/Group03/Male_06.mdl")
elseif modelDice == 7 then
self:SetModel("models/player/Group03/Male_07.mdl")
elseif modelDice == 8 then
self:SetModel("models/player/Group03/Male_08.mdl")
else
self:SetModel("models/player/Group03/Male_09.mdl")
end
end
-- // END PLAYER MODEL RANDOMIZATION //
end