mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
281 lines
7.8 KiB
Lua
281 lines
7.8 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/
|
|
--]]
|
|
|
|
|
|
-- Variables that are used on both client and server
|
|
|
|
SWEP.PrintName = "Scripted Weapon" -- 'Nice' Weapon name (Shown on HUD)
|
|
SWEP.Author = ""
|
|
SWEP.Contact = ""
|
|
SWEP.Purpose = ""
|
|
SWEP.Instructions = ""
|
|
|
|
SWEP.ViewModelFOV = 62
|
|
SWEP.ViewModelFlip = false
|
|
SWEP.ViewModel = "models/weapons/v_pistol.mdl"
|
|
SWEP.WorldModel = "models/weapons/w_357.mdl"
|
|
|
|
SWEP.Spawnable = false
|
|
SWEP.AdminOnly = false
|
|
|
|
SWEP.Primary.ClipSize = 8 -- Size of a clip
|
|
SWEP.Primary.DefaultClip = 32 -- Default number of bullets in a clip
|
|
SWEP.Primary.Automatic = false -- Automatic/Semi Auto
|
|
SWEP.Primary.Ammo = "Pistol"
|
|
|
|
SWEP.Secondary.ClipSize = 8 -- Size of a clip
|
|
SWEP.Secondary.DefaultClip = 32 -- Default number of bullets in a clip
|
|
SWEP.Secondary.Automatic = false -- Automatic/Semi Auto
|
|
SWEP.Secondary.Ammo = "Pistol"
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:Initialize()
|
|
Desc: Called when the weapon is first loaded
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Initialize()
|
|
|
|
self:SetHoldType( "pistol" )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:PrimaryAttack()
|
|
Desc: +attack1 has been pressed
|
|
-----------------------------------------------------------]]
|
|
function SWEP:PrimaryAttack()
|
|
|
|
-- Make sure we can shoot first
|
|
if ( !self:CanPrimaryAttack() ) then return end
|
|
|
|
-- Play shoot sound
|
|
self:EmitSound( "Weapon_AR2.Single" )
|
|
|
|
-- Shoot 9 bullets, 150 damage, 0.75 aimcone
|
|
self:ShootBullet( 150, 1, 0.01, self.Primary.Ammo )
|
|
|
|
-- Remove 1 bullet from our clip
|
|
self:TakePrimaryAmmo( 1 )
|
|
|
|
-- Punch the player's view
|
|
local owner = self:GetOwner()
|
|
if ( !owner:IsNPC() ) then owner:ViewPunch( Angle( -1, 0, 0 ) ) end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:SecondaryAttack()
|
|
Desc: +attack2 has been pressed
|
|
-----------------------------------------------------------]]
|
|
function SWEP:SecondaryAttack()
|
|
|
|
-- Make sure we can shoot first
|
|
if ( !self:CanSecondaryAttack() ) then return end
|
|
|
|
-- Play shoot sound
|
|
self:EmitSound("Weapon_Shotgun.Single")
|
|
|
|
-- Shoot 9 bullets, 150 damage, 0.75 aimcone
|
|
self:ShootBullet( 150, 9, 0.2, self.Secondary.Ammo )
|
|
|
|
-- Remove 1 bullet from our clip
|
|
self:TakeSecondaryAmmo( 1 )
|
|
|
|
-- Punch the player's view
|
|
local owner = self:GetOwner()
|
|
if ( !owner:IsNPC() ) then owner:ViewPunch( Angle( -10, 0, 0 ) ) end
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:Reload()
|
|
Desc: Reload is being pressed
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Reload()
|
|
self:DefaultReload( ACT_VM_RELOAD )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:Think()
|
|
Desc: Called every frame
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Think()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:Holster( weapon_to_swap_to )
|
|
Desc: Weapon wants to holster
|
|
RetV: Return true to allow the weapon to holster
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Holster( wep )
|
|
return true
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:Deploy()
|
|
Desc: Whip it out
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Deploy()
|
|
return true
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:ShootEffects()
|
|
Desc: A convenience function to create shoot effects
|
|
-----------------------------------------------------------]]
|
|
function SWEP:ShootEffects()
|
|
|
|
local owner = self:GetOwner()
|
|
|
|
self:SendWeaponAnim( ACT_VM_PRIMARYATTACK ) -- View model animation
|
|
owner:MuzzleFlash() -- Crappy muzzle light
|
|
owner:SetAnimation( PLAYER_ATTACK1 ) -- 3rd Person Animation
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:ShootBullet()
|
|
Desc: A convenience function to shoot bullets
|
|
-----------------------------------------------------------]]
|
|
function SWEP:ShootBullet( damage, num_bullets, aimcone, ammo_type, force, tracer )
|
|
|
|
local owner = self:GetOwner()
|
|
|
|
local bullet = {}
|
|
bullet.Num = num_bullets
|
|
bullet.Src = owner:GetShootPos() -- Source
|
|
bullet.Dir = owner:GetAimVector() -- Dir of bullet
|
|
bullet.Spread = Vector( aimcone, aimcone, 0 ) -- Aim Cone
|
|
bullet.Tracer = tracer || 5 -- Show a tracer on every x bullets
|
|
bullet.Force = force || 1 -- Amount of force to give to phys objects
|
|
bullet.Damage = damage
|
|
bullet.AmmoType = ammo_type || self.Primary.Ammo
|
|
|
|
owner:FireBullets( bullet )
|
|
|
|
self:ShootEffects()
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:TakePrimaryAmmo()
|
|
Desc: A convenience function to remove ammo
|
|
-----------------------------------------------------------]]
|
|
function SWEP:TakePrimaryAmmo( num )
|
|
|
|
-- Doesn't use clips
|
|
if ( self:Clip1() <= 0 ) then
|
|
|
|
if ( self:Ammo1() <= 0 ) then return end
|
|
|
|
self:GetOwner():RemoveAmmo( num, self:GetPrimaryAmmoType() )
|
|
|
|
return end
|
|
|
|
self:SetClip1( self:Clip1() - num )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:TakeSecondaryAmmo()
|
|
Desc: A convenience function to remove ammo
|
|
-----------------------------------------------------------]]
|
|
function SWEP:TakeSecondaryAmmo( num )
|
|
|
|
-- Doesn't use clips
|
|
if ( self:Clip2() <= 0 ) then
|
|
|
|
if ( self:Ammo2() <= 0 ) then return end
|
|
|
|
self:GetOwner():RemoveAmmo( num, self:GetSecondaryAmmoType() )
|
|
|
|
return end
|
|
|
|
self:SetClip2( self:Clip2() - num )
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:CanPrimaryAttack()
|
|
Desc: Helper function for checking for no ammo
|
|
-----------------------------------------------------------]]
|
|
function SWEP:CanPrimaryAttack()
|
|
|
|
if ( self:Clip1() <= 0 ) then
|
|
|
|
self:EmitSound( "Weapon_Pistol.Empty" )
|
|
self:SetNextPrimaryFire( CurTime() + 0.2 )
|
|
self:Reload()
|
|
return false
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: SWEP:CanSecondaryAttack()
|
|
Desc: Helper function for checking for no ammo
|
|
-----------------------------------------------------------]]
|
|
function SWEP:CanSecondaryAttack()
|
|
|
|
if ( self:Clip2() <= 0 ) then
|
|
|
|
self:EmitSound( "Weapon_Pistol.Empty" )
|
|
self:SetNextSecondaryFire( CurTime() + 0.2 )
|
|
return false
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: OnRemove
|
|
Desc: Called just before entity is deleted
|
|
-----------------------------------------------------------]]
|
|
function SWEP:OnRemove()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: OwnerChanged
|
|
Desc: When weapon is dropped or picked up by a new player
|
|
-----------------------------------------------------------]]
|
|
function SWEP:OwnerChanged()
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: Ammo1
|
|
Desc: Returns how much of ammo1 the player has
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Ammo1()
|
|
return self:GetOwner():GetAmmoCount( self:GetPrimaryAmmoType() )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: Ammo2
|
|
Desc: Returns how much of ammo2 the player has
|
|
-----------------------------------------------------------]]
|
|
function SWEP:Ammo2()
|
|
return self:GetOwner():GetAmmoCount( self:GetSecondaryAmmoType() )
|
|
end
|
|
|
|
--[[---------------------------------------------------------
|
|
Name: DoImpactEffect
|
|
Desc: Callback so the weapon can override the impact effects it makes
|
|
return true to not do the default thing - which is to call UTIL_ImpactTrace in c++
|
|
-----------------------------------------------------------]]
|
|
function SWEP:DoImpactEffect( tr, nDamageType )
|
|
|
|
return false
|
|
|
|
end
|