mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
747 lines
21 KiB
Lua
747 lines
21 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/
|
|
--]]
|
|
|
|
|
|
include( "shared.lua" )
|
|
include( "cl_scoreboard.lua" )
|
|
include( "cl_targetid.lua" )
|
|
include( "cl_hudpickup.lua" )
|
|
include( "cl_spawnmenu.lua" )
|
|
include( "cl_deathnotice.lua" )
|
|
include( "cl_pickteam.lua" )
|
|
include( "cl_voice.lua" )
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:Initialize()
|
|
Desc: Called immediately after starting the gamemode
|
|
-----------------------------------------------------------]]
|
|
function GM:Initialize()
|
|
|
|
GAMEMODE.ShowScoreboard = false
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:InitPostEntity()
|
|
Desc: Called as soon as all map entities have been spawned
|
|
-----------------------------------------------------------]]
|
|
function GM:InitPostEntity()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:Think()
|
|
Desc: Called every frame
|
|
-----------------------------------------------------------]]
|
|
function GM:Think()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PlayerBindPress()
|
|
Desc: A player pressed a bound key - return true to override action
|
|
-----------------------------------------------------------]]
|
|
function GM:PlayerBindPress( pl, bind, down )
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:HUDShouldDraw( name )
|
|
Desc: return true if we should draw the named element
|
|
-----------------------------------------------------------]]
|
|
function GM:HUDShouldDraw( name )
|
|
|
|
-- Allow the weapon to override this
|
|
local ply = LocalPlayer()
|
|
if ( IsValid( ply ) ) then
|
|
|
|
local wep = ply:GetActiveWeapon()
|
|
|
|
if ( IsValid( wep ) ) then
|
|
|
|
local fShouldDraw = wep.HUDShouldDraw
|
|
|
|
if ( isfunction( fShouldDraw ) ) then
|
|
|
|
local ret = fShouldDraw( wep, name )
|
|
if ( ret != nil ) then return ret end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:HUDPaint()
|
|
Desc: Use this section to paint your HUD
|
|
-----------------------------------------------------------]]
|
|
function GM:HUDPaint()
|
|
|
|
hook.Run( "HUDDrawTargetID" )
|
|
hook.Run( "HUDDrawPickupHistory" )
|
|
hook.Run( "DrawDeathNotice", 0.85, 0.04 )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:HUDPaintBackground()
|
|
Desc: Same as HUDPaint except drawn before
|
|
-----------------------------------------------------------]]
|
|
function GM:HUDPaintBackground()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:GUIMouseReleased( mousecode )
|
|
Desc: The mouse was double clicked
|
|
-----------------------------------------------------------]]
|
|
function GM:GUIMouseDoublePressed( mousecode, AimVector )
|
|
-- We don't capture double clicks by default,
|
|
-- We just treat them as regular presses
|
|
GAMEMODE:GUIMousePressed( mousecode, AimVector )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:ShutDown( )
|
|
Desc: Called when the Lua system is about to shut down
|
|
-----------------------------------------------------------]]
|
|
function GM:ShutDown()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:RenderScreenspaceEffects( )
|
|
Desc: Bloom etc should be drawn here (or using this hook)
|
|
-----------------------------------------------------------]]
|
|
function GM:RenderScreenspaceEffects()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:GetTeamColor( ent )
|
|
Desc: Return the color for this ent's team
|
|
This is for chat and deathnotice text
|
|
-----------------------------------------------------------]]
|
|
function GM:GetTeamColor( ent )
|
|
|
|
local team = TEAM_UNASSIGNED
|
|
if ( ent.Team ) then team = ent:Team() end
|
|
return GAMEMODE:GetTeamNumColor( team )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:GetTeamNumColor( num )
|
|
Desc: returns the colour for this team num
|
|
-----------------------------------------------------------]]
|
|
function GM:GetTeamNumColor( num )
|
|
|
|
return team.GetColor( num )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:OnPlayerChat()
|
|
Process the player's chat.. return true for no default
|
|
-----------------------------------------------------------]]
|
|
function GM:OnPlayerChat( player, strText, bTeamOnly, bPlayerIsDead )
|
|
|
|
--
|
|
-- I've made this all look more complicated than it is. Here's the easy version
|
|
--
|
|
-- chat.AddText( player, color_white, ": ", strText )
|
|
--
|
|
|
|
local tab = {}
|
|
|
|
if ( bPlayerIsDead ) then
|
|
table.insert( tab, Color( 255, 30, 40 ) )
|
|
table.insert( tab, "*DEAD* " )
|
|
end
|
|
|
|
if ( bTeamOnly ) then
|
|
table.insert( tab, Color( 30, 160, 40 ) )
|
|
table.insert( tab, "(TEAM) " )
|
|
end
|
|
|
|
if ( IsValid( player ) ) then
|
|
table.insert( tab, player )
|
|
else
|
|
table.insert( tab, "Console" )
|
|
end
|
|
|
|
local filter_context = TEXT_FILTER_GAME_CONTENT
|
|
if ( bit.band( GetConVarNumber( "cl_chatfilters" ), 64 ) != 0 ) then filter_context = TEXT_FILTER_CHAT end
|
|
|
|
table.insert( tab, color_white )
|
|
table.insert( tab, ": " .. util.FilterText( strText, filter_context, IsValid( player ) and player or nil ) )
|
|
|
|
chat.AddText( unpack( tab ) )
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:OnChatTab( str )
|
|
Desc: Tab is pressed when typing (Auto-complete names, IRC style)
|
|
-----------------------------------------------------------]]
|
|
function GM:OnChatTab( str )
|
|
|
|
str = string.TrimRight(str)
|
|
|
|
local LastWord
|
|
for word in string.gmatch( str, "[^ ]+" ) do
|
|
LastWord = word
|
|
end
|
|
|
|
if ( LastWord == nil ) then return str end
|
|
|
|
for k, v in ipairs( player.GetAll() ) do
|
|
|
|
local nickname = v:Nick()
|
|
|
|
if ( string.len( LastWord ) < string.len( nickname ) && string.find( string.lower( nickname ), string.lower( LastWord ), 0, true ) == 1 ) then
|
|
|
|
str = string.sub( str, 1, ( string.len( LastWord ) * -1 ) - 1 )
|
|
str = str .. nickname
|
|
return str
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return str
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:StartChat( teamsay )
|
|
Desc: Start Chat.
|
|
|
|
If you want to display your chat shit different here's what you'd do:
|
|
In StartChat show your text box and return true to hide the default
|
|
Update the text in your box with the text passed to ChatTextChanged
|
|
Close and clear your text box when FinishChat is called.
|
|
Return true in ChatText to not show the default chat text
|
|
|
|
-----------------------------------------------------------]]
|
|
function GM:StartChat( teamsay )
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:FinishChat()
|
|
-----------------------------------------------------------]]
|
|
function GM:FinishChat()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:ChatTextChanged( text)
|
|
-----------------------------------------------------------]]
|
|
function GM:ChatTextChanged( text )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: ChatText
|
|
Allows override of the chat text
|
|
-----------------------------------------------------------]]
|
|
function GM:ChatText( playerindex, playername, text, filter )
|
|
|
|
if ( filter == "chat" ) then
|
|
Msg( playername, ": ", text, "\n" )
|
|
else
|
|
Msg( text, "\n" )
|
|
end
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PostProcessPermitted( str )
|
|
Desc: return true/false depending on whether this post process should be allowed
|
|
-----------------------------------------------------------]]
|
|
function GM:PostProcessPermitted( str )
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PostRenderVGUI( )
|
|
Desc: Called after VGUI has been rendered
|
|
-----------------------------------------------------------]]
|
|
function GM:PostRenderVGUI()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreRender( )
|
|
Desc: Called before all rendering
|
|
Return true to NOT render this frame for some reason (danger!)
|
|
-----------------------------------------------------------]]
|
|
function GM:PreRender()
|
|
return false
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PostRender( )
|
|
Desc: Called after all rendering
|
|
-----------------------------------------------------------]]
|
|
function GM:PostRender()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:RenderScene( )
|
|
Desc: Render the scene
|
|
-----------------------------------------------------------]]
|
|
function GM:RenderScene( origin, angle, fov )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: CalcVehicleView
|
|
-----------------------------------------------------------]]
|
|
function GM:CalcVehicleView( Vehicle, ply, view )
|
|
|
|
if ( Vehicle.GetThirdPersonMode == nil || ply:GetViewEntity() != ply ) then
|
|
-- This shouldn't ever happen.
|
|
return
|
|
end
|
|
|
|
--
|
|
-- If we're not in third person mode - then get outa here stalker
|
|
--
|
|
if ( !Vehicle:GetThirdPersonMode() ) then return view end
|
|
|
|
-- Don't roll the camera
|
|
-- view.angles.roll = 0
|
|
|
|
local mn, mx = Vehicle:GetRenderBounds()
|
|
local radius = ( mn - mx ):Length()
|
|
local radius = radius + radius * Vehicle:GetCameraDistance()
|
|
|
|
-- Trace back from the original eye position, so we don't clip through walls/objects
|
|
local TargetOrigin = view.origin + ( view.angles:Forward() * -radius )
|
|
local WallOffset = 4
|
|
|
|
local tr = util.TraceHull( {
|
|
start = view.origin,
|
|
endpos = TargetOrigin,
|
|
filter = function( e )
|
|
local c = e:GetClass() -- Avoid contact with entities that can potentially be attached to the vehicle. Ideally, we should check if "e" is constrained to "Vehicle".
|
|
return !c:StartsWith( "prop_physics" ) &&!c:StartsWith( "prop_dynamic" ) && !c:StartsWith( "phys_bone_follower" ) && !c:StartsWith( "prop_ragdoll" ) && !e:IsVehicle() && !c:StartsWith( "gmod_" )
|
|
end,
|
|
mins = Vector( -WallOffset, -WallOffset, -WallOffset ),
|
|
maxs = Vector( WallOffset, WallOffset, WallOffset ),
|
|
} )
|
|
|
|
view.origin = tr.HitPos
|
|
view.drawviewer = true
|
|
|
|
--
|
|
-- If the trace hit something, put the camera there.
|
|
--
|
|
if ( tr.Hit && !tr.StartSolid) then
|
|
view.origin = view.origin + tr.HitNormal * WallOffset
|
|
end
|
|
|
|
return view
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: CalcView
|
|
Allows override of the default view
|
|
-----------------------------------------------------------]]
|
|
function GM:CalcView( ply, origin, angles, fov, znear, zfar )
|
|
|
|
local Vehicle = ply:GetVehicle()
|
|
local Weapon = ply:GetActiveWeapon()
|
|
|
|
local view = {
|
|
["origin"] = origin,
|
|
["angles"] = angles,
|
|
["fov"] = fov,
|
|
["znear"] = znear,
|
|
["zfar"] = zfar,
|
|
["drawviewer"] = false,
|
|
}
|
|
|
|
--
|
|
-- Let the vehicle override the view and allows the vehicle view to be hooked
|
|
--
|
|
if ( IsValid( Vehicle ) ) then return hook.Run( "CalcVehicleView", Vehicle, ply, view ) end
|
|
|
|
--
|
|
-- Let drive possibly alter the view
|
|
--
|
|
if ( drive.CalcView( ply, view ) ) then return view end
|
|
|
|
--
|
|
-- Give the player manager a turn at altering the view
|
|
--
|
|
player_manager.RunClass( ply, "CalcView", view )
|
|
|
|
-- Give the active weapon a go at changing the view
|
|
if ( IsValid( Weapon ) ) then
|
|
|
|
local func = Weapon.CalcView
|
|
if ( func ) then
|
|
local origin, angles, fov = func( Weapon, ply, Vector( view.origin ), Angle( view.angles ), view.fov ) -- Note: Constructor to copy the object so the child function can't edit it.
|
|
view.origin, view.angles, view.fov = origin or view.origin, angles or view.angles, fov or view.fov
|
|
end
|
|
|
|
end
|
|
|
|
return view
|
|
|
|
end
|
|
|
|
--
|
|
-- If return true: Will draw the local player
|
|
-- If return false: Won't draw the local player
|
|
-- If return nil: Will carry out default action
|
|
--
|
|
function GM:ShouldDrawLocalPlayer( ply )
|
|
|
|
return player_manager.RunClass( ply, "ShouldDrawLocal" )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:AdjustMouseSensitivity()
|
|
Desc: Allows you to adjust the mouse sensitivity.
|
|
The return is a fraction of the normal sensitivity (0.5 would be half as sensitive)
|
|
Return -1 to not override.
|
|
-----------------------------------------------------------]]
|
|
function GM:AdjustMouseSensitivity( fDefault )
|
|
|
|
local ply = LocalPlayer()
|
|
if ( !IsValid( ply ) ) then return -1 end
|
|
|
|
local wep = ply:GetActiveWeapon()
|
|
if ( wep && wep.AdjustMouseSensitivity ) then
|
|
return wep:AdjustMouseSensitivity()
|
|
end
|
|
|
|
return -1
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:ForceDermaSkin()
|
|
Desc: Return the name of skin this gamemode should use.
|
|
If nil is returned the skin will use default
|
|
-----------------------------------------------------------]]
|
|
function GM:ForceDermaSkin()
|
|
|
|
--return "example"
|
|
return nil
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PostPlayerDraw()
|
|
Desc: The player has just been drawn.
|
|
-----------------------------------------------------------]]
|
|
function GM:PostPlayerDraw( ply )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PrePlayerDraw()
|
|
Desc: The player is just about to be drawn.
|
|
-----------------------------------------------------------]]
|
|
function GM:PrePlayerDraw( ply )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:GetMotionBlurSettings()
|
|
Desc: Allows you to edit the motion blur values
|
|
-----------------------------------------------------------]]
|
|
function GM:GetMotionBlurValues( x, y, fwd, spin )
|
|
|
|
-- fwd = 0.5 + math.sin( CurTime() * 5 ) * 0.5
|
|
|
|
return x, y, fwd, spin
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:InputMouseApply()
|
|
Desc: Allows you to control how moving the mouse affects the view angles
|
|
-----------------------------------------------------------]]
|
|
function GM:InputMouseApply( cmd, x, y, angle )
|
|
|
|
--angle.roll = angle.roll + 1
|
|
--cmd:SetViewAngles( Ang )
|
|
--return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:OnAchievementAchieved()
|
|
-----------------------------------------------------------]]
|
|
function GM:OnAchievementAchieved( ply, achid )
|
|
|
|
chat.AddText( ply, Color( 230, 230, 230 ), " earned the achievement ", Color( 255, 200, 0 ), achievements.GetName( achid ) )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreDrawSkyBox()
|
|
Desc: Called before drawing the skybox. Return true to not draw the skybox.
|
|
-----------------------------------------------------------]]
|
|
function GM:PreDrawSkyBox()
|
|
|
|
--return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PostDrawSkyBox()
|
|
Desc: Called after drawing the skybox
|
|
-----------------------------------------------------------]]
|
|
function GM:PostDrawSkyBox()
|
|
end
|
|
|
|
--
|
|
-- Name: GM:PostDraw2DSkyBox
|
|
-- Desc: Called right after the 2D skybox has been drawn - allowing you to draw over it.
|
|
-- Arg1:
|
|
-- Ret1:
|
|
--
|
|
function GM:PostDraw2DSkyBox()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreDrawOpaqueRenderables()
|
|
Desc: Called before drawing opaque entities
|
|
-----------------------------------------------------------]]
|
|
function GM:PreDrawOpaqueRenderables( bDrawingDepth, bDrawingSkybox )
|
|
|
|
-- return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreDrawOpaqueRenderables()
|
|
Desc: Called before drawing opaque entities
|
|
-----------------------------------------------------------]]
|
|
function GM:PostDrawOpaqueRenderables( bDrawingDepth, bDrawingSkybox )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreDrawOpaqueRenderables()
|
|
Desc: Called before drawing opaque entities
|
|
-----------------------------------------------------------]]
|
|
function GM:PreDrawTranslucentRenderables( bDrawingDepth, bDrawingSkybox )
|
|
|
|
-- return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreDrawOpaqueRenderables()
|
|
Desc: Called before drawing opaque entities
|
|
-----------------------------------------------------------]]
|
|
function GM:PostDrawTranslucentRenderables( bDrawingDepth, bDrawingSkybox )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:CalcViewModelView()
|
|
Desc: Called to set the view model's position
|
|
-----------------------------------------------------------]]
|
|
function GM:CalcViewModelView( Weapon, ViewModel, OldEyePos, OldEyeAng, EyePos, EyeAng )
|
|
|
|
if ( !IsValid( Weapon ) ) then return end
|
|
|
|
local vm_origin, vm_angles = EyePos, EyeAng
|
|
|
|
-- Controls the position of all viewmodels
|
|
local func = Weapon.GetViewModelPosition
|
|
if ( func ) then
|
|
local pos, ang = func( Weapon, EyePos*1, EyeAng*1 )
|
|
vm_origin = pos or vm_origin
|
|
vm_angles = ang or vm_angles
|
|
end
|
|
|
|
-- Controls the position of individual viewmodels
|
|
func = Weapon.CalcViewModelView
|
|
if ( func ) then
|
|
local pos, ang = func( Weapon, ViewModel, OldEyePos*1, OldEyeAng*1, EyePos*1, EyeAng*1 )
|
|
vm_origin = pos or vm_origin
|
|
vm_angles = ang or vm_angles
|
|
end
|
|
|
|
return vm_origin, vm_angles
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreDrawViewModel()
|
|
Desc: Called before drawing the view model
|
|
-----------------------------------------------------------]]
|
|
function GM:PreDrawViewModel( ViewModel, Player, Weapon )
|
|
|
|
if ( !IsValid( Weapon ) ) then return false end
|
|
|
|
player_manager.RunClass( Player, "PreDrawViewModel", ViewModel, Weapon )
|
|
|
|
if ( Weapon.PreDrawViewModel == nil ) then return false end
|
|
return Weapon:PreDrawViewModel( ViewModel, Weapon, Player )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PostDrawViewModel()
|
|
Desc: Called after drawing the view model
|
|
-----------------------------------------------------------]]
|
|
function GM:PostDrawViewModel( ViewModel, Player, Weapon )
|
|
|
|
if ( !IsValid( Weapon ) ) then return false end
|
|
|
|
if ( Weapon.UseHands || !Weapon:IsScripted() ) then
|
|
|
|
local hands = Player:GetHands()
|
|
if ( IsValid( hands ) && IsValid( hands:GetParent() ) ) then
|
|
|
|
if ( not hook.Call( "PreDrawPlayerHands", self, hands, ViewModel, Player, Weapon ) ) then
|
|
|
|
if ( Weapon.ViewModelFlip ) then render.CullMode( MATERIAL_CULLMODE_CW ) end
|
|
hands:DrawModel()
|
|
render.CullMode( MATERIAL_CULLMODE_CCW )
|
|
|
|
end
|
|
|
|
hook.Call( "PostDrawPlayerHands", self, hands, ViewModel, Player, Weapon )
|
|
|
|
end
|
|
|
|
end
|
|
|
|
player_manager.RunClass( Player, "PostDrawViewModel", ViewModel, Weapon )
|
|
|
|
if ( Weapon.PostDrawViewModel == nil ) then return false end
|
|
return Weapon:PostDrawViewModel( ViewModel, Weapon, Player )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:DrawPhysgunBeam()
|
|
Desc: Return false to override completely
|
|
-----------------------------------------------------------]]
|
|
function GM:DrawPhysgunBeam( ply, weapon, bOn, target, boneid, pos )
|
|
|
|
-- Do nothing
|
|
return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:NetworkEntityCreated()
|
|
Desc: Entity is created over the network
|
|
-----------------------------------------------------------]]
|
|
function GM:NetworkEntityCreated( ent )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:CreateMove( command )
|
|
Desc: Allows the client to change the move commands
|
|
before it's send to the server
|
|
-----------------------------------------------------------]]
|
|
function GM:CreateMove( cmd )
|
|
|
|
if ( drive.CreateMove( cmd ) ) then return true end
|
|
|
|
if ( player_manager.RunClass( LocalPlayer(), "CreateMove", cmd ) ) then return true end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:PreventScreenClicks()
|
|
Desc: The player is hovering over a ScreenClickable world
|
|
-----------------------------------------------------------]]
|
|
function GM:PreventScreenClicks( cmd )
|
|
|
|
--
|
|
-- Returning true in this hook will prevent screen clicking sending IN_ATTACK
|
|
-- commands to the weapons. We want to do this in the properties system, so
|
|
-- that you don't fire guns when opening the properties menu. Holla!
|
|
--
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:GUIMousePressed( mousecode )
|
|
Desc: The mouse has been pressed on the game screen
|
|
-----------------------------------------------------------]]
|
|
function GM:GUIMousePressed( mousecode, AimVector )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: gamemode:GUIMouseReleased( mousecode )
|
|
Desc: The mouse has been released on the game screen
|
|
-----------------------------------------------------------]]
|
|
function GM:GUIMouseReleased( mousecode, AimVector )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Player class has been changed
|
|
-----------------------------------------------------------]]
|
|
function GM:PlayerClassChanged( ply, newID )
|
|
|
|
-- No class is set
|
|
if ( newID < 1 ) then return end
|
|
|
|
-- Invalid class ID?
|
|
local classname = util.NetworkIDToString( newID )
|
|
if ( !classname ) then return end
|
|
|
|
-- Initialize the class on client
|
|
player_manager.SetPlayerClass( ply, classname )
|
|
|
|
end
|
|
|
|
function GM:PreDrawHUD()
|
|
end
|
|
|
|
function GM:PostDrawHUD()
|
|
end
|
|
|
|
function GM:DrawOverlay()
|
|
end
|
|
|
|
function GM:DrawMonitors()
|
|
end
|
|
|
|
function GM:PreDrawEffects()
|
|
end
|
|
|
|
function GM:PostDrawEffects()
|
|
end
|
|
|
|
function GM:PreDrawHalos()
|
|
end
|
|
|
|
function GM:CloseDermaMenus()
|
|
end
|
|
|
|
function GM:CreateClientsideRagdoll( entity, ragdoll )
|
|
end
|
|
|
|
function GM:VehicleMove( ply, vehicle, mv )
|
|
end
|