mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
246
gamemodes/sandbox/entities/weapons/gmod_camera.lua
Normal file
246
gamemodes/sandbox/entities/weapons/gmod_camera.lua
Normal file
@@ -0,0 +1,246 @@
|
||||
--[[
|
||||
| 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()
|
||||
|
||||
SWEP.ViewModel = Model( "models/weapons/c_arms_animations.mdl" )
|
||||
SWEP.WorldModel = Model( "models/MaxOfS2D/camera.mdl" )
|
||||
|
||||
SWEP.Primary.ClipSize = -1
|
||||
SWEP.Primary.DefaultClip = -1
|
||||
SWEP.Primary.Automatic = false
|
||||
SWEP.Primary.Ammo = "none"
|
||||
|
||||
SWEP.Secondary.ClipSize = -1
|
||||
SWEP.Secondary.DefaultClip = -1
|
||||
SWEP.Secondary.Automatic = true
|
||||
SWEP.Secondary.Ammo = "none"
|
||||
|
||||
SWEP.PrintName = "#GMOD_Camera"
|
||||
SWEP.Author = "Facepunch"
|
||||
|
||||
SWEP.Slot = 5
|
||||
SWEP.SlotPos = 1
|
||||
|
||||
SWEP.DrawAmmo = false
|
||||
SWEP.DrawCrosshair = false
|
||||
SWEP.Spawnable = true
|
||||
|
||||
SWEP.ShootSound = Sound( "NPC_CScanner.TakePhoto" )
|
||||
|
||||
SWEP.AutoSwitchTo = false
|
||||
SWEP.AutoSwitchFrom = false
|
||||
|
||||
if ( SERVER ) then
|
||||
|
||||
--
|
||||
-- A concommand to quickly switch to the camera
|
||||
--
|
||||
concommand.Add( "gmod_camera", function( ply, cmd, args )
|
||||
|
||||
ply:SelectWeapon( "gmod_camera" )
|
||||
|
||||
end )
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Network/Data Tables
|
||||
--
|
||||
function SWEP:SetupDataTables()
|
||||
|
||||
self:NetworkVar( "Float", 0, "Zoom" )
|
||||
self:NetworkVar( "Float", 1, "Roll" )
|
||||
|
||||
if ( SERVER ) then
|
||||
self:SetZoom( 70 )
|
||||
self:SetRoll( 0 )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Initialize Stuff
|
||||
--
|
||||
function SWEP:Initialize()
|
||||
|
||||
self:SetHoldType( "camera" )
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Reload resets the FOV and Roll
|
||||
--
|
||||
function SWEP:Reload()
|
||||
|
||||
local owner = self:GetOwner()
|
||||
|
||||
if ( !owner:KeyDown( IN_ATTACK2 ) ) then self:SetZoom( owner:IsBot() && 75 || owner:GetInfoNum( "fov_desired", 75 ) ) end
|
||||
self:SetRoll( 0 )
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- PrimaryAttack - make a screenshot
|
||||
--
|
||||
function SWEP:PrimaryAttack()
|
||||
|
||||
self:DoShootEffect()
|
||||
|
||||
-- If we're multiplayer this can be done totally clientside
|
||||
if ( !game.SinglePlayer() && SERVER ) then return end
|
||||
if ( CLIENT && !IsFirstTimePredicted() ) then return end
|
||||
|
||||
self:GetOwner():ConCommand( "jpeg" )
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- SecondaryAttack - Nothing. See Tick for zooming.
|
||||
--
|
||||
function SWEP:SecondaryAttack()
|
||||
end
|
||||
|
||||
--
|
||||
-- Mouse 2 action
|
||||
--
|
||||
function SWEP:Tick()
|
||||
|
||||
local owner = self:GetOwner()
|
||||
|
||||
if ( CLIENT && owner != LocalPlayer() ) then return end -- If someone is spectating a player holding this weapon, bail
|
||||
|
||||
local cmd = owner:GetCurrentCommand()
|
||||
|
||||
if ( !cmd:KeyDown( IN_ATTACK2 ) ) then return end -- Not holding Mouse 2, bail
|
||||
|
||||
self:SetZoom( math.Clamp( self:GetZoom() + cmd:GetMouseY() * FrameTime() * 6.6, 0.1, 175 ) ) -- Handles zooming
|
||||
self:SetRoll( self:GetRoll() + cmd:GetMouseX() * FrameTime() * 1.65 ) -- Handles rotation
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Override players Field Of View
|
||||
--
|
||||
function SWEP:TranslateFOV( current_fov )
|
||||
|
||||
return self:GetZoom()
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Deploy - Allow lastinv
|
||||
--
|
||||
function SWEP:Deploy()
|
||||
|
||||
return true
|
||||
|
||||
end
|
||||
|
||||
--
|
||||
-- Set FOV to players desired FOV
|
||||
--
|
||||
function SWEP:Equip()
|
||||
|
||||
local owner = self:GetOwner()
|
||||
|
||||
if ( self:GetZoom() == 70 && owner:IsPlayer() && !owner:IsBot() ) then
|
||||
self:SetZoom( owner:GetInfoNum( "fov_desired", 75 ) )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function SWEP:ShouldDropOnDie() return false end
|
||||
|
||||
--
|
||||
-- The effect when a weapon is fired successfully
|
||||
--
|
||||
function SWEP:DoShootEffect()
|
||||
|
||||
local owner = self:GetOwner()
|
||||
|
||||
self:EmitSound( self.ShootSound )
|
||||
self:SendWeaponAnim( ACT_VM_PRIMARYATTACK )
|
||||
owner:SetAnimation( PLAYER_ATTACK1 )
|
||||
|
||||
if ( SERVER && !game.SinglePlayer() ) then
|
||||
|
||||
--
|
||||
-- Note that the flash effect is only
|
||||
-- shown to other players!
|
||||
--
|
||||
|
||||
local vPos = owner:GetShootPos()
|
||||
local vForward = owner:GetAimVector()
|
||||
|
||||
local trace = {}
|
||||
trace.start = vPos
|
||||
trace.endpos = vPos + vForward * 256
|
||||
trace.filter = owner
|
||||
|
||||
local tr = util.TraceLine( trace )
|
||||
|
||||
local effectdata = EffectData()
|
||||
effectdata:SetOrigin( tr.HitPos )
|
||||
util.Effect( "camera_flash", effectdata, true )
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if ( SERVER ) then return end -- Only clientside lua after this line
|
||||
|
||||
SWEP.WepSelectIcon = surface.GetTextureID( "vgui/gmod_camera" )
|
||||
|
||||
-- Don't draw the weapon info on the weapon selection thing
|
||||
function SWEP:DrawHUD() end
|
||||
function SWEP:PrintWeaponInfo( x, y, alpha ) end
|
||||
|
||||
function SWEP:HUDShouldDraw( name )
|
||||
|
||||
-- So we can change weapons
|
||||
if ( name == "CHudWeaponSelection" ) then return true end
|
||||
if ( name == "CHudChat" ) then return true end
|
||||
|
||||
return false
|
||||
|
||||
end
|
||||
|
||||
function SWEP:FreezeMovement()
|
||||
|
||||
local owner = self:GetOwner()
|
||||
|
||||
-- Don't aim if we're holding the right mouse button
|
||||
if ( owner:KeyDown( IN_ATTACK2 ) || owner:KeyReleased( IN_ATTACK2 ) ) then
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
|
||||
end
|
||||
|
||||
function SWEP:CalcView( ply, origin, angles, fov )
|
||||
|
||||
if ( self:GetRoll() != 0 ) then
|
||||
angles.Roll = self:GetRoll()
|
||||
end
|
||||
|
||||
return origin, angles, fov
|
||||
|
||||
end
|
||||
|
||||
function SWEP:AdjustMouseSensitivity()
|
||||
|
||||
if ( self:GetOwner():KeyDown( IN_ATTACK2 ) ) then return 1 end
|
||||
|
||||
return self:GetZoom() / 80
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user