Files
wnsrc/gamemodes/sandbox/gamemode/init.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

186 lines
5.3 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/
--]]
--[[---------------------------------------------------------
Sandbox Gamemode
This is GMod's default gamemode
-----------------------------------------------------------]]
-- These files get sent to the client
AddCSLuaFile( "cl_hints.lua" )
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "cl_notice.lua" )
AddCSLuaFile( "cl_search_models.lua" )
AddCSLuaFile( "cl_spawnmenu.lua" )
AddCSLuaFile( "cl_worldtips.lua" )
AddCSLuaFile( "persistence.lua" )
AddCSLuaFile( "player_extension.lua" )
AddCSLuaFile( "save_load.lua" )
AddCSLuaFile( "shared.lua" )
AddCSLuaFile( "gui/IconEditor.lua" )
include( 'shared.lua' )
include( 'commands.lua' )
include( 'player.lua' )
include( 'spawnmenu/init.lua' )
--
-- Make BaseClass available
--
DEFINE_BASECLASS( "gamemode_base" )
--[[---------------------------------------------------------
Name: gamemode:PlayerSpawn()
Desc: Called when a player spawns
-----------------------------------------------------------]]
function GM:PlayerSpawn( pl, transiton )
player_manager.SetPlayerClass( pl, "player_sandbox" )
BaseClass.PlayerSpawn( self, pl, transiton )
end
--[[---------------------------------------------------------
Name: gamemode:OnPhysgunFreeze( weapon, phys, ent, player )
Desc: The physgun wants to freeze a prop
-----------------------------------------------------------]]
function GM:OnPhysgunFreeze( weapon, phys, ent, ply )
-- Don't freeze persistent props (should already be frozen)
if ( ent:GetPersistent() && GetConVarString( "sbox_persist" ):Trim() != "" ) then return false end
BaseClass.OnPhysgunFreeze( self, weapon, phys, ent, ply )
ply:SendHint( "PhysgunUnfreeze", 0.3 )
ply:SuppressHint( "PhysgunFreeze" )
end
--[[---------------------------------------------------------
Name: gamemode:OnPhysgunReload( weapon, player )
Desc: The physgun wants to unfreeze
-----------------------------------------------------------]]
function GM:OnPhysgunReload( weapon, ply )
local num = ply:PhysgunUnfreeze()
if ( num > 0 ) then
ply:SendLua( string.format( "GAMEMODE:UnfrozeObjects(%d)", num ) )
end
ply:SuppressHint( "PhysgunUnfreeze" )
end
--[[---------------------------------------------------------
Name: gamemode:PlayerShouldTakeDamage
Return true if this player should take damage from this attacker
Note: This is a shared function - the client will think they can
damage the players even though they can't. This just means the
prediction will show blood.
-----------------------------------------------------------]]
function GM:PlayerShouldTakeDamage( ply, attacker )
-- Global godmode, players can't be damaged in any way
if ( cvars.Bool( "sbox_godmode", false ) ) then return false end
-- No player vs player damage
if ( attacker:IsValid() && attacker:IsPlayer() && ply != attacker ) then
return cvars.Bool( "sbox_playershurtplayers", true )
end
-- Default, let the player be hurt
return true
end
--[[---------------------------------------------------------
Show the search when f1 is pressed
-----------------------------------------------------------]]
function GM:ShowHelp( ply )
ply:SendLua( "hook.Run( 'StartSearch' )" )
end
--[[---------------------------------------------------------
Called once on the player's first spawn
-----------------------------------------------------------]]
function GM:PlayerInitialSpawn( ply, transiton )
BaseClass.PlayerInitialSpawn( self, ply, transiton )
end
--[[---------------------------------------------------------
A ragdoll of an entity has been created
-----------------------------------------------------------]]
function GM:CreateEntityRagdoll( entity, ragdoll )
-- Replace the entity with the ragdoll in cleanups etc
undo.ReplaceEntity( entity, ragdoll )
cleanup.ReplaceEntity( entity, ragdoll )
end
--[[---------------------------------------------------------
Player unfroze an object
-----------------------------------------------------------]]
function GM:PlayerUnfrozeObject( ply, entity, physobject )
local effectdata = EffectData()
effectdata:SetOrigin( physobject:GetPos() )
effectdata:SetEntity( entity )
util.Effect( "phys_unfreeze", effectdata, true, true )
end
--[[---------------------------------------------------------
Player froze an object
-----------------------------------------------------------]]
function GM:PlayerFrozeObject( ply, entity, physobject )
if ( DisablePropCreateEffect ) then return end
local effectdata = EffectData()
effectdata:SetOrigin( physobject:GetPos() )
effectdata:SetEntity( entity )
util.Effect( "phys_freeze", effectdata, true, true )
end
--
-- Who can edit variables?
-- If you're writing prop protection or something, you'll
-- probably want to hook or override this function.
--
function GM:CanEditVariable( ent, ply, key, val, editor )
-- Only allow admins to edit admin only variables!
local isAdmin = ply:IsAdmin() || game.SinglePlayer()
if ( editor.AdminOnly && !isAdmin ) then
return false
end
-- This entity decides who can edit its variables
if ( isfunction( ent.CanEditVariables ) ) then
return ent:CanEditVariables( ply )
end
-- default in sandbox is.. anyone can edit anything.
return true
end