diff options
Diffstat (limited to 'entities/weapons/bobs_scoped_base')
| -rw-r--r-- | entities/weapons/bobs_scoped_base/cl_init.lua | 9 | ||||
| -rw-r--r-- | entities/weapons/bobs_scoped_base/init.lua | 17 | ||||
| -rw-r--r-- | entities/weapons/bobs_scoped_base/shared.lua | 461 |
3 files changed, 487 insertions, 0 deletions
diff --git a/entities/weapons/bobs_scoped_base/cl_init.lua b/entities/weapons/bobs_scoped_base/cl_init.lua new file mode 100644 index 0000000..cb3dfa3 --- /dev/null +++ b/entities/weapons/bobs_scoped_base/cl_init.lua @@ -0,0 +1,9 @@ +include('shared.lua') + +SWEP.PrintName = "" // 'Nice' Weapon name (Shown on HUD) +SWEP.Slot = 4 // Slot in the weapon selection menu +SWEP.SlotPos = 1 // Position in the slot +SWEP.DrawAmmo = true // Should draw the default HL2 ammo counter // Should draw the default crosshair +SWEP.DrawWeaponInfoBox = true // Should draw the weapon info box +SWEP.BounceWeaponIcon = true // Should the weapon icon bounce? +SWEP.CSMuzzleFlashes = true
\ No newline at end of file diff --git a/entities/weapons/bobs_scoped_base/init.lua b/entities/weapons/bobs_scoped_base/init.lua new file mode 100644 index 0000000..3f157ab --- /dev/null +++ b/entities/weapons/bobs_scoped_base/init.lua @@ -0,0 +1,17 @@ +AddCSLuaFile( "cl_init.lua" ) +AddCSLuaFile( "shared.lua" ) + +include('shared.lua') + +SWEP.Weight = 30 // Decides whether we should switch from/to this +SWEP.AutoSwitchTo = true // Auto switch to if we pick it up +SWEP.AutoSwitchFrom = true // Auto switch from if you pick up a better weapon + +-- function SWEP:Initialize() +-- end + +function SWEP:OnRemove() +end + + + diff --git a/entities/weapons/bobs_scoped_base/shared.lua b/entities/weapons/bobs_scoped_base/shared.lua new file mode 100644 index 0000000..762ca4c --- /dev/null +++ b/entities/weapons/bobs_scoped_base/shared.lua @@ -0,0 +1,461 @@ +-- Variables that are used on both client and server +SWEP.Category = "" +SWEP.Author = "Generic Default, Worshipper, Clavus, and Bob" +SWEP.Contact = "" +SWEP.Purpose = "" +SWEP.Instructions = "" +SWEP.MuzzleAttachment = "1" -- Should be "1" for CSS models or "muzzle" for hl2 models +SWEP.ShellEjectAttachment = "2" -- Should be "2" for CSS models or "1" for hl2 models +SWEP.DrawCrosshair = true +SWEP.ViewModelFOV = 65 +SWEP.ViewModelFlip = true + +SWEP.Base = "bobs_gun_base" + +SWEP.Spawnable = false +SWEP.AdminSpawnable = false + +SWEP.Primary.Sound = Sound("") -- Sound of the gun +SWEP.Primary.Round = ("") -- What kind of bullet? +SWEP.Primary.RPM = 0 -- This is in Rounds Per Minute +SWEP.Primary.Cone = 0.15 -- Accuracy of NPCs +SWEP.Primary.Recoil = 10 +SWEP.Primary.Damage = 10 +SWEP.Primary.Spread = .01 --define from-the-hip accuracy 1 is terrible, .0001 is exact) +SWEP.Primary.NumShots = 1 +SWEP.Primary.ClipSize = 0 -- Size of a clip +SWEP.Primary.DefaultClip = 0 -- Default number of bullets in a clip +SWEP.Primary.KickUp = 0 -- Maximum up recoil (rise) +SWEP.Primary.KickDown = 0 -- Maximum down recoil (skeet) +SWEP.Primary.KickHorizontal = 0 -- Maximum up recoil (stock) +SWEP.Primary.Automatic = true -- Automatic/Semi Auto +SWEP.Primary.Ammo = "none" -- What kind of ammo + +-- SWEP.Secondary.ClipSize = 0 -- Size of a clip +-- SWEP.Secondary.DefaultClip = 0 -- Default number of bullets in a clip +-- SWEP.Secondary.Automatic = false -- Automatic/Semi Auto if +SWEP.Secondary.Ammo = "" + +SWEP.Secondary.ScopeZoom = 0 +SWEP.Secondary.UseACOG = false +SWEP.Secondary.UseMilDot = false +SWEP.Secondary.UseSVD = false +SWEP.Secondary.UseParabolic = false +SWEP.Secondary.UseElcan = false +SWEP.Secondary.UseGreenDuplex = false + +SWEP.Scoped = true + +SWEP.BoltAction = false + +SWEP.Penetration = true +SWEP.Ricochet = true +SWEP.MaxRicochet = 10 + +SWEP.Tracer = 0 + +SWEP.data = {} -- The starting firemode +SWEP.data.ironsights = 1 +SWEP.ScopeScale = 0.5 +SWEP.ReticleScale = 0.5 +SWEP.IronSightsPos = Vector (2.4537, 1.0923, 0.2696) +SWEP.IronSightsAng = Vector (0.0186, -0.0547, 0) + +function SWEP:Initialize() + self.Weapon:SetNWBool("Reloading", false) + util.PrecacheSound(self.Primary.Sound) + if CLIENT then + + -- We need to get these so we can scale everything to the player's current resolution. + local iScreenWidth = surface.ScreenWidth() + local iScreenHeight = surface.ScreenHeight() + + -- The following code is only slightly riped off from Night Eagle + -- These tables are used to draw things like scopes and crosshairs to the HUD. + -- so DONT GET RID OF IT! + + self.ScopeTable = {} + self.ScopeTable.l = iScreenHeight*self.ScopeScale + self.ScopeTable.x1 = 0.5*(iScreenWidth + self.ScopeTable.l) + self.ScopeTable.y1 = 0.5*(iScreenHeight - self.ScopeTable.l) + self.ScopeTable.x2 = self.ScopeTable.x1 + self.ScopeTable.y2 = 0.5*(iScreenHeight + self.ScopeTable.l) + self.ScopeTable.x3 = 0.5*(iScreenWidth - self.ScopeTable.l) + self.ScopeTable.y3 = self.ScopeTable.y2 + self.ScopeTable.x4 = self.ScopeTable.x3 + self.ScopeTable.y4 = self.ScopeTable.y1 + self.ScopeTable.l = (iScreenHeight + 1)*self.ScopeScale -- I don't know why this works, but it does. + + self.QuadTable = {} + self.QuadTable.x1 = 0 + self.QuadTable.y1 = 0 + self.QuadTable.w1 = iScreenWidth + self.QuadTable.h1 = 0.5*iScreenHeight - self.ScopeTable.l + self.QuadTable.x2 = 0 + self.QuadTable.y2 = 0.5*iScreenHeight + self.ScopeTable.l + self.QuadTable.w2 = self.QuadTable.w1 + self.QuadTable.h2 = self.QuadTable.h1 + self.QuadTable.x3 = 0 + self.QuadTable.y3 = 0 + self.QuadTable.w3 = 0.5*iScreenWidth - self.ScopeTable.l + self.QuadTable.h3 = iScreenHeight + self.QuadTable.x4 = 0.5*iScreenWidth + self.ScopeTable.l + self.QuadTable.y4 = 0 + self.QuadTable.w4 = self.QuadTable.w3 + self.QuadTable.h4 = self.QuadTable.h3 + + self.LensTable = {} + self.LensTable.x = self.QuadTable.w3 + self.LensTable.y = self.QuadTable.h1 + self.LensTable.w = 2*self.ScopeTable.l + self.LensTable.h = 2*self.ScopeTable.l + + self.ReticleTable = {} + self.ReticleTable.wdivider = 3.125 + self.ReticleTable.hdivider = 1.7579/self.ReticleScale -- Draws the texture at 512 when the resolution is 1600x900 + self.ReticleTable.x = (iScreenWidth/2)-((iScreenHeight/self.ReticleTable.hdivider)/2) + self.ReticleTable.y = (iScreenHeight/2)-((iScreenHeight/self.ReticleTable.hdivider)/2) + self.ReticleTable.w = iScreenHeight/self.ReticleTable.hdivider + self.ReticleTable.h = iScreenHeight/self.ReticleTable.hdivider + + self.FilterTable = {} + self.FilterTable.wdivider = 3.125 + self.FilterTable.hdivider = 1.7579/1.35 + self.FilterTable.x = (iScreenWidth/2)-((iScreenHeight/self.FilterTable.hdivider)/2) + self.FilterTable.y = (iScreenHeight/2)-((iScreenHeight/self.FilterTable.hdivider)/2) + self.FilterTable.w = iScreenHeight/self.FilterTable.hdivider + self.FilterTable.h = iScreenHeight/self.FilterTable.hdivider + + + end + if SERVER then + self:SetNPCMinBurst(3) + self:SetNPCMaxBurst(10) + self:SetNPCFireRate(1) + --self:SetCurrentWeaponProficiency( WEAPON_PROFICIENCY_VERY_GOOD ) + end + self:SetHoldType(self.HoldType) + + if CLIENT then + + -- // Create a new table for every weapon instance + self.VElements = table.FullCopy( self.VElements ) + self.WElements = table.FullCopy( self.WElements ) + self.ViewModelBoneMods = table.FullCopy( self.ViewModelBoneMods ) + + self:CreateModels(self.VElements) -- create viewmodels + self:CreateModels(self.WElements) -- create worldmodels + + -- // init view model bone build function + if IsValid(self.Owner) and self.Owner:IsPlayer() then + if self.Owner:Alive() then + local vm = self.Owner:GetViewModel() + if IsValid(vm) then + self:ResetBonePositions(vm) + -- // Init viewmodel visibility + if (self.ShowViewModel == nil or self.ShowViewModel) then + vm:SetColor(Color(255,255,255,255)) + else + -- // however for some reason the view model resets to render mode 0 every frame so we just apply a debug material to prevent it from drawing + vm:SetMaterial("Debug/hsv") + end + end + + end + end + + end + + if CLIENT then + local oldpath = "vgui/hud/name" -- the path goes here + local newpath = string.gsub(oldpath, "name", self.Gun) + self.WepSelectIcon = surface.GetTextureID(newpath) + end + +end + +function SWEP:BoltBack() + if self.Weapon:Clip1() > 0 or self.Owner:GetAmmoCount( self.Weapon:GetPrimaryAmmoType() ) > 0 then + timer.Simple(.25, function() + if SERVER and self.Weapon != nil then + self.Weapon:SetNWBool("Reloading", true) + if self.Weapon:GetClass() == self.Gun then + if(self:GetIronsights() == true) then + self.Owner:SetFOV( 0, 0.3 ) + self:SetIronsights(false) + self.Owner:DrawViewModel(true) + end + local boltactiontime = (self.Owner:GetViewModel():SequenceDuration()) + timer.Simple(boltactiontime + .1, + function() if SERVER and self.Weapon != nil then + self.Weapon:SetNWBool("Reloading", false) + if self.Owner:KeyDown(IN_ATTACK2) and self.Weapon:GetClass() == self.Gun then + self.Owner:SetFOV( 75/self.Secondary.ScopeZoom, 0.15 ) + self.IronSightsPos = self.SightsPos -- Bring it up + self.IronSightsAng = self.SightsAng -- Bring it up + self.DrawCrosshair = false + self:SetIronsights(true, self.Owner) + self.Owner:DrawViewModel(false) + end + end + end) + end + else return end end ) + end +end + +function SWEP:Reload() + + if self.Owner:KeyDown(IN_USE) then return end + + self.Weapon:DefaultReload(ACT_VM_RELOAD) + if !self.Owner:IsNPC() then + self.Idle = CurTime() + self.Owner:GetViewModel():SequenceDuration() end + + if ( self.Weapon:Clip1() < self.Primary.ClipSize ) and !self.Owner:IsNPC() then + -- When the current clip < full clip and the rest of your ammo > 0, then + + self.Owner:SetFOV( 0, 0.3 ) + -- Zoom = 0 + + self:SetIronsights(false) + -- Set the ironsight to false + self.Weapon:SetNWBool("Reloading", true) + if CLIENT then return end + self.Owner:DrawViewModel(true) + end + + local waitdammit + if self.Owner:GetViewModel() == nil then + waitdammit = 3 + else + waitdammit = (self.Owner:GetViewModel():SequenceDuration()) + end + timer.Simple(waitdammit + .1, function() + if self.Weapon != nil then + self.Weapon:SetNWBool("Reloading", false) + if self.Owner:KeyDown(IN_ATTACK2) and self.Weapon:GetClass() == self.Gun then + if CLIENT then return end + self.Owner:SetFOV( 75/self.Secondary.ScopeZoom, 0.15 ) + self.IronSightsPos = self.SightsPos -- Bring it up + self.IronSightsAng = self.SightsAng -- Bring it up + self.DrawCrosshair = false + self:SetIronsights(true, self.Owner) + self.Owner:DrawViewModel(false) + elseif self.Owner:KeyDown(IN_SPEED) and self.Weapon:GetClass() == self.Gun then + if self.Weapon:GetNextPrimaryFire() <= (CurTime()+0.3) then + self.Weapon:SetNextPrimaryFire(CurTime()+0.3) -- Make it so you can't shoot for another quarter second + end + self.IronSightsPos = self.RunSightsPos -- Hold it down + self.IronSightsAng = self.RunSightsAng -- Hold it down + self:SetIronsights(true, self.Owner) -- Set the ironsight true + self.Owner:SetFOV( 0, 0.2 ) + else return end + end end) +end + +function SWEP:PostReloadScopeCheck() + if self.Weapon != nil then + self.Weapon:SetNWBool("Reloading", false) + if self.Owner:KeyDown(IN_ATTACK2) and self.Weapon:GetClass() == self.Gun then + if CLIENT then return end + self.Owner:SetFOV( 75/self.Secondary.ScopeZoom, 0.15 ) + self.IronSightsPos = self.SightsPos -- Bring it up + self.IronSightsAng = self.SightsAng -- Bring it up + self.DrawCrosshair = false + self:SetIronsights(true, self.Owner) + self.Owner:DrawViewModel(false) + elseif self.Owner:KeyDown(IN_SPEED) and self.Weapon:GetClass() == self.Gun then + if self.Weapon:GetNextPrimaryFire() <= (CurTime()+0.3) then + self.Weapon:SetNextPrimaryFire(CurTime()+0.3) -- Make it so you can't shoot for another quarter second + end + self.IronSightsPos = self.RunSightsPos -- Hold it down + self.IronSightsAng = self.RunSightsAng -- Hold it down + self:SetIronsights(true, self.Owner) -- Set the ironsight true + self.Owner:SetFOV( 0, 0.2 ) + else return end + end +end + + +/*--------------------------------------------------------- +IronSight +---------------------------------------------------------*/ +function SWEP:IronSight() + + if not IsValid(self) then return end + if not IsValid(self.Owner) then return end + + if self.SelectiveFire and self.NextFireSelect < CurTime() and not (self.Weapon:GetNWBool("Reloading")) then + if self.Owner:KeyDown(IN_USE) and self.Owner:KeyPressed(IN_RELOAD) then + self:SelectFireMode() + end + end + + if self.Owner:KeyDown(IN_USE) and self.Owner:KeyPressed(IN_ATTACK2) then return end + + if self.Owner:KeyPressed(IN_SPEED) and not (self.Weapon:GetNWBool("Reloading")) then -- If you hold E and you can shoot then + if self.Weapon:GetNextPrimaryFire() <= (CurTime()+0.3) then + self.Weapon:SetNextPrimaryFire(CurTime()+0.3) -- Make it so you can't shoot for another quarter second + end + self.IronSightsPos = self.RunSightsPos -- Hold it down + self.IronSightsAng = self.RunSightsAng -- Hold it down + self:SetIronsights(true, self.Owner) -- Set the ironsight true + self.Owner:SetFOV( 0, 0.2 ) + end + + if self.Owner:KeyDown(IN_SPEED) and not (self.Weapon:GetNWBool("Reloading")) then -- If you hold E or run then + if self.Weapon:GetNextPrimaryFire() <= (CurTime()+0.3) then + self.Weapon:SetNextPrimaryFire(CurTime()+0.3) -- Make it so you can't shoot for another quarter second + end -- Lower the gun + end + + if self.Owner:KeyReleased(IN_USE) || self.Owner:KeyReleased (IN_SPEED) then -- If you release E then + self:SetIronsights(false, self.Owner) -- Set the ironsight true + self.DrawCrosshair = self.XHair + end + + + if self.Owner:KeyPressed(IN_SPEED) || self.Owner:KeyPressed(IN_USE) then -- If you run then + self.Owner:SetFOV( 0, 0.2 ) + self.DrawCrosshair = false + if CLIENT then return end + self.Owner:DrawViewModel(true) + end + + if self.Owner:KeyPressed(IN_ATTACK2) and !self.Owner:KeyDown(IN_SPEED) and not (self.Weapon:GetNWBool("Reloading")) then + self.Owner:SetFOV( 75/self.Secondary.ScopeZoom, 0.15 ) + self.IronSightsPos = self.SightsPos -- Bring it up + self.IronSightsAng = self.SightsAng -- Bring it up + self.DrawCrosshair = false + self:SetIronsights(true, self.Owner) + if CLIENT then return end + self.Owner:DrawViewModel(false) + elseif self.Owner:KeyPressed(IN_ATTACK2) and not (self.Weapon:GetNWBool("Reloading")) and self.Owner:KeyDown(IN_SPEED) then + if self.Weapon:GetNextPrimaryFire() <= (CurTime()+0.3) then + self.Weapon:SetNextPrimaryFire(CurTime()+0.3) -- Make it so you can't shoot for another quarter second + end + self.IronSightsPos = self.RunSightsPos -- Hold it down + self.IronSightsAng = self.RunSightsAng -- Hold it down + self:SetIronsights(true, self.Owner) -- Set the ironsight true + self.Owner:SetFOV( 0, 0.2 ) + end + + if (self.Owner:KeyReleased(IN_ATTACK2) || self.Owner:KeyDown(IN_SPEED)) and !self.Owner:KeyDown(IN_USE) and !self.Owner:KeyDown(IN_SPEED) then + self.Owner:SetFOV( 0, 0.2 ) + self:SetIronsights(false, self.Owner) + self.DrawCrosshair = self.XHair + -- Set the ironsight false + if CLIENT then return end + self.Owner:DrawViewModel(true) + end + + if self.Owner:KeyDown(IN_ATTACK2) and !self.Owner:KeyDown(IN_USE) and !self.Owner:KeyDown(IN_SPEED) then + self.SwayScale = 0.05 + self.BobScale = 0.05 + else + self.SwayScale = 1.0 + self.BobScale = 1.0 + end +end + +function SWEP:DrawHUD() + + + if self.Owner:KeyDown(IN_ATTACK2) and (self:GetIronsights() == true) and (!self.Owner:KeyDown(IN_SPEED) and !self.Owner:KeyDown(IN_USE)) then + + if self.Secondary.UseACOG then + -- Draw the FAKE SCOPE THANG + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_closedsight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + + -- Draw the CHEVRON + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_acogchevron")) + surface.DrawTexturedRect(self.ReticleTable.x, self.ReticleTable.y, self.ReticleTable.w, self.ReticleTable.h) + + -- Draw the ACOG REFERENCE LINES + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_acogcross")) + surface.DrawTexturedRect(self.ReticleTable.x, self.ReticleTable.y, self.ReticleTable.w, self.ReticleTable.h) + end + + if self.Secondary.UseMilDot then + -- Draw the MIL DOT SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_scopesight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + end + + if self.Secondary.UseSVD then + -- Draw the SVD SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_svdsight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + end + + if self.Secondary.UseParabolic then + -- Draw the PARABOLIC SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_parabolicsight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + end + + if self.Secondary.UseElcan then + -- Draw the RETICLE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_elcanreticle")) + surface.DrawTexturedRect(self.ReticleTable.x, self.ReticleTable.y, self.ReticleTable.w, self.ReticleTable.h) + + -- Draw the ELCAN SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_elcansight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + end + + if self.Secondary.UseGreenDuplex then + -- Draw the RETICLE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_nvgilluminatedduplex")) + surface.DrawTexturedRect(self.ReticleTable.x, self.ReticleTable.y, self.ReticleTable.w, self.ReticleTable.h) + + -- Draw the SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_closedsight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + end + + if self.Secondary.UseAimpoint then + -- Draw the RETICLE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/aimpoint")) + surface.DrawTexturedRect(self.ReticleTable.x, self.ReticleTable.y, self.ReticleTable.w, self.ReticleTable.h) + + -- Draw the SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/gdcw_closedsight")) + surface.DrawTexturedRect(self.LensTable.x, self.LensTable.y, self.LensTable.w, self.LensTable.h) + + end + + if self.Secondary.UseMatador then + + -- Draw the SCOPE + surface.SetDrawColor(0, 0, 0, 255) + surface.SetTexture(surface.GetTextureID("scope/rocketscope")) + surface.DrawTexturedRect(self.LensTable.x-1, self.LensTable.y, self.LensTable.w, self.LensTable.h) + + end + + end +end + +function SWEP:AdjustMouseSensitivity() + + if self.Owner:KeyDown(IN_ATTACK2) then + return (1/(self.Secondary.ScopeZoom/2)) + else + return 1 + end +end
\ No newline at end of file |
