Hello. I'm currently making a gamemode.
As for previous experience, I'd like to keep scripts and it's libraries in order, so I divide functions, managers and core scripts.
But I can't get it: when should I use shared.lua? Z.B.: setting the player class is shared function, should the manager-script containing it be added to shared.lua? And what about it's include files?
That's how it works right now:
init.lua
[code]--AddCSLuaFile("shared.lua") --required if using
AddCSLuaFile("cl_init.lua")
--include("shared.lua") --required if using
include("libraries/core/core.lua")
Core:Init()[/code]
cl_init.lua
[code]include("shared.lua")[/code]
libraries/core/core.lua:
[code]Core = {}
include("../managers/classmanager.lua")
function Core:Init()
ClassManager:Init()
end
--not done yet[/code]
managers/classmanager.lua
[code]include("../../player/class/exoskeleton.lua")
ClassManager = {}
function PlayersManager:Init()
print("Module loading: ClassManager")
concommand.Add("makeexo", PlayersManager.MakeExo)
print("Module loaded: ClassManager")
end
function PlayersManager:MakeExo(ply)
player_manager.SetPlayerClass( ply, "player_exoskeleton" )
end[/code]
player/class/exoskeleton.lua:
[code]AddCSLuaFile()
DEFINE_BASECLASS( "player_default" )
if ( CLIENT ) then
--CreateConVar( "cl_playercolor", "0.24 0.34 0.41", { FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD }, "The value is a Vector - so between 0-1 - not between 0-255" )
--CreateConVar( "cl_weaponcolor", "0.30 1.80 2.10", { FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD }, "The value is a Vector - so between 0-1 - not between 0-255" )
--CreateConVar( "cl_playerskin", "0", { FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD }, "The skin to use, if the model has any" )
--CreateConVar( "cl_playerbodygroups", "0", { FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD }, "The bodygroups to use, if the model has any" )
end
local PLAYER = {}
PLAYER.DuckSpeed = 0.1 -- How fast to go from not ducking, to ducking
PLAYER.UnDuckSpeed = 0.1 -- How fast to go from ducking, to not ducking
--
-- Creates a Taunt Camera
--
PLAYER.TauntCam = TauntCamera()
--
-- See gamemodes/base/player_class/player_default.lua for all overridable variables
--
PLAYER.WalkSpeed = 100
PLAYER.RunSpeed = 200
--
-- Set up the network table accessors
--
function PLAYER:SetupDataTables()
BaseClass.SetupDataTables( self )
end
function PLAYER:Loadout()
self.Player:RemoveAllAmmo()
self.Player:GiveAmmo( 256, "Pistol", true )
self.Player:Give( "weapon_crowbar" )
self.Player:Give( "weapon_pistol" )
self.Player:SwitchToDefaultWeapon()
end
function PLAYER:SetModel()
BaseClass.SetModel( self )
local skin = self.Player:GetInfoNum( "cl_playerskin", 0 )
self.Player:SetSkin( skin )
local groups = self.Player:GetInfo( "cl_playerbodygroups" )
if ( groups == nil ) then groups = "" end
local groups = string.Explode( " ", groups )
for k = 0, self.Player:GetNumBodyGroups() - 1 do
self.Player:SetBodygroup( k, tonumber( groups[ k + 1 ] ) or 0 )
end
end
--
-- Called when the player spawns
--
function PLAYER:Spawn()
BaseClass.Spawn( self )
--local col = self.Player:GetInfo( "cl_playercolor" )
--self.Player:SetPlayerColor( Vector( col ) )
--local col = self.Player:GetInfo( "cl_weaponcolor" )
--self.Player:SetWeaponColor( Vector( col ) )
end
--
-- Return true to draw local (thirdperson) camera - false to prevent - nothing to use default behaviour
--
function PLAYER:ShouldDrawLocal()
if ( self.TauntCam:ShouldDrawLocalPlayer( self.Player, self.Player:IsPlayingTaunt() ) ) then return true end
end
--
-- Allow player class to create move
--
function PLAYER:CreateMove( cmd )
if ( self.TauntCam:CreateMove( cmd, self.Player, self.Player:IsPlayingTaunt() ) ) then return true end
end
--
-- Allow changing the player's view
--
function PLAYER:CalcView( view )
if ( self.TauntCam:CalcView( view, self.Player, self.Player:IsPlayingTaunt() ) ) then return true end
-- Your stuff here
end
function PLAYER:GetHandsModel()
-- return { model = "models/weapons/c_arms_cstrike.mdl", skin = 1, body = "0100000" }
local cl_playermodel = self.Player:GetInfo( "cl_playermodel" )
return player_manager.TranslatePlayerHands( cl_playermodel )
end
--
-- Reproduces the jump boost from HL2 singleplayer
--
local JUMPING
function PLAYER:StartMove( move )
-- Only apply the jump boost in FinishMove if the player has jumped during this frame
-- Using a global variable is safe here because nothing else happens between SetupMove and FinishMove
if bit.band( move:GetButtons(), IN_JUMP ) ~= 0 and bit.band( move:GetOldButtons(), IN_JUMP ) == 0 and self.Player:OnGround() then
JUMPING = true
end
end
function PLAYER:FinishMove( move )
-- If the player has jumped this frame
if JUMPING then
-- Get their orientation
local forward = self.Player:EyeAngles()
forward.p = 0
forward = forward:Forward()
-- Compute the speed boost
-- HL2 normally provides a much weaker jump boost when sprinting
-- For some reason this never applied to GMod, so we won't perform
-- this check here to preserve the "authentic" feeling
local speedBoostPerc = ( ( not self.Player:Crouching() ) and 0.5 ) or 0.1
local speedAddition = math.abs( move:GetForwardSpeed() * speedBoostPerc )
local maxSpeed = move:GetMaxSpeed() * ( 1 + speedBoostPerc )
local newSpeed = speedAddition + move:GetVelocity():Length2D()
-- Clamp it to make sure they can't bunnyhop to ludicrous speed
if newSpeed > maxSpeed then
speedAddition = speedAddition - (newSpeed - maxSpeed)
end
-- Reverse it if the player is running backwards
if move:GetForwardSpeed() < 0 then
speedAddition = -speedAddition
end
-- Apply the speed boost
move:SetVelocity(forward * speedAddition + move:GetVelocity())
end
JUMPING = nil
end
player_manager.RegisterClass( "player_exoskeleton", PLAYER, "player_default" )
--gamemodes/sandbox's player_sandbox[/code]
So, whenever I call command, I get these errors:
[code][ERROR] lua/includes/modules/player_manager.lua:337: attempt to index local 'ply' (a nil value)
1. SetPlayerClass - lua/includes/modules/player_manager.lua:337
2. MakeExo - gamemodes/test/gamemode/libraries/core/../managers/classmanager.lua:12
3. unknown - gamemodes/test/gamemode/libraries/core/../managers/classmanager.lua:8
4. unknown - lua/includes/modules/concommand.lua:69
[ERROR] lua/includes/modules/player_manager.lua:337: attempt to index local 'ply' (a nil value)
1. SetPlayerClass - lua/includes/modules/player_manager.lua:337
2. MakeExo - gamemodes/test/gamemode/libraries/core/../managers/classmanager.lua:12
3. unknown - gamemodes/test/gamemode/libraries/core/../managersclassmanager.lua:8
4. unknown - lua/includes/modules/concommand.lua:69[/code]
Why does it get nil value? Should I be including shared function managers files to shared.lua?
Or I missed something? How are shared functions used then?
Thanks.
Sorry, you need to Log In to post a reply to this thread.