Files
wnsrc/lua/weapons/weapon_vj_hlr2_chargebow/shared.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

127 lines
6.1 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 = "Charge Bow"
SWEP.Author = "Cpt. Hazama"
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.Spawnable = true
SWEP.Category = "Half-Life Resurgence"
SWEP.ViewModel = "models/vj_hlr/hl2/weapons/c_chargebow.mdl"
SWEP.WorldModel = "models/vj_hlr/hl2/weapons/w_chargebow.mdl"
SWEP.HoldType = "crossbow"
SWEP.Slot = 3 -- Which weapon slot you want your SWEP to be in? (1 2 3 4 5 6)
SWEP.SlotPos = 3 -- Which part of that slot do you want the SWEP to be in? (1 2 3 4 5 6)
SWEP.SwayScale = 1 -- Default is 1, The scale of the viewmodel sway
SWEP.UseHands = true
SWEP.WorldModel_UseCustomPosition = true -- Should the gun use custom position? This can be used to fix guns that are in the crotch
-- NPC Settings ---------------------------------------------------------------------------------------------------------------------------------------------
SWEP.NPC_NextPrimaryFire = 3 -- Next time it can use primary fire
SWEP.NPC_TimeUntilFire = 0.4 -- How much time until the bullet/projectile is fired?
SWEP.NPC_StandingOnly = true -- If true, the weapon can only be fired if the NPC is standing still
SWEP.NPC_FiringDistanceScale = 0.5 -- Changes how far the NPC can fire | 1 = No change, x < 1 = closer, x > 1 = farther
SWEP.NPC_ReloadSound = {"weapons/physcannon/physcannon_pickup.wav"} -- Sounds it plays when the base detects the SNPC playing a reload animation
SWEP.NPC_BulletSpawnAttachment = "muzzle" -- The attachment that the bullet spawns on, leave empty for base to decide!
-- Primary Fire ---------------------------------------------------------------------------------------------------------------------------------------------
SWEP.Primary.ClipSize = 1 -- Max amount of bullets per clip
SWEP.Primary.Delay = 1.25 -- Time until it can shoot again
SWEP.Primary.Ammo = "XBowBolt" -- Ammo type
SWEP.Primary.Automatic = true
SWEP.Primary.Sound = {"vj_hlr/hl2_weapon/chargebow/chargebow_1.wav","vj_hlr/hl2_weapon/chargebow/chargebow_2.wav","vj_hlr/hl2_weapon/chargebow/chargebow_3.wav"}
SWEP.Primary.DistantSound = {}
SWEP.PrimaryEffects_MuzzleFlash = false
SWEP.PrimaryEffects_SpawnShells = false
SWEP.Primary.DisableBulletCode = true
-- 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.ReloadSound = "weapons/physcannon/physcannon_pickup.wav" // npc/assassin/ball_zap1.wav
SWEP.Reload_TimeUntilAmmoIsSet = 1 -- Time until ammo is set to the weapon
-- Custom
SWEP.Bow_NumShots = 1
---------------------------------------------------------------------------------------------------------------------------------------------
function SWEP:PreDrawViewModel(vm, weapon, ply)
vm:SetBodygroup(1, 1) -- Because bodygroup texture is broken
end
---------------------------------------------------------------------------------------------------------------------------------------------
local posAngPly = Vector(0, -60, 180)
local posOrgPly = Vector(0, -2, 1.5)
local posAngNPC = Vector(-100, 30, 180)
local posOrgNPC = Vector(-3, -3, -12)
--
function SWEP:CustomOnDrawWorldModel() -- This is client only!
local owner = self:GetOwner()
if IsValid(owner) then
if owner:IsPlayer() then
self.WorldModel_CustomPositionAngle = posAngPly
self.WorldModel_CustomPositionOrigin = posOrgPly
self.WorldModel_CustomPositionBone = "ValveBiped.Bip01_L_Hand"
else
self.WorldModel_CustomPositionAngle = posAngNPC
self.WorldModel_CustomPositionOrigin = posOrgNPC
self.WorldModel_CustomPositionBone = "ValveBiped.Bip01_R_Hand"
end
end
return true
end
---------------------------------------------------------------------------------------------------------------------------------------------
function SWEP:CustomOnReload()
self.Bow_NumShots = 1
VJ_CreateSound(self, "buttons/button19.wav")
self.AnimTbl_Idle = {ACT_VM_IDLE}
self.AnimTbl_Draw = {ACT_VM_DRAW}
end
---------------------------------------------------------------------------------------------------------------------------------------------
function SWEP:SecondaryAttack()
self.Bow_NumShots = 3
self:PrimaryAttack()
self:SetNextSecondaryFire(CurTime() + self.Primary.Delay)
return true
end
---------------------------------------------------------------------------------------------------------------------------------------------
function SWEP:CustomOnPrimaryAttack_BeforeShoot()
local owner = self:GetOwner()
if owner:IsPlayer() then
self.AnimTbl_Idle = {ACT_VM_FIDGET}
self.AnimTbl_Draw = {ACT_VM_DRAW_EMPTY}
end
if CLIENT then return end
-- Projectile
for i = 1, self.Bow_NumShots do
local proj = ents.Create("obj_vj_hlr2_chargebolt")
if owner:IsPlayer() then
local ply_Ang = owner:GetAimVector():Angle()
proj:SetPos(owner:GetShootPos() + ply_Ang:Forward()*-33 + ply_Ang:Up()*-5 + ply_Ang:Right()*1)
proj:SetAngles(ply_Ang)
else
proj:SetPos(self:GetNW2Vector("VJ_CurBulletPos"))
proj:SetAngles(owner:GetAngles())
end
proj:SetOwner(owner)
proj:Activate()
proj:Spawn()
proj.DirectDamage = proj.DirectDamage / self.Bow_NumShots
local phys = proj:GetPhysicsObject()
if phys:IsValid() then
if owner:IsPlayer() then
phys:SetVelocity(owner:GetAimVector() * 3000 + Vector(i == 2 && -75 or i == 3 && 75 or 0, 0, 0))
else
phys:SetVelocity(owner:CalculateProjectile("Line", self:GetNW2Vector("VJ_CurBulletPos"), owner:GetEnemy():GetPos() + owner:GetEnemy():OBBCenter(), 3000))
end
end
end
end