mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
210 lines
5.7 KiB
Lua
210 lines
5.7 KiB
Lua
|
|
--[[
|
||
|
|
| This file was obtained through the combined efforts
|
||
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
||
|
|
|
|
||
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
||
|
|
|
|
||
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||
|
|
--]]
|
||
|
|
|
||
|
|
|
||
|
|
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.SlowWalkSpeed = 100
|
||
|
|
PLAYER.WalkSpeed = 200
|
||
|
|
PLAYER.RunSpeed = 400
|
||
|
|
|
||
|
|
--
|
||
|
|
-- Set up the network table accessors
|
||
|
|
--
|
||
|
|
function PLAYER:SetupDataTables()
|
||
|
|
|
||
|
|
BaseClass.SetupDataTables( self )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
function PLAYER:Loadout()
|
||
|
|
|
||
|
|
self.Player:RemoveAllAmmo()
|
||
|
|
|
||
|
|
if ( cvars.Bool( "sbox_weapons", true ) ) then
|
||
|
|
|
||
|
|
self.Player:GiveAmmo( 256, "Pistol", true )
|
||
|
|
self.Player:GiveAmmo( 256, "SMG1", true )
|
||
|
|
self.Player:GiveAmmo( 5, "grenade", true )
|
||
|
|
self.Player:GiveAmmo( 64, "Buckshot", true )
|
||
|
|
self.Player:GiveAmmo( 32, "357", true )
|
||
|
|
self.Player:GiveAmmo( 32, "XBowBolt", true )
|
||
|
|
self.Player:GiveAmmo( 6, "AR2AltFire", true )
|
||
|
|
self.Player:GiveAmmo( 100, "AR2", true )
|
||
|
|
|
||
|
|
self.Player:Give( "weapon_crowbar" )
|
||
|
|
self.Player:Give( "weapon_pistol" )
|
||
|
|
self.Player:Give( "weapon_smg1" )
|
||
|
|
self.Player:Give( "weapon_frag" )
|
||
|
|
self.Player:Give( "weapon_physcannon" )
|
||
|
|
self.Player:Give( "weapon_crossbow" )
|
||
|
|
self.Player:Give( "weapon_shotgun" )
|
||
|
|
self.Player:Give( "weapon_357" )
|
||
|
|
self.Player:Give( "weapon_rpg" )
|
||
|
|
self.Player:Give( "weapon_ar2" )
|
||
|
|
|
||
|
|
-- The only reason I'm leaving this out is because
|
||
|
|
-- I don't want to add too many weapons to the first
|
||
|
|
-- row because that's where the gravgun is.
|
||
|
|
--pl:Give( "weapon_stunstick" )
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
self.Player:Give( "gmod_tool" )
|
||
|
|
self.Player:Give( "gmod_camera" )
|
||
|
|
self.Player:Give( "weapon_physgun" )
|
||
|
|
|
||
|
|
self.Player:SwitchToDefaultWeapon()
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
function PLAYER:SetModel()
|
||
|
|
|
||
|
|
BaseClass.SetModel( self )
|
||
|
|
|
||
|
|
local skin = self.Player:GetInfoNum( "cl_playerskin", 0 )
|
||
|
|
self.Player:SetSkin( skin )
|
||
|
|
|
||
|
|
local bodygroups = self.Player:GetInfo( "cl_playerbodygroups" )
|
||
|
|
if ( bodygroups == nil ) then bodygroups = "" end
|
||
|
|
|
||
|
|
local groups = string.Explode( " ", bodygroups )
|
||
|
|
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 plyclr = self.Player:GetInfo( "cl_playercolor" )
|
||
|
|
self.Player:SetPlayerColor( Vector( plyclr ) )
|
||
|
|
|
||
|
|
local wepclr = Vector( self.Player:GetInfo( "cl_weaponcolor" ) )
|
||
|
|
if ( wepclr:Length() < 0.001 ) then
|
||
|
|
wepclr = Vector( 0.001, 0.001, 0.001 )
|
||
|
|
end
|
||
|
|
self.Player:SetWeaponColor( wepclr )
|
||
|
|
|
||
|
|
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
|
||
|
|
|
||
|
|
--
|
||
|
|
-- 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 = move:GetAngles()
|
||
|
|
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:GetVelocity():Dot( forward ) < 0 then
|
||
|
|
speedAddition = -speedAddition
|
||
|
|
end
|
||
|
|
|
||
|
|
-- Apply the speed boost
|
||
|
|
move:SetVelocity( forward * speedAddition + move:GetVelocity() )
|
||
|
|
end
|
||
|
|
|
||
|
|
JUMPING = nil
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
player_manager.RegisterClass( "player_sandbox", PLAYER, "player_default" )
|