mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
147 lines
7.3 KiB
Lua
147 lines
7.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/
|
|
--]]
|
|
|
|
if (!file.Exists("autorun/vj_base_autorun.lua","LUA")) then return end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.Base = "weapon_vj_base"
|
|
SWEP.PrintName = "Resistance RPG"
|
|
SWEP.Author = "DrVrej"
|
|
SWEP.Contact = "http://steamcommunity.com/groups/vrejgaming"
|
|
SWEP.Purpose = "This weapon is made for Players and NPCs"
|
|
SWEP.Instructions = "Controls are like a regular weapon."
|
|
SWEP.Category = "Half-Life Resurgence"
|
|
SWEP.ViewModel = "models/weapons/c_rpg.mdl"
|
|
SWEP.WorldModel = "models/weapons/w_rocket_launcher.mdl"
|
|
SWEP.HoldType = "rpg"
|
|
SWEP.ViewModelFOV = 60 -- Player FOV for the view model
|
|
SWEP.Spawnable = true
|
|
SWEP.Slot = 4 -- Which weapon slot you want your SWEP to be in? (1 2 3 4 5 6)
|
|
SWEP.SlotPos = 4 -- Which part of that slot do you want the SWEP to be in? (1 2 3 4 5 6)
|
|
SWEP.UseHands = true
|
|
-- NPC Settings ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.NPC_NextPrimaryFire = 5 -- Next time it can use primary fire
|
|
SWEP.NPC_TimeUntilFire = 0.8 -- How much time until the bullet/projectile is fired?
|
|
SWEP.NPC_ReloadSound = {"vj_weapons/reload_rpg.wav"}
|
|
SWEP.NPC_BulletSpawnAttachment = "missile" -- The attachment that the bullet spawns on, leave empty for base to decide!
|
|
SWEP.NPC_FiringDistanceScale = 2.5 -- Changes how far the NPC can fire | 1 = No change, x < 1 = closer, x > 1 = farther
|
|
SWEP.NPC_StandingOnly = true -- If true, the weapon can only be fired if the NPC is standing still
|
|
-- Primary Fire ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.Primary.ClipSize = 1 -- Max amount of bullets per clip
|
|
SWEP.Primary.Recoil = 0.6 -- How much recoil does the player get?
|
|
SWEP.Primary.Delay = 0.3 -- Time until it can shoot again
|
|
SWEP.Primary.Ammo = "RPG_Round" -- Ammo type
|
|
SWEP.Primary.Sound = {"weapons/rpg/rocketfire1.wav"}
|
|
SWEP.Primary.DistantSound = {"vj_weapons/rpg/rpg_fire_far.wav"}
|
|
SWEP.Primary.DisableBulletCode = true -- The bullet won't spawn, this can be used when creating a projectile-based weapon
|
|
SWEP.PrimaryEffects_SpawnShells = false
|
|
-- Reload Settings ---------------------------------------------------------------------------------------------------------------------------------------------
|
|
SWEP.HasReloadSound = true -- Does it have a reload sound? Remember even if this is set to false, the animation sound will still play!
|
|
SWEP.Reload_TimeUntilAmmoIsSet = 0.8 -- Time until ammo is set to the weapon
|
|
SWEP.ReloadSound = "vj_weapons/reload_rpg.wav"
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:SetupDataTables()
|
|
self:NetworkVar("Bool", 0, "NWLaser")
|
|
self:NetworkVar("Entity", 0, "NWEnemy")
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:CustomOnInitialize()
|
|
self:SetNWLaser(true)
|
|
self.RPG_LastShotEnt = NULL
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:CustomOnThink()
|
|
-- If the owner is an NPC then set the rocket to follow its enemy
|
|
if IsValid(self:GetOwner()) && self:GetOwner():IsNPC() then
|
|
//self:SetNWEnemy(IsValid(self:GetOwner():GetEnemy()) && self:GetOwner():GetEnemy() or NULL)
|
|
self:SetNWEnemy(self:GetOwner():GetEnemy())
|
|
self:SetNWLaser(true)
|
|
end
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:CustomOnPrimaryAttack_BeforeShoot()
|
|
if CLIENT then return end
|
|
if IsValid(self.RPG_LastShotEnt) then return true end -- Wait until the last shot has detonated
|
|
|
|
-- Create the rocket entity
|
|
local owner = self:GetOwner()
|
|
local proj = ents.Create("obj_vj_hlr2_rocket")
|
|
if owner:IsPlayer() then
|
|
local plyAng = owner:GetAimVector():Angle()
|
|
proj:SetPos(owner:GetShootPos() + plyAng:Forward()*-20 + plyAng:Up()*-9 + plyAng:Right()*10)
|
|
proj:SetAngles(plyAng)
|
|
else
|
|
proj:SetPos(self:GetNW2Vector("VJ_CurBulletPos"))
|
|
proj:SetAngles((owner:IsNPC() && IsValid(owner:GetEnemy()) && (owner:GetEnemy():GetPos() - self:GetNW2Vector("VJ_CurBulletPos")):Angle()) or owner:GetAngles())
|
|
end
|
|
proj:SetOwner(owner)
|
|
proj:Activate()
|
|
proj:Spawn()
|
|
proj.Rocket_Follow = self:GetNWLaser()
|
|
self.RPG_LastShotEnt = proj
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:CustomOnPrimaryAttackEffects()
|
|
-- Smoke back effects
|
|
ParticleEffectAttach("smoke_exhaust_01a", PATTACH_POINT_FOLLOW, self, 2)
|
|
ParticleEffectAttach("smoke_exhaust_01a", PATTACH_POINT_FOLLOW, self, 2)
|
|
ParticleEffectAttach("smoke_exhaust_01a", PATTACH_POINT_FOLLOW, self, 2)
|
|
timer.Simple(4, function() if IsValid(self) then self:StopParticles() end end)
|
|
return true
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function SWEP:SecondaryAttack()
|
|
-- Toggle whether to laser track or not (Only for players)
|
|
VJ_EmitSound(self, (self:GetNWLaser() and "buttons/button16.wav") or "buttons/button17.wav")
|
|
self:SetNWLaser(!self:GetNWLaser())
|
|
|
|
local owner = self:GetOwner()
|
|
if IsValid(owner) && owner:IsPlayer() then
|
|
owner:PrintMessage(HUD_PRINTTALK, "Laser tracking has been "..(self:GetNWLaser() == true and "enabled" or "disabled"))
|
|
end
|
|
if IsValid(self.RPG_LastShotEnt) then
|
|
self.RPG_LastShotEnt.Rocket_Follow = self:GetNWLaser()
|
|
end
|
|
return false
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
if CLIENT then
|
|
local SpriteMaterial = Material("sprites/redglow1")
|
|
function SWEP:PostDrawViewModel(vm, wep, ply)
|
|
if self:GetNWLaser() then
|
|
render.SetMaterial(SpriteMaterial)
|
|
render.DrawSprite(wep:GetOwner():GetEyeTrace().HitPos, math.random(4,6), math.random(4,6), Color(255,0,0,255))
|
|
end
|
|
end
|
|
|
|
function SWEP:CustomOnDrawWorldModel()
|
|
local owner = self:GetOwner()
|
|
if IsValid(owner) then
|
|
local pos = self:GetPos()
|
|
local useNWLaser = owner:IsPlayer() and self:GetNWLaser() or owner:IsNPC() and true
|
|
if owner:IsPlayer() then
|
|
pos = owner:GetEyeTrace().HitPos
|
|
else
|
|
local ent = self:GetNWEnemy()
|
|
local tr = util.TraceLine({
|
|
start = self:GetAttachment(1).Pos,
|
|
endpos = self:GetAttachment(1).Pos + self:GetAttachment(1).Ang:Forward()*32000,
|
|
filter = {self, owner},
|
|
})
|
|
pos = (tr.Hit and tr.HitPos) or (IsValid(ent) && ent:GetPos() + ent:OBBCenter() or self:GetAttachment(1).Pos + self:GetAttachment(1).Ang:Forward()*32000)
|
|
end
|
|
local size = (owner:IsPlayer() && 5) or 15
|
|
if useNWLaser then
|
|
render.SetMaterial(SpriteMaterial)
|
|
render.DrawSprite(pos, math.random(size - 1, size + 1), math.random(size - 1, size + 1), Color(255,0,0,255))
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
end |