mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
296
lua/arccw/shared/attachments/uc_ubgl_masterkey.lua
Normal file
296
lua/arccw/shared/attachments/uc_ubgl_masterkey.lua
Normal file
@@ -0,0 +1,296 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
att.PrintName = "Masterkey Underslung Shotgun"
|
||||
att.AbbrevName = "Masterkey Shotgun"
|
||||
att.Icon = Material("entities/att/acwatt_uc_ubgl_masterkey.png", "mips smooth")
|
||||
att.Description = "Underslung shotgun primarily used to breach doors, but loaded with #00 Buckshot for your pleasure."
|
||||
|
||||
att.SortOrder = -100000
|
||||
|
||||
att.AutoStats = true
|
||||
att.Desc_Pros = {
|
||||
}
|
||||
att.Slot = "uc_ubgl"
|
||||
att.ExcludeFlags = {"uc_noubgl"}
|
||||
|
||||
att.LHIK = true
|
||||
|
||||
att.ModelOffset = Vector(1.0, 0, -1.7)
|
||||
att.Model = "models/weapons/arccw/atts/uc_ubgl_masterkey.mdl"
|
||||
|
||||
att.SelectUBGLSound = ""
|
||||
att.ExitUBGLSound = ""
|
||||
|
||||
att.UBGL = true
|
||||
|
||||
att.UBGL_PrintName = "UBSG"
|
||||
att.UBGL_Automatic = false
|
||||
att.UBGL_MuzzleEffect = "muzzleflash_shotgun"
|
||||
att.UBGL_Ammo = "buckshot"
|
||||
att.UBGL_RPM = 120
|
||||
att.UBGL_Recoil = 1
|
||||
|
||||
-- ??
|
||||
att.UBGL_Capacity = 4
|
||||
att.UBGL_ClipSize = 4
|
||||
|
||||
att.LHIK_GunDriver = 2
|
||||
att.LHIK_CamDriver = 3
|
||||
|
||||
local pretty = GetConVar("arccw_uc_infiniteubwammo")
|
||||
|
||||
att.Hook_ModifyAttBodygroups = function(wep, data)
|
||||
if wep:GetBuff_Override("UC_UseClassicM203Mount") then
|
||||
data.element.Model:SetBodygroup(1, 1)
|
||||
end
|
||||
end
|
||||
|
||||
local function Ammo(wep)
|
||||
return (pretty:GetBool() and 9999 or wep:GetOwner():GetAmmoCount("buckshot"))
|
||||
end
|
||||
|
||||
att.Hook_LHIK_TranslateAnimation = function(wep, key)
|
||||
if key == "idle" then
|
||||
if wep:GetNW2Bool("MasterkeyInReload", false) or wep:GetNW2Float("MasterkeyReloadTime", CurTime()) >= CurTime() then
|
||||
return "DoNotPlayIdle"
|
||||
elseif wep:GetInUBGL() then
|
||||
return "idle_armed"
|
||||
else
|
||||
return "idle"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
att.Hook_ShouldNotSight = function(wep)
|
||||
if wep:GetInUBGL() then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
att.Hook_OnSelectUBGL = function(wep)
|
||||
wep:SetNextSecondaryFire(CurTime() + 0.7)
|
||||
if (game.SinglePlayer() and SERVER) or (!game.SinglePlayer() and CLIENT and IsFirstTimePredicted()) then
|
||||
wep:DoLHIKAnimation("to_armed", 0.7)
|
||||
wep:PlaySoundTable({
|
||||
{s = "arccw_uc/common/rattle_b2i_rifle.ogg", t = 0},
|
||||
{s = "arccw_uc/common/raise.ogg", t = 0.15},
|
||||
{s = "arccw_uc/common/grab.ogg", t = 0.3},
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
att.Hook_OnDeselectUBGL = function(wep)
|
||||
wep:SetNextSecondaryFire(CurTime() + 0.7)
|
||||
if (game.SinglePlayer() and SERVER) or (!game.SinglePlayer() and CLIENT and IsFirstTimePredicted()) then
|
||||
wep:DoLHIKAnimation("to_idle", 0.7)
|
||||
wep:PlaySoundTable({
|
||||
{s = "arccw_uc/common/rattle_b2i_rifle.ogg", t = 0},
|
||||
{s = "arccw_uc/common/shoulder.ogg", t = 0.3},
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local f1 = {
|
||||
")arccw_uc/common/ub12ga/fire-01.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-02.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-03.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-04.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-05.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-06.ogg",
|
||||
}
|
||||
local f2 = {
|
||||
")arccw_uc/common/ub12ga/fire-dist-01.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-dist-02.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-dist-03.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-dist-04.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-dist-05.ogg",
|
||||
")arccw_uc/common/ub12ga/fire-dist-06.ogg",
|
||||
}
|
||||
local f3 = {
|
||||
")arccw_uc/common/ub12ga/mech-01.ogg",
|
||||
")arccw_uc/common/ub12ga/mech-02.ogg",
|
||||
")arccw_uc/common/ub12ga/mech-03.ogg",
|
||||
")arccw_uc/common/ub12ga/mech-04.ogg",
|
||||
")arccw_uc/common/ub12ga/mech-05.ogg",
|
||||
")arccw_uc/common/ub12ga/mech-06.ogg",
|
||||
}
|
||||
|
||||
att.UBGL_Fire = function(wep, ubgl)
|
||||
if wep:Clip2() <= 0 or wep:GetNextPrimaryFire() > CurTime() then return end
|
||||
if wep:GetNW2Bool("MasterkeyNeedsPump", false) then return end
|
||||
|
||||
local owner = wep:GetOwner()
|
||||
|
||||
local dir = (owner:EyeAngles() + wep:GetFreeAimOffset()):Forward()
|
||||
|
||||
local bullet = {
|
||||
DamageMax = 18, -- 6 pellets to kill
|
||||
DamageMin = 13, -- 8 pelllets to kill
|
||||
Range = 50,
|
||||
RangeMin = 5,
|
||||
DamageType = DMG_BUCKSHOT + DMG_BULLET,
|
||||
Penleft = 0,
|
||||
Penetration = 0,
|
||||
Num = 1,
|
||||
Damaged = {},
|
||||
Weapon = wep,
|
||||
BodyDamageMults = ArcCW.UC.BodyDamageMults_Shotgun,
|
||||
}
|
||||
|
||||
local data = {
|
||||
Attacker = owner,
|
||||
Dir = dir,
|
||||
Src = wep:GetShootSrc(),
|
||||
Spread = Vector(0, 0, 0),
|
||||
Damage = 0,
|
||||
Num = 1,
|
||||
Force = 10,
|
||||
HullSize = 4,
|
||||
Weapon = wep,
|
||||
Callback = function(attacker, tr, dmg)
|
||||
-- HACK: Pass a fake bullet table instead of ourselves so we don't use the weapon's attributes unintentionally
|
||||
bullet.Travelled = (tr.HitPos - tr.StartPos):Length()
|
||||
ArcCW:BulletCallback(att, tr, dmg, bullet)
|
||||
end
|
||||
}
|
||||
|
||||
if wep:GetOwner():IsPlayer() then
|
||||
for n = 1, 8 do
|
||||
local dirry = Vector(dir.x, dir.y, dir.z)
|
||||
math.randomseed(math.Round(util.SharedRandom(n, -1337, 1337, !game.SinglePlayer() and wep:GetOwner():GetCurrentCommand():CommandNumber() or CurTime()) * (wep:EntIndex() % 30241)))
|
||||
wep:ApplyRandomSpread(dirry, ArcCW.MOAToAcc * 100)
|
||||
data.Dir = dirry
|
||||
if GetConVar("arccw_bullet_enable"):GetBool() then
|
||||
ArcCW:ShootPhysBullet(wep, data.Src, (250 / ArcCW.HUToM) * data.Dir:GetNormalized(), 0, bullet)
|
||||
else
|
||||
owner:FireBullets(data, true)
|
||||
end
|
||||
end
|
||||
else
|
||||
data.Spread = Vector(ArcCW.MOAToAcc * 50, ArcCW.MOAToAcc * 50, 0)
|
||||
data.Num = 8
|
||||
owner:FireBullets(data, true)
|
||||
end
|
||||
|
||||
if (game.SinglePlayer() and SERVER) or (!game.SinglePlayer() and CLIENT and IsFirstTimePredicted()) then
|
||||
wep:MyEmitSound(table.Random(f1), 80, 100, 1, CHAN_STATIC )
|
||||
wep:MyEmitSound(table.Random(f2), 149, 100, 1, CHAN_STATIC )
|
||||
wep:MyEmitSound(table.Random(f3), 80, 100, 1, CHAN_STATIC )
|
||||
end
|
||||
|
||||
if game.SinglePlayer() and SERVER or (!game.SinglePlayer() and CLIENT and IsFirstTimePredicted()) then
|
||||
wep:DoEffects()
|
||||
wep:DoLHIKAnimation("fire")
|
||||
end
|
||||
wep:SetNextPrimaryFire(CurTime() + 0.4)
|
||||
wep:SetClip2(wep:Clip2() - 1)
|
||||
wep:SetNW2Bool("MasterkeyNeedsPump", true)
|
||||
wep:SetNW2Float("MasterkeyPumpTime", CurTime() + 0.3)
|
||||
end
|
||||
|
||||
att.Hook_Think = function(wep)
|
||||
local p = wep:GetOwner()
|
||||
local pred = game.SinglePlayer() and SERVER or (!game.SinglePlayer() and CLIENT and IsFirstTimePredicted())
|
||||
if wep:GetNW2Bool("MasterkeyInReload", false) then
|
||||
if wep:GetNW2Float("MasterkeyReloadTime", CurTime()) <= CurTime() then
|
||||
if (!p and false or p:KeyDown(IN_ATTACK)) or Ammo(wep) <= 0 or wep:Clip2() == 4 then
|
||||
wep:SetReloading(CurTime() + 0.5)
|
||||
wep:SetNW2Float("MasterkeyPumpTime", CurTime() + 0.5)
|
||||
wep:SetNW2Float("MasterkeyReloadTime", CurTime() + 0.5)
|
||||
if pred then
|
||||
wep:DoLHIKAnimation("sgreload_end")
|
||||
wep:PlaySoundTable({
|
||||
{s = ")arccw_uc/common/shoulder.ogg", t = 0.1},
|
||||
})
|
||||
end
|
||||
wep:SetNW2Bool("MasterkeyInReload", false)
|
||||
else
|
||||
wep:SetReloading(CurTime() + 0.9)
|
||||
wep:SetNW2Float("MasterkeyReloadTime", CurTime() + 0.7)
|
||||
if pred then
|
||||
wep:DoLHIKAnimation("sgreload_insert", 0.9)
|
||||
wep:PlaySoundTable({
|
||||
{s = ")arccw_uc/common/shotgun-insert-alt-01.ogg", t = 0.05},
|
||||
})
|
||||
end
|
||||
wep:SetClip2(wep:Clip2() + 1)
|
||||
if !pretty:GetBool() then
|
||||
wep:GetOwner():RemoveAmmo(1, "buckshot")
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif wep:GetNW2Bool("MasterkeyNeedsPump", false) and wep:GetNW2Float("MasterkeyPumpTime", CurTime()) <= CurTime() and wep:Clip2() > 0 and !wep:GetOwner():KeyDown( IN_ATTACK ) then
|
||||
wep:SetNW2Bool("MasterkeyNeedsPump", false)
|
||||
wep:SetPriorityAnim(CurTime() + 0.4)
|
||||
if pred then
|
||||
wep:DoLHIKAnimation("cycle", 1.0)
|
||||
wep:PlaySoundTable({
|
||||
{s = ")weapons/arccw_ud/870/rack_1.ogg", t = 0.02},
|
||||
{s = ")weapons/arccw_ud/870/eject.ogg", t = 0.13},
|
||||
{s = ")weapons/arccw_ud/870/rack_2.ogg", t = 0.17},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
att.UBGL_Reload = function(wep, ubgl)
|
||||
if wep:Clip2() >= 4 then return end
|
||||
if Ammo(wep) <= 0 then return end
|
||||
|
||||
wep:SetNextSecondaryFire(CurTime() + 1)
|
||||
|
||||
local holy = (game.SinglePlayer() and SERVER) or (!game.SinglePlayer() and CLIENT and IsFirstTimePredicted())
|
||||
if wep:Clip2() == 0 then -- Always pump on empty.
|
||||
wep:SetNW2Bool("MasterkeyNeedsPump", true)
|
||||
end
|
||||
--[[if wep:Clip2() == 0 then
|
||||
if holy then
|
||||
wep:DoLHIKAnimation("sgreload_start_empty", 2)
|
||||
wep:PlaySoundTable({
|
||||
{s = ")weapons/arccw_ud/870/rack_1.ogg", t = 0},
|
||||
{s = ")arccw_uc/common/shotgun-insert-alt-01.ogg", t = 0.8},
|
||||
{s = ")weapons/arccw_ud/870/rack_2.ogg", t = 1.5},
|
||||
{s = ")arccw_uc/common/shoulder.ogg", t = 1.6},
|
||||
})
|
||||
end
|
||||
wep:SetNW2Bool("MasterkeyNeedsPump", false)
|
||||
wep:SetReloading(CurTime() + 2)
|
||||
wep:SetNW2Float("MasterkeyReloadTime", CurTime() + 2)
|
||||
|
||||
wep:SetClip2(wep:Clip2() + 1)
|
||||
if !pretty:GetBool() then
|
||||
wep:GetOwner():RemoveAmmo(1, "buckshot")
|
||||
end
|
||||
else]]
|
||||
if holy then
|
||||
wep:DoLHIKAnimation("sgreload_start", 0.7)
|
||||
wep:PlaySoundTable({
|
||||
{s = ")arccw_uc/common/raise.ogg", t = 0.15},
|
||||
{s = ")arccw_uc/common/grab.ogg", t = 0.3},
|
||||
})
|
||||
end
|
||||
wep:SetReloading(CurTime() + 0.7)
|
||||
wep:SetNW2Float("MasterkeyReloadTime", CurTime() + 0.7)
|
||||
--end
|
||||
wep:SetNW2Bool("MasterkeyInReload", true)
|
||||
|
||||
--local reserve = Ammo(wep)
|
||||
--reserve = reserve + wep:Clip2()
|
||||
--local clip = 4
|
||||
--local load = math.Clamp(clip, 0, reserve)
|
||||
--wep:GetOwner():SetAmmo(reserve - load, "smg1_grenade")
|
||||
--wep:SetClip2(load)
|
||||
end
|
||||
|
||||
att.Mult_SightTime = 1.2
|
||||
att.Mult_SpeedMult = 0.9
|
||||
att.Mult_SightedSpeedMult = 0.85
|
||||
Reference in New Issue
Block a user