Files
wnsrc/lua/weapons/weapon_vj_hlr2_rpg/shared.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

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