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

679 lines
21 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/
--]]
/*
Take a look at
https://github.com/HaodongMo/ArcCW/wiki/Attachment-Parameters
for descriptions on these
*/
att.PrintName = ""
att.AbbrevName = "" -- Shown in lists, cust2 only
att.Icon = nil
att.Description = ""
att.Desc_Pros = {}
att.Desc_Cons = {}
att.Desc_Neutrals = {}
att.Slot = ""
att.SortOrder = 0
att.Spawnable = false -- generate entity
att.AdminOnly = false -- see above
att.Ignore = true
att.InvAtt = nil -- use this other attachment in inventory
att.Free = false -- attachment is always available, and doesn't need to be picked up or unlocked
att.IgnorePickX = false -- will not increment the Pick X counter
att.Hidden = false
att.HideIfBlocked = false -- if the attachment cannot be attached due to flag reasons, do not show up
att.HideIfUnavailable = false -- if the attachment is not owned, do not show up even if "Hide Unowned Attachments" is off
att.NoRandom = false -- will not be randomly rolled
att.RandomWeight = 1 -- random rolling weight, defaults to 1
att.NotForNPCs = false
att.AddPrefix = ""
att.AddSuffix = ""
att.ToggleLockDefault = false -- if true then lock attachment from switching stats through bind (use on stocks/colored stuff)
att.ToggleStats = {
-- {
-- PrintName = "Red",
-- AutoStatName = "On",
-- NoAutoStat = false,
-- Laser = true,
-- LaserColor = Color(255, 0, 0),
-- Mult_HipDispersion = 0.75,
-- AdditionalSights = {
-- {
-- Pos = Vector(-2, 10, -4), -- relative to where att.Model is placed
-- Ang = Angle(0, 0, -45),
-- GlobalPos = false,
-- GlobalAng = true,
-- Magnification = 1
-- }
-- },
-- },
-- {
-- PrintName = "Blue",
-- AutoStats = true,
-- Laser = true,
-- LaserColor = Color(0, 0, 255),
-- Mult_HipDispersion = 0.75,
-- AdditionalSights = {
-- {
-- Pos = Vector(-2, 10, -4), -- relative to where att.Model is placed
-- Ang = Angle(0, 0, -45),
-- GlobalPos = false,
-- GlobalAng = true,
-- Magnification = 1
-- }
-- },
-- },
-- {
-- PrintName = "Off",
-- Laser = false,
-- Mult_HipDispersion = 1,
-- }
}
att.KeepBaseIrons = false
att.BaseIronsFirst = false
att.GivesFlags = {}
att.RequireFlags = {}
att.ExcludeFlags = {}
-- any strings present in data will be added to weapon flags
att.Hook_ExtraFlags = function(wep, data) end
-- Do not use right now.
att.SubSlots = {
{
PrintName = "Optic",
Slot = {"optic", "optic_lp"}, -- OR
Slot = "optic",
DefaultAttName = "Iron Sights",
DefaultAttIcon = Material(""),
MergeSlots = {}, -- mergeslots are relative to att.SubSlots, so this entry would be [1], then [2], etc
-- bone/wmbone is inherited
ExtraSightDist = 0,
Offset = { -- inherits from base slot
vpos = Vector(0, 0, 0),
vang = Angle(0, 0, 0),
wpos = Vector(0, 0, 0),
wang = Angle(0, 0, 0)
},
SlideAmount = {
vmin = Vector(0, 0, 0),
vmax = Vector(0, 0, 0),
wmin = Vector(0, 0, 0),
wmax = Vector(0, 0, 0),
},
}
-- CorrectiveAng/Pos is inherited from base slot
-- everything else is the same as normal slots
}
att.Max = nil -- the maximum number of this attachment that can be attached.
att.Model = ""
att.HideModel = false
att.ModelBodygroups = ""
att.ModelSkin = 0
att.ModelScale = Vector(1, 1, 1)
att.ModelOffset = Vector(0, 0, 0)
att.OffsetAng = Angle(0, 0, 0)
att.ModelIsShield = false
att.ShieldResistance = nil -- amount of penetration to get through one unit of shield
att.ShieldBone = "ValveBiped.Bip01_R_Hand"
att.Charm = false
att.CharmBone = "Charm"
att.CharmModel = ""
att.CharmOffset = Vector(0, 0, 0)
att.CharmScale = Vector(1, 1, 1)
att.CharmSkin = 0
att.CharmBodygroups = ""
att.Health = 0 -- for breakable attachments
att.ShieldCorrectAng = Angle(0, 0, 0)
att.ShieldCorrectPos = Vector(0, 0, 0)
-- amount of damage done to this attachment
-- attachments which are even a bit damaged are not returned
att.DamageOnShoot = 0
att.DamageOnReload = 0
att.DamagePerSecond = 0
-- {slot = int, atthp = float, dmg = DamageInfo}
att.Hook_PlayerTakeDamage = function(wep, data) end
-- {slot = int, oldhp = float, dmg = float}
att.Hook_AttTakeDamage = function(wep, data) end
-- {slot = int, dmg = float}
att.Hook_AttDestroyed = function(wep, data) end
att.VMColor = Color(255, 255, 255)
att.WMColor = Color(255, 255, 255)
att.VMMaterial = ""
att.WMMaterial = ""
att.DroppedModel = nil
att.LHIKHide = false -- use this to just hide the left hand
att.LHIK = false -- use this model for left hand IK
att.LHIK_Animation = false
att.LHIK_GunDriver = ""
att.LHIK_CamDriver = ""
att.Override_NoHideLeftHandInCustomization = nil
att.ActivateElements = {}
att.MountPositionOverride = nil -- set between 0 to 1 to always mount in a certain position
att.AdditionalSights = {
{
Pos = Vector(0, 0, 0), -- relative to where att.Model is placed
Ang = Angle(0, 0, 0),
GlobalPos = false, -- solver will not correct position relative to att.Model position
GlobalAng = false, -- solver will not correct angle
ViewModelFOV = 45,
ScrollFunc = ArcCW.SCROLL_ZOOM,
ZoomLevels = 6,
ZoomSound = "weapons/arccw/fiveseven/fiveseven_slideback.wav",
NVScope = nil, -- enables night vision effects for scope
NVScopeColor = Color(0, 255, 100),
NVFullColor = false, -- night vision scope is true full color
Thermal = true,
ThermalScopeColor = Color(255, 255, 255),
ThermalHighlightColor = Color(255, 255, 255),
ThermalFullColor = false,
ThermalScopeSimple = false,
ThermalNoCC = false,
ThermalBHOT = false, -- invert bright/dark
IgnoreExtra = false, -- ignore gun-determined extra sight distance
Contrast = 1, -- allows you to adjust the values for contrast and brightness when either NVScope or Thermal is enabled.
Brightness = 0,
SpecialScopeFunction = function(screen) end -- perform whatever screen space effects you like here, copy SWEP:FormThermalImaging and SWEP:FormNightVision for examples
}
}
att.UBGL = false -- is underbarrel grenade launcher
att.UBGL_Icon = nil -- set to a IMaterial to replace icon in HUD
att.UBGL_Automatic = false
att.UBGL_ClipSize = 1
att.UBGL_Ammo = "smg1_grenade"
att.UBGL_RPM = 300
-- Use animations on the weapon itself, useful for weapon-specific UBGL
att.UBGL_BaseAnims = false
-- wep: weapon
-- ubgl: UBGL attachment slot.
att.UBGL_Fire = function(wep, ubgl) end
att.UBGL_Reload = function(wep, ubgl) end
att.Silencer = false
att.Bipod = false
att.Bipod_Icon = nil -- set to a IMaterial to replace icon in HUD
att.Mult_BipodRecoil = 0.25
att.Mult_BipodDispersion = 0.1
att.Override_InBipodPos = nil
att.Override_AlwaysPhysBullet = nil
att.Override_NeverPhysBullet = nil
att.Override_AmmoPerShot = 1
att.Override_InfiniteAmmo = nil
att.Override_BottomlessClip = nil
att.MagExtender = false
att.MagReducer = false
att.OverrideClipSize = nil
att.Add_ClipSize = 0
att.BaseClipSize = nil -- currently only used to make autostats treat this as the "base" clip size for pros/cons
att.Override_FuseTime = nil
att.Laser = false
att.LaserStrength = 1
att.LaserBone = "laser"
att.LaserColor = Color(255, 0, 0)
att.Flashlight = false
att.FlashlightFOV = 50
att.FlashlightHFOV = nil -- horizontal FOV
att.FlashlightVFOV = nil -- vertical FOV
-- basically, use HFOV + VFOV if you want it to be non square
att.FlashlightFarZ = 512 -- how far it goes
att.FlashlightNearZ = 4 -- how far away it starts
att.FlashlightAttenuationType = ArcCW.FLASH_ATT_LINEAR -- LINEAR, CONSTANT, QUADRATIC are available
att.FlashlightColor = Color(255, 255, 255)
att.FlashlightTexture = ""
att.FlashlightBrightness = 1
att.FlashlightBone = "laser"
att.Holosight = false
att.HolosightReticle = nil
att.HolosightFlare = nil
att.HolosightSize = nil
att.HolosightBone = "holosight"
att.HolosightPiece = nil -- the lens of the holo sight, if applicable
att.HolosightMagnification = 1 -- magnify the lens by this much
att.HolosightBlackbox = false
att.HolosightNoHSP = false -- for this holosight ignore HSP
att.HolosightConstDist = nil -- constant holosight distance, mainly for scopes with range finder
att.Colorable = false -- automatically use the player's color option
att.HolosightColor = Color(255, 255, 255)
att.Override_Ammo = "ar2" -- overrides the ammo type with this one
att.Override_Firemodes = {}
-- you can use _Priority to determine the priority of overrides.
-- append it to the end of an Override_ stat to set this.
-- for example, att.Override_Firemodes_Priority = 2
-- higher priority = will be chosen over lower priority
-- default priority for all stats is 1.
-- all hooks will work when applied to the SWEP table as well
-- e.g. SWEP.Hook_FireBullets
-- use A_Hook_[Add_Whatever] to hook into additive hooks.
-- {buff = string buff, add = num add}
-- return table
-- use O_Hook_[Override_Whatever] to hook into override hooks.
-- {buff = string buff, current = any override, winningslot = int slot}
-- use M_Hook_[Mult_Whatever] to hook into multiply hooks.
-- {buff = string buff, mult = num mult}
-- all hooks, mults, and adds will work on fire modes
-- called when the active sight is changed
-- return to change activesight
-- {active = int activesight, asight = table}
att.Hook_SwitchActiveSights = function(wep, data) end
-- Allows you to directly edit the burst count
att.Hook_GetBurstCount = function(wep, burstcount) end
-- Allows you to directly edit how long a burst is
att.Hook_GetBurstLength = function(wep, length) end
-- Allows you to directly edit whether the weapon is reloading/inoperable
att.Hook_GetReloading = function(wep, reloading) end
-- Directly modify dispersion
att.Hook_ModDispersion = function(wep, dispersion) end
-- Allows you to change the weapon's name
-- string name
att.Hook_NameChange = function(wep, name) end
-- allows you to do whatever you like to the weapon VMs
-- {vm = vm, eles = ae}
att.Hook_ModifyBodygroups = function(wep, data) end
-- modify the attachment however you like; only called for the particular attachment
-- {vm = vm, element = VElement / WElement, slottbl = slottbl, wm = false/true}
att.Hook_ModifyAttBodygroups = function(wep, data) end
-- allows you to return a shotgun spread offset
-- {n = int number, ang = angle offset}
att.Hook_ShotgunSpreadOffset = function(wep, data) end
-- done before playing an effect
-- return false to prevent playing
-- fx: {eff = effect name, fx = EffectData()}
att.Hook_PreDoEffects = function(wep, fx) end
-- return true = compatible
-- return false = incompatible
-- data = {slot = string or table, att = string}
att.Hook_Compatible = function(wep, data) end
-- called before the bullet is made.
att.Hook_PostFireBullets = function(wep) end
-- hook that lets you change the values of the bullet before it's fired.
att.Hook_FireBullets = function(wep, bullettable) end
-- called after all other primary attack functions. Do stuff here.
att.Hook_PostFireBullets = function(wep) end
-- return true to prevent fire
att.Hook_ShouldNotFire = function(wep) end
-- return true to prevent fire, bashing, anything involving the fire button
att.Hook_ShouldNotFireFirst = function(wep) end
-- return true to prevent ads
att.Hook_ShouldNotSight = function(wep) end
-- return anything to select this reload animation. Bear in mind that not all guns have the same animations, so check first.
att.Hook_SelectReloadAnimation = function(wep, curanim) end
-- return anything to multiply reload time by that much
att.Hook_MultReload = function(wep, mult) end
-- data has entries:
-- number count, how much ammo to add with this insert
-- string anim, which animation to play
-- bool empty, whether we are reloading from empty
att.Hook_SelectInsertAnimation = function(wep, data) end
-- return to override fire animation
att.Hook_SelectFireAnimation = function(wep, curanim) end
-- return string to change played anim
-- string anim, animation we are attempting to play
-- return false to block animation
-- return nil to do nothing
att.Hook_TranslateAnimation = function(wep, anim) end
-- directly changes source sequence to play
-- seq and return can either be string or table
att.Hook_TranslateSequence = function(wep, seq) end
-- called when the vm is about to play an idle animation
-- return a value to override ianim
att.Hook_IdleReset = function(wep, ianim) end
-- allows any sound to be translated to any other
att.Hook_TranslateSound = function(wep, soundname) end
-- directly changes sequence to play
-- return "DoNotPlayIdle" to stop idle animation
att.Hook_LHIK_TranslateAnimation = function(wep, anim) end
-- att.Hook_TranslateAnimation = function(wep, anim)
-- if anim == "reload" then
-- return "reload_soh"
-- elseif anim == "reload_empty" then
-- return "reload_empty_soh"
-- end
-- end
-- anim is string
att.Hook_SelectBashAnim = function(wep, anim) end
att.Hook_SelectFixAnim = function(wep, anim) end
att.Hook_PreBash = function(wep) end
-- data = {tr = tr, dmg = dmg}
att.Hook_PostBash = function(wep, data) end
-- Called just before a physbullet will call FireBullets
-- data.bullet - physbullet info; data.tr - trace info
att.Hook_PhysBulletHit = function(wep, data) end
-- data has entries:
-- number range, the distance the bullet had to travel
-- number damage, the calculated damage the bullet will do
-- number penleft, the amount of penetration the bullet still possesses
-- enum dmgtype, the DMG_ enum of the damagetype
-- table tr, the trace result
-- entity att, the attacker (?)
-- DamageInfo dmg, the damage info
-- changes to dmg may be overwritten later, so set damage and dmgtype instead
att.Hook_BulletHit = function(wep, data) end
-- called right after BulletHit, no further changes can be applied to damage
att.Hook_PostBulletHit = function(wep, data) end
-- return true to prevent reloading
att.Hook_PreReload = function(wep) end
att.Hook_PostReload = function(wep) end
-- return true to prevent firemode change
att.Hook_ChangeFiremode = function(wep) end
-- return true to ignore current bullets in clip when reloading
att.Hook_ReloadDumpClip = function(wep) end
att.Hook_GetVisualBullets = function(wep) end
att.Hook_GetVisualClip = function(wep) end
-- modify what the event system be do
-- the event is a table containing stuff that it does
-- sh_timers last stuff timers are stupid lets not
-- please dont return anything people kinda would wanna run events i'd imagine
att.Hook_PrePlayEvent = function(wep, event) end
att.Hook_PostPlayEvent = function(wep, event) end
-- return to set mag capacity
att.Hook_GetCapacity = function(wep, cap) end
-- return false to suppress shoot sound
-- string sound = default sound
att.Hook_GetShootSound = function(wep, sound) end
att.Hook_GetShootDrySound = function(wep, sound) end
att.Hook_GetDistantShootSound = function(wep, sound) end
-- return a string to change the default attachment name and icon for that slot
-- int slot = slot of attachment to name/set icon
att.Hook_GetDefaultAttName = function(wep, slot) end
att.Hook_GetDefaultAttIcon = function(wep, slot) end
-- or just add more!
-- data has entries:
-- string sound
-- number volume
-- number pitch
att.Hook_AddShootSound = function(wep, data) end
-- att.Hook_AddShootSound = function(wep, data)
-- wep:MyEmitSound("weapons/pistol/pistol_fire2.wav", data.volume, data.pitch, 1, CHAN_WEAPON - 1)
-- end
-- allows you to modify the weapon's rate of fire
att.Hook_ModifyRPM = function(wep, delay) end
-- return a table containing Recoil, RecoilSide, VisualRecoilMult to multiply them
-- Alternatively, edit the values in rec without returning, which supports multiple hooks changing the value
att.Hook_ModifyRecoil = function(wep, rec) end
-- run in Think()
att.Hook_Think = function(wep) end
-- thinking hook for att
att.DrawFunc = function(wep, element, wm) end
-- after ADS starts or ends
att.Hook_SightToggle = function(wep, enter) end
att.Override_Trivia_Class = nil -- "Submachine Gun"
att.Override_Trivia_Desc = nil -- "Ubiquitous 9mm SMG. Created as a response to the need for a faster-firing and more reliable submachine gun than existing options at the time."
att.Override_Trivia_Manufacturer = nil -- "Auschen Waffenfabrik"
att.Override_Trivia_Calibre = nil -- "9x21mm Jager"
att.Override_Trivia_Mechanism = nil -- "Roller-Delayed Blowback"
att.Override_Trivia_Country = nil -- "Austria"
att.Override_Trivia_Year = nil -- 1968
att.Mult_Damage = 1
att.Mult_DamageMin = 1
att.Mult_DamageRand = 1
att.Mult_DamageNPC = 1 -- damage WHEN USED BY NPCS not when used against them
att.Mult_Range = 1
att.Mult_Penetration = 1
att.Override_DamageType = nil
att.Override_DamageTypeHandled = nil
att.Override_ShootEntity = nil
att.Mult_MuzzleVelocity = 1
att.Override_BodyDamageMults = nil
att.Override_ShotgunSpreadPattern = {}
att.Override_ShotgunSpreadPatternOverrun = {}
att.Override_NoRandSpread = false -- disable (random) spread modification after bullet table override
att.Mult_MeleeTime = 1
att.Mult_MeleeDamage = 1
att.Add_MeleeRange = 0
att.Mult_MeleeAttackTime = 1
att.Override_MeleeDamageType = nil
att.Override_Lunge = nil
att.Add_LungeLength = 0
att.Mult_LungeLength = 1
-- jam/heat related buffs
att.Override_Jamming = nil
att.Mult_HeatCapacity = 1
att.Mult_FixTime = 1
att.Mult_HeatDissipation = 1
att.Mult_HeatDelayTime = 1
att.Override_HeatFix = nil
att.Override_HeatLockout = nil
att.Hook_Overheat = function(wep, heat) end
att.Hook_PostOverheat = function(wep) end
-- Return true to not do animation/heat locking
att.Hook_OnOverheat = function(wep) end
att.HeatOverflow = nil
-- malfunction related buffs
att.Override_Malfunction = nil
att.Override_MalfunctionTakeRound = nil
att.Override_MalfunctionJam = nil
att.Mult_MalfunctionMean = 1
att.Mult_MalfunctionVariance = 1
att.Mult_MalfunctionFixTime = 1
-- Called every time malfunction is checked. return true to cause malfunction
att.Hook_Malfunction = function(wep, count) end
-- Called when a malfunction is about to happen. return true to stop malfunction
att.Hook_OnMalfunction = function(wep, count) end
-- Called after a malfunction has occurred.
att.Hook_PostMalfunction = function(wep) end
att.Override_Tracer = nil -- tracer effect name
att.Override_TracerNum = nil
-- att.Override_TracerCol = nil
-- att.Mult_TracerWidth = 1
att.TracerFinalMag = nil
att.Override_PhysTracerProfile = nil -- color for phys tracer.
-- there are 8 options:
-- 0 = normal
-- 1 = red
-- 2 = green
-- 3 = blue
-- 4 = yellow
-- 5 = violet
-- 6 = cyan
-- 7 = black/invisible
att.Override_CanBash = nil
att.Override_ShotgunReload = nil
att.Override_HybridReload = nil
att.Override_AutoReload = nil
att.Override_ManualAction = nil
att.Override_CanFireUnderwater = nil
att.Override_ChamberSize = nil
att.Add_ChamberSize = nil
att.Mult_Recoil = 1
att.Mult_RecoilSide = 1
att.Mult_VisualRecoilMult = 1
att.Mult_Sway = 1
att.Override_ShootWhileSprint = nil
att.Mult_RPM = 1
att.Add_Num = nil
att.Mult_Num = nil
att.Override_Num = nil
att.Mult_AccuracyMOA = 1
att.Mult_HipDispersion = 1
att.Mult_SightsDispersion = 1
att.Mult_ShootVol = 1
att.Mult_ShootPitch = 1
att.Mult_GlintMagnitude = 1
att.Override_MuzzleEffect = nil
att.Override_FastMuzzleEffect = nil
att.Override_GMMuzzleEffect = nil
att.Override_ShellEffect = nil
att.Override_ShellMaterial = nil
att.Override_MuzzleEffectAttachment = nil
att.Override_CaseEffectAttachment = nil
att.Mult_SpeedMult = 1
att.Mult_SightedSpeedMult = 1
att.Mult_ShootSpeedMult = 1
att.Override_HoldtypeHolstered = nil
att.Override_HoldtypeActive = nil
att.Override_HoldtypeSights = nil
att.Override_AnimShoot = nil
att.Override_HolsterPos = nil
att.Override_HolsterAng = nil
att.Add_BarrelLength = 0
att.Override_BarrelOffsetSighted = nil
att.Override_BarrelOffsetHip = nil
att.Mult_ReloadTime = 1
att.Mult_DrawTime = 1
att.Mult_SightTime = 1
att.Mult_CycleTime = 1
att.AttachSound = nil
att.DetachSound = nil
att.ToggleSound = nil
-- free aim related buffs
att.Override_FreeAimAngle = nil
att.Mult_FreeAimAngle = nil
att.Add_FreeAimAngle = nil
att.Override_NeverFreeAim = nil
att.Override_AlwaysFreeAim = nil
att.Hook_OnDeploy = function(wep) end
att.Hook_OnHolster = function(wep) end
att.Hook_OnHolsterEnd = function(wep) end
-- bool dodefault - set false to not do default throwing behavior
-- vector force
-- string shootentity
-- number/nil fusetime
att.Hook_Throw = function(wep, data) end