ph-enhanced/gamemodes/fretta/gamemode/player_extension.lua
2019-05-28 09:16:53 +02:00

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