219 lines
5.0 KiB
Lua
219 lines
5.0 KiB
Lua
|
|
local meta = FindMetaTable( "Player" )
|
|
if (!meta) then return end
|
|
|
|
function meta:SetPlayerClass( strName )
|
|
|
|
self:SetNWString( "Class", strName )
|
|
|
|
local c = player_class.Get( strName )
|
|
if ( !c ) then
|
|
MsgN( "Warning: Player joined undefined class (", strName, ")" )
|
|
end
|
|
|
|
end
|
|
|
|
function meta:GetPlayerClassName()
|
|
|
|
return self:GetNWString( "Class", "Default" )
|
|
|
|
end
|
|
|
|
|
|
function meta:GetPlayerClass()
|
|
|
|
// Class that has been set using SetClass
|
|
local ClassName = self:GetPlayerClassName()
|
|
local c = player_class.Get( ClassName )
|
|
if ( c ) then return c end
|
|
|
|
// Class based on their Team
|
|
local c = player_class.Get( self:Team() )
|
|
if ( c ) then return c end
|
|
|
|
// If all else fails, use the default
|
|
local c = player_class.Get( "Default" )
|
|
if ( c ) then return c end
|
|
|
|
end
|
|
|
|
function meta:SetRandomClass()
|
|
|
|
local Classes = team.GetClass( self:Team() )
|
|
if ( Classes ) then
|
|
local Class = table.Random( Classes )
|
|
self:SetPlayerClass( Class )
|
|
return
|
|
end
|
|
|
|
end
|
|
|
|
function meta:CheckPlayerClassOnSpawn()
|
|
|
|
local Classes = team.GetClass( self:Team() )
|
|
|
|
// The player has requested to spawn as a new class
|
|
|
|
if ( self.m_SpawnAsClass ) then
|
|
|
|
self:SetPlayerClass( self.m_SpawnAsClass )
|
|
self.m_SpawnAsClass = nil
|
|
|
|
end
|
|
|
|
// Make sure the player isn't using the wrong class
|
|
|
|
if ( Classes && #Classes > 0 && !table.HasValue( Classes, self:GetPlayerClassName() ) ) then
|
|
self:SetRandomClass()
|
|
end
|
|
|
|
// If the player is on a team with only one class,
|
|
// make sure we're that one when we spawn.
|
|
|
|
if ( Classes && #Classes == 1 ) then
|
|
self:SetPlayerClass( Classes[1] )
|
|
end
|
|
|
|
// No defined classes, use default class
|
|
|
|
if ( !Classes || #Classes == 0 ) then
|
|
self:SetPlayerClass( "Default" )
|
|
end
|
|
|
|
end
|
|
|
|
function meta:OnSpawn()
|
|
|
|
local Class = self:GetPlayerClass()
|
|
if ( !Class ) then return end
|
|
|
|
if ( Class.DuckSpeed ) then self:SetDuckSpeed( Class.DuckSpeed ) end
|
|
if ( Class.WalkSpeed ) then self:SetWalkSpeed( Class.WalkSpeed ) end
|
|
if ( Class.RunSpeed ) then self:SetRunSpeed( Class.RunSpeed ) end
|
|
if ( Class.CrouchedWalkSpeed ) then self:SetCrouchedWalkSpeed( Class.CrouchedWalkSpeed ) end
|
|
if ( Class.JumpPower ) then self:SetJumpPower( Class.JumpPower ) end
|
|
if ( Class.DrawTeamRing ) then self:SetNWBool( "DrawRing", true ) else self:SetNWBool( "DrawRing", false ) end
|
|
if ( Class.DrawViewModel == false ) then self:DrawViewModel( false ) else self:DrawViewModel( true ) end
|
|
if ( Class.CanUseFlashlight != nil ) then self:AllowFlashlight( Class.CanUseFlashlight ) end
|
|
if ( Class.StartHealth ) then self:SetHealth( Class.StartHealth ) end
|
|
if ( Class.MaxHealth ) then self:SetMaxHealth( Class.MaxHealth ) end
|
|
if ( Class.StartArmor ) then self:SetArmor( Class.StartArmor ) end
|
|
if ( Class.RespawnTime ) then self:SetRespawnTime( Class.RespawnTime ) end
|
|
if ( Class.DropWeaponOnDie != nil ) then self:ShouldDropWeapon( Class.DropWeaponOnDie ) end
|
|
if ( Class.TeammateNoCollide != nil ) then self:SetNoCollideWithTeammates( Class.TeammateNoCollide ) end
|
|
if ( Class.AvoidPlayers != nil ) then self:SetAvoidPlayers( Class.AvoidPlayers ) end
|
|
if ( Class.FullRotation != nil ) then self:SetAllowFullRotation( Class.FullRotation ) end
|
|
|
|
self:CallClassFunction( "OnSpawn" )
|
|
|
|
end
|
|
|
|
function meta:CallClassFunction( name, ... )
|
|
|
|
local Class = self:GetPlayerClass()
|
|
if ( !Class ) then return end
|
|
if ( !Class[name] ) then return end
|
|
|
|
//print( "Class Function: ", self:GetPlayerClassName(), name )
|
|
|
|
return Class[name]( Class, self, ... )
|
|
|
|
end
|
|
|
|
function meta:OnLoadout()
|
|
|
|
self:CallClassFunction( "Loadout" )
|
|
|
|
end
|
|
|
|
function meta:OnDeath()
|
|
|
|
end
|
|
|
|
function meta:OnPlayerModel()
|
|
|
|
// If the class forces a player model, use that..
|
|
// If not, use our preferred model..
|
|
|
|
local Class = self:GetPlayerClass()
|
|
if ( Class && Class.PlayerModel ) then
|
|
|
|
local mdl = Class.PlayerModel
|
|
if( type( mdl ) == "table" ) then // table of models, set random
|
|
mdl = table.Random( Class.PlayerModel );
|
|
end
|
|
|
|
util.PrecacheModel( mdl );
|
|
self:SetModel( mdl );
|
|
return
|
|
|
|
end
|
|
|
|
local cl_playermodel = self:GetInfo( "cl_playermodel" )
|
|
local modelname = player_manager.TranslatePlayerModel( cl_playermodel )
|
|
util.PrecacheModel( modelname )
|
|
self:SetModel( modelname )
|
|
|
|
end
|
|
|
|
function meta:AllowFlashlight( bAble )
|
|
|
|
self.m_bFlashlight = bAble
|
|
|
|
end
|
|
|
|
function meta:CanUseFlashlight()
|
|
|
|
if self.m_bFlashlight == nil then
|
|
return true // Default to true unless modified by the player class
|
|
end
|
|
|
|
return self.m_bFlashlight
|
|
|
|
end
|
|
|
|
function meta:SetRespawnTime( num )
|
|
|
|
self.m_iSpawnTime = num
|
|
|
|
end
|
|
|
|
function meta:GetRespawnTime( num )
|
|
|
|
if ( self.m_iSpawnTime == 0 || !self.m_iSpawnTime ) then
|
|
return GAMEMODE.MinimumDeathLength
|
|
end
|
|
return self.m_iSpawnTime
|
|
|
|
end
|
|
|
|
function meta:DisableRespawn( strReason )
|
|
|
|
self.m_bCanRespawn = false
|
|
|
|
end
|
|
|
|
function meta:EnableRespawn()
|
|
|
|
self.m_bCanRespawn = true
|
|
|
|
end
|
|
|
|
function meta:CanRespawn()
|
|
|
|
return self.m_bCanRespawn == nil || self.m_bCanRespawn == true
|
|
|
|
end
|
|
|
|
function meta:IsObserver()
|
|
return ( self:GetObserverMode() > OBS_MODE_NONE );
|
|
end
|
|
|
|
function meta:UpdateNameColor()
|
|
|
|
if ( GAMEMODE.SelectColor ) then
|
|
self:SetNWString( "NameColor", self:GetInfo( "cl_playercolor" ) )
|
|
end
|
|
|
|
end
|