Files
wnsrc/lua/arccw/shared/attachments/uc_ubgl_masterkey.lua
lifestorm df294d03aa Upload
2024-08-04 23:54:45 +03:00

296 lines
10 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/
--]]
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