Benny/gamemodes/benny/gamemode/items.lua

1185 lines
28 KiB
Lua
Raw Permalink Normal View History

2024-03-06 17:47:44 -05:00
2024-03-07 20:34:16 -05:00
---------------------
-- Your Name is Benny
---------------------
2024-03-06 17:47:44 -05:00
ITEMS = {}
local itemmeta = {}
function itemmeta:__tostring()
return "ItemDef [" .. self.ClassName .. "]"
end
local ITEMHELPER = {
Get = function( self, key )
return self.key
end,
GetRaw = function( self, key )
return rawget( self, key )
end,
}
function itemmeta.__index( self, key )
if ITEMHELPER[key] then return ITEMHELPER[key] end
if rawget(self, "BaseClass") then
return rawget(self, "BaseClass")[key]
end
end
function AddItem( itemname, item )
if item then
ITEMS[itemname] = item
item.ClassName = itemname
item.BaseClass = ITEMS[item.Base]
setmetatable( item, itemmeta )
else
return ITEMS[itemname]
end
end
2024-09-21 14:08:48 -04:00
function BaseClassGet( item )
-- TODO
end
2024-03-06 17:47:44 -05:00
AddItem( "base", {
PrintName = "Base Item",
2024-03-07 20:27:18 -05:00
Description = "Beginning item base.",
Category = "base",
2024-03-06 17:47:44 -05:00
Model = "models/benny/weapons/test_m16a2.mdl",
DefaultBodygroups = {},
2024-03-06 17:47:44 -05:00
Vars = {
["Float"] = {
"Acquisition",
2024-04-06 09:30:09 -04:00
"HolsterIn",
2024-03-06 17:47:44 -05:00
},
},
["Initialize"] = function( class, ent, handler )
print( class, "Initialized base initialization" )
for k, v in ipairs(class.DefaultBodygroups) do
if v then
ent:SetBodygroup( k-1, v )
end
end
2024-03-06 17:47:44 -05:00
end,
["Deploy"] = function( class, ent, handler )
2024-09-21 14:08:48 -04:00
ent:SetNoDraw( false )
end,
["Drop"] = function( class, ent, handler )
2024-03-06 17:47:44 -05:00
end,
["Holster"] = function( class, ent, handler )
2024-09-21 14:08:48 -04:00
ent:SetHolsterIn( CurTime() + 0.5 )
end,
["FinishHolster"] = function( class, ent, handler )
handler:SetActiveR( NULL )
ent:SetNoDraw( true )
end,
["UndoHolster"] = function( class, ent, handler )
ent:SetHolsterIn( 0 )
2024-03-06 17:47:44 -05:00
end,
["Attack"] = function( class, ent, handler )
end,
2024-04-07 19:04:18 -04:00
["AttackAlt"] = function( class, ent, handler )
end,
2024-09-21 14:08:48 -04:00
["Alt"] = function( class, ent, handler )
end,
2024-03-06 17:47:44 -05:00
["Think"] = function( class, ent, handler )
2024-09-21 14:08:48 -04:00
if ent:GetHolsterIn() != 0 and ent:GetHolsterIn() <= CurTime() then
class:FinishHolster( ent, handler )
ent:SetHolsterIn( 0 )
end
2024-03-06 17:47:44 -05:00
end,
["EntThink"] = function( class, ent, handler )
end,
["EntPhysicsCollide"] = function( class, ent, data, collider )
end,
2024-03-06 17:47:44 -05:00
["Reload"] = function( class, ent, handler )
end,
})
2024-04-06 09:30:09 -04:00
local AnimationLookup = {
["fire"] = {
2024-08-30 18:30:03 -04:00
["handgun"] = "handgun_fire",
2024-04-07 19:04:18 -04:00
["rifle"] = "rifle_fire",
2024-04-06 09:30:09 -04:00
},
["reload"] = {
2024-08-30 18:30:03 -04:00
["handgun"] = "handgun_reload",
2024-04-07 19:04:18 -04:00
["rifle"] = "rifle_reload",
2024-04-06 09:30:09 -04:00
},
["reload_rack"] = {
2024-08-30 18:30:03 -04:00
["handgun"] = "handgun_reload_rack",
2024-04-07 19:04:18 -04:00
["rifle"] = "rifle_reload_rack",
2024-04-06 09:30:09 -04:00
},
["reload_insert"] = {
2024-08-30 18:30:03 -04:00
["handgun"] = "handgun_reload_insert",
2024-04-07 19:04:18 -04:00
["rifle"] = "rifle_reload_insert",
2024-04-06 09:30:09 -04:00
},
["deploy"] = {
2024-08-30 18:30:03 -04:00
["handgun"] = "handgun_deploy",
2024-04-07 19:04:18 -04:00
["rifle"] = "rifle_deploy",
2024-04-06 09:30:09 -04:00
},
["holster"] = {
2024-08-30 18:30:03 -04:00
["handgun"] = "handgun_holster",
["rifle"] = "handgun_holster",
2024-04-06 09:30:09 -04:00
},
}
2024-09-21 14:08:48 -04:00
local BaseClass = ITEMS.base
2024-03-06 17:47:44 -05:00
AddItem( "base_firearm", {
PrintName = "Base Firearm",
2024-03-07 20:27:18 -05:00
Description = "Item base for firearms.",
Category = "base",
2024-03-06 17:47:44 -05:00
Base = "base",
2024-04-06 09:30:09 -04:00
FirearmHelper = true,
2024-03-06 17:47:44 -05:00
Vars = {
2024-04-06 09:30:09 -04:00
["Bool"] = {
"Loaded",
},
2024-03-06 17:47:44 -05:00
["Int"] = {
"Clip",
"BurstCount",
2024-04-06 09:30:09 -04:00
"Firemode",
2024-03-06 17:47:44 -05:00
},
["Float"] = {
"Delay",
"DelayBurst",
"RefillTime",
"Accuracy_Reset",
"Accuracy_Amount",
"DelayReload",
},
},
2024-03-12 18:43:31 -04:00
HoldType = "rpg",
2024-03-06 17:47:44 -05:00
Delay = 0.1,
Pellets = 1,
2024-03-25 00:48:36 -04:00
Accuracy = 1,
2024-03-06 17:47:44 -05:00
ClipSize = 15,
BurstCount = math.huge,
BurstRunaway = false,
BurstAuto = false,
BurstDelay = 0,
2024-04-07 19:04:18 -04:00
FireSound = "benny/weapons/m16a2/01.ogg",
MagOutSound = "benny/weapons/m16a2/magout.ogg",
MagInSound = "benny/weapons/m16a2/magin.ogg",
BoltDropSound = "benny/weapons/m16a2/cock.ogg",
BoltPullSound = "benny/weapons/fnc/cock.ogg",
2024-03-06 17:47:44 -05:00
["Initialize"] = function( class, ent, handler )
2024-09-21 14:08:48 -04:00
BaseClass.Initialize( class, ent, handler )
2024-03-06 17:47:44 -05:00
ent:SetClip( class.ClipSize )
2024-04-06 09:30:09 -04:00
ent:SetLoaded(true)
2024-03-06 17:47:44 -05:00
print( class, "Initialized a firearm" )
end,
2024-03-08 20:10:47 -05:00
2024-03-12 18:43:31 -04:00
["Think"] = function( class, ent, handler )
local InProcess = ent:GetBurstCount() > 0
local Topped = ent:GetBurstCount() == class.BurstCount
local Runaway = class.BurstRunaway
local BAuto = class.BurstAuto
local Firedown = false
if IsValid(handler) then
Firedown = handler:GetOwner():KeyDown( IN_ATTACK )
end
2024-03-12 18:43:31 -04:00
if Runaway and InProcess and !Topped then
2024-09-21 14:08:48 -04:00
class:Attack( ent, handler )
2024-03-12 18:43:31 -04:00
else
if !Firedown then
if !Topped and InProcess then
ent:SetDelayBurst( CurTime() + class.BurstDelay )
end
ent:SetBurstCount( 0 )
end
if Topped and BAuto then
ent:SetBurstCount( 0 )
ent:SetDelayBurst( CurTime() + class.BurstDelay )
end
end
2024-04-06 09:30:09 -04:00
if ent:GetRefillTime() != 0 and ent:GetRefillTime() <= CurTime() then
ent:SetClip( class.ClipSize )
ent:SetRefillTime( 0 )
end
2024-09-21 14:08:48 -04:00
BaseClass.Think( class, ent, handler )
2024-03-12 18:43:31 -04:00
end,
["EntThink"] = function( class, ent, handler )
if IsValid(handler) then return end
local InProcess = ent:GetBurstCount() > 0
local Topped = ent:GetBurstCount() == class.BurstCount
local Runaway = class.BurstRunaway
local BAuto = class.BurstAuto
local Firedown = false
if Runaway and InProcess and !Topped then
class:Attack( ent, handler )
else
if !Firedown then
if !Topped and InProcess then
ent:SetDelayBurst( CurTime() + class.BurstDelay )
end
ent:SetBurstCount( 0 )
end
if Topped and BAuto then
ent:SetBurstCount( 0 )
ent:SetDelayBurst( CurTime() + class.BurstDelay )
end
end
if ent:GetRefillTime() != 0 and ent:GetRefillTime() <= CurTime() then
ent:SetClip( class.ClipSize )
ent:SetRefillTime( 0 )
end
end,
2024-03-08 20:10:47 -05:00
["Attack"] = function( class, ent, handler )
if ent:GetClip() <= 0 then return end
2024-03-08 20:10:47 -05:00
if ent:GetDelay() > CurTime() then return end
2024-03-25 00:48:36 -04:00
if ent:GetDelayBurst() > CurTime() then return end
2024-03-12 18:43:31 -04:00
if ent:GetBurstCount() >= class.BurstCount then return end
2024-09-21 14:08:48 -04:00
if ent:GetHolsterIn() != 0 then return end
2024-03-08 20:10:47 -05:00
local HandlerValid = IsValid(handler)
local handlerorself = HandlerValid and handler or ent
2024-03-25 00:48:36 -04:00
local Runaway = class.BurstRunaway
local BAuto = class.BurstAuto
2024-03-12 18:43:31 -04:00
ent:SetBurstCount( ent:GetBurstCount() + 1 )
2024-03-25 00:48:36 -04:00
if ent:GetBurstCount() >= class.BurstCount then
ent:SetDelayBurst( CurTime() + class.BurstDelay )
if BAuto then
ent:SetBurstCount( 0 )
end
end
2024-04-06 09:30:09 -04:00
ent:SetClip( ent:GetClip() - 1 )
if ent:GetClip() == 0 then
handlerorself:EmitSound( "benny/weapons/1911/slidedrop.ogg", 70, 100, 0.4, CHAN_STATIC )
2024-04-06 09:30:09 -04:00
end
2024-03-08 20:10:47 -05:00
ent:SetDelay( CurTime() + class.Delay )
handlerorself:EmitSound( istable(class.FireSound) and TSelShared(class.FireSound, "FireSound") or class.FireSound, 100, 100, 0.5, CHAN_STATIC )
2024-03-12 18:43:31 -04:00
2024-03-25 00:48:36 -04:00
local acc = math.rad( class.Accuracy or 0 )
if HandlerValid then
local p = handler:GetOwner()
p:LagCompensation(true)
handler:FireBullets( {
Attacker = p,
Damage = 1,
Force = 5,
Tracer = 0,
Num = class.Pellets,
Dir = p:GetAimVector(),
Src = p:GetShootPos(),
Spread = Vector( acc, acc, 0 ),
} )
p:LagCompensation(false)
else
ent:FireBullets( {
Attacker = ent,
Damage = 1,
Force = 1,
Tracer = 0,
Num = class.Pellets,
Dir = ent:GetForward(),
Src = ent:GetPos(),
Spread = Vector( acc, acc, 0 ),
} )
local physobj = ent:GetPhysicsObject()
if physobj:IsValid() then
physobj:AddVelocity( ent:GetForward() * -300 )
physobj:AddAngleVelocity( VectorRand( -360*20, 360*20 ) )
end
end
2024-04-06 09:30:09 -04:00
local ply = handlerorself:GetOwner()
if HandlerValid and (SERVER or CLIENT and IsFirstTimePredicted()) then
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["fire"][class.HoldType] ), 0, true )
end
ent:PlayAnimation( ent:LookupSequence("fire") )
2024-03-08 20:10:47 -05:00
end,
["Reload"] = function( class, ent, handler )
2024-03-12 18:43:31 -04:00
if ent:GetDelay() > CurTime() then return end
2024-09-21 14:08:48 -04:00
if ent:GetHolsterIn() != 0 then return end
2024-04-06 09:30:09 -04:00
local ply = handler:GetOwner()
2024-08-30 18:30:03 -04:00
local time = 0.6
2024-04-06 09:30:09 -04:00
if ent:GetLoaded() then
2024-04-07 19:04:18 -04:00
handler:EmitSound( class.MagOutSound, 70, 100, 0.4, CHAN_STATIC )
2024-04-06 09:30:09 -04:00
ent:SetLoaded( false )
ent:SetClip( 0 )
if SERVER or CLIENT and IsFirstTimePredicted() then
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["reload"][class.HoldType] ), 0, true )
end
2024-08-30 18:30:03 -04:00
time = 0.4
ent:PlayAnimation( ent:LookupSequence("magout") )
2024-04-06 09:30:09 -04:00
else
2024-04-07 19:04:18 -04:00
handler:EmitSound( class.MagInSound, 70, 100, 0.4, CHAN_STATIC )
2024-04-06 09:30:09 -04:00
ent:SetLoaded( true )
2024-04-07 19:04:18 -04:00
ent:SetRefillTime( CurTime() + 0.5 )
if SERVER or CLIENT and IsFirstTimePredicted() then
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["reload_insert"][class.HoldType] ), 0, true )
end
time = 0.8
ent:PlayAnimation( ent:LookupSequence("magin") )
2024-04-06 09:30:09 -04:00
end
2024-08-30 18:30:03 -04:00
ent:SetDelay( CurTime() + time )
2024-03-08 20:10:47 -05:00
end,
2024-03-12 18:43:31 -04:00
["Deploy"] = function( class, ent, handler )
handler:EmitSound( "weapons/usp/usp_slideback.wav", 70, 125, 0.4, CHAN_STATIC )
2024-08-30 18:30:03 -04:00
ent:SetDelay( CurTime() + 0.5 )
2024-04-06 09:30:09 -04:00
local ply = handler:GetOwner()
if SERVER or CLIENT and IsFirstTimePredicted() then
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["deploy"][class.HoldType] ), 0, true )
end
2024-03-12 18:43:31 -04:00
end,
2024-09-21 14:08:48 -04:00
["Drop"] = function( class, ent, handler )
ent:SetRefillTime( 0 )
BaseClass.Drop( class, ent, handler )
end,
2024-03-12 18:43:31 -04:00
["Holster"] = function( class, ent, handler )
2024-04-07 19:04:18 -04:00
ent:SetRefillTime( 0 )
2024-09-21 14:08:48 -04:00
handler:EmitSound( "weapons/elite/elite_deploy.wav", 70, 125, 0.4, CHAN_STATIC )
2024-03-25 00:48:36 -04:00
ent:SetDelay( CurTime() + 0.25 )
2024-09-21 14:08:48 -04:00
ent:SetHolsterIn( CurTime() + 0.25 )
2024-04-06 09:30:09 -04:00
local ply = handler:GetOwner()
if SERVER or CLIENT and IsFirstTimePredicted() then
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["holster"][class.HoldType] ), 0, true )
end
2024-04-06 09:30:09 -04:00
end,
["EntPhysicsCollide"] = function( class, ent, data, collider )
if ( data.DeltaTime > 0.1 and data.Speed > 200 ) then
class:Attack( ent )
end
end,
2024-09-21 14:08:48 -04:00
["FinishHolster"] = function( class, ent, handler )
handler:EmitSound( "weapons/m4a1/m4a1_deploy.wav", 70, 125, 0.4, CHAN_STATIC )
BaseClass.FinishHolster( class, ent, handler )
end,
["UndoHolster"] = function( class, ent, handler )
BaseClass.UndoHolster( class, ent, handler )
handler:EmitSound( "weapons/elite/elite_deploy.wav", 70, 125, 0.4, CHAN_STATIC )
local ply = handler:GetOwner()
if SERVER or CLIENT and IsFirstTimePredicted() then
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["deploy"][class.HoldType] ), 0.25, true )
2024-09-21 14:08:48 -04:00
end
end,
2024-04-06 09:30:09 -04:00
})
2024-09-21 14:08:48 -04:00
local BaseClass = ITEMS.base_firearm
2024-04-06 09:30:09 -04:00
AddItem( "base_firearm_ubgl", {
PrintName = "Base Firearm w/ UBGL",
Description = "Item base for firearms that include grenade launchers.",
Category = "base",
Base = "base_firearm",
Vars = {
["Int"] = {
"Clip2",
},
["Float"] = {
"Delay2",
"DelayBurst2",
"RefillTime2",
"Accuracy_Reset2",
"Accuracy_Amount2",
},
},
Delay2 = 0.25,
ClipSize2 = 4,
["Initialize"] = function( class, ent, handler )
2024-09-21 14:08:48 -04:00
BaseClass.Initialize( class, ent, handler )
2024-04-06 09:30:09 -04:00
ent:SetClip2( class.ClipSize2 )
end,
["Attack"] = function( class, ent, handler )
if ent:GetFiremode() == 1 then
class:Attack2( ent, handler )
else
2024-09-21 14:08:48 -04:00
BaseClass.Attack( class, ent, handler )
2024-04-06 09:30:09 -04:00
end
end,
["Reload"] = function( class, ent, handler )
if ent:GetFiremode() == 1 then
class:Reload2( ent, handler )
else
2024-09-21 14:08:48 -04:00
BaseClass.Reload( class, ent, handler )
2024-04-06 09:30:09 -04:00
end
end,
["Alt"] = function( class, ent, handler )
ent:SetFiremode( ent:GetFiremode() == 1 and 0 or 1 )
end,
["Think"] = function( class, ent, handler )
2024-09-21 14:08:48 -04:00
BaseClass.Think( class, ent, handler )
2024-04-06 09:30:09 -04:00
if ent:GetRefillTime2() != 0 and ent:GetRefillTime2() <= CurTime() then
ent:SetClip2( class.ClipSize2 )
ent:SetRefillTime2( 0 )
end
end,
["Reload2"] = function( class, ent, handler )
if ent:GetClip2() >= class.ClipSize2 then return end
if ent:GetDelay2() > CurTime() then return end
handler:EmitSound( "weapons/m4a1/m4a1_boltpull.wav", 70, 125, 0.4, CHAN_STATIC )
ent:SetDelay2( CurTime() + 0.25 )
ent:SetRefillTime2( CurTime() + 0.1 )
end,
["Attack2"] = function( class, ent, handler )
if ent:GetClip2() <= 0 then return end
if ent:GetDelay2() > CurTime() then return end
if ent:GetDelayBurst2() > CurTime() then return end
if ent:GetBurstCount() >= class.BurstCount then return end
ent:SetClip2( ent:GetClip2() - 1 )
ent:SetDelay2( CurTime() + class.Delay2 )
handler:EmitSound( "weapons/ar2/ar2_altfire.wav", 140, 100, 0.4, CHAN_STATIC )
2024-03-12 18:43:31 -04:00
end,
2024-03-06 17:47:44 -05:00
})
2024-09-21 14:08:48 -04:00
local BaseClass = ITEMS.base
2024-04-07 19:04:18 -04:00
AddItem( "satchels", {
PrintName = "#Item.satchels.Name",
Description = "#Item.satchels.Description",
Category = "utility",
Base = "base",
Model = "models/benny/weapons/testgun.mdl",
HoldType = "handgun",
Vars = {
["Float"] = {
"Delay",
},
},
["Attack"] = function( class, ent, handler )
if ent:GetDelay() > CurTime() then return end
ent:SetDelay( CurTime() + 0.5 )
if SERVER then
for k, v in ipairs( ents.FindByClass( "b-satchel" ) ) do
if v:GetOwner() == ent:GetOwner() then
v:Detonate()
end
end
end
end,
["AttackAlt"] = function( class, ent, handler )
if ent:GetDelay() > CurTime() then return end
ent:SetDelay( CurTime() + 0.5 )
local ply = ent:GetOwner()
if SERVER then
local bomb = ents.Create("b-satchel")
bomb:SetPos( ply:EyePos() + (ply:GetAimVector() * 32) )
bomb:SetAngles( ply:EyeAngles() )
bomb:SetOwner( ply )
bomb:Spawn()
local phy = bomb:GetPhysicsObject()
phy:SetVelocity( ply:GetAimVector() * 400 )
phy:SetAngleVelocity( Vector( 0, 360, 0 ) )
end
end,
})
2024-09-21 14:08:48 -04:00
local BaseClass = ITEMS.base
2024-08-30 18:30:03 -04:00
AddItem( "toolgun", {
PrintName = "#Item.toolgun.Name",
Description = "#Item.toolgun.Description",
Category = "dev",
Base = "base",
2024-03-06 17:47:44 -05:00
2024-04-06 09:30:09 -04:00
Model = "models/benny/weapons/testgun.mdl",
HoldType = "handgun",
2024-08-30 18:30:03 -04:00
Vars = {
["Float"] = {
"Delay",
},
["Int"] = {
"BurstCount",
},
2024-03-25 00:48:36 -04:00
},
2024-03-07 22:34:29 -05:00
2024-08-30 18:30:03 -04:00
["Attack"] = function( class, ent, handler )
if ent:GetBurstCount() >= 1 then return end
if ent:GetDelay() > CurTime() then return end
ent:SetDelay( CurTime() + 0.1 )
ent:SetBurstCount( ent:GetBurstCount() + 1 )
2024-03-12 18:43:31 -04:00
2024-08-30 18:30:03 -04:00
handler:EmitSound("weapons/airboat/airboat_gun_lastshot1.wav", 100, 100, 1, CHAN_STATIC)
2024-03-12 18:43:31 -04:00
2024-08-30 18:30:03 -04:00
if SERVER then
local p = handler:GetOwner()
local tr = p:GetEyeTrace()
if lol then
local summon = ents.Create( "b-npc_human" )
summon:SetPos( tr.HitPos + tr.HitNormal )
local ang = Angle( 0, p:EyeAngles().y+0, 0 )
summon:SetAngles( ang )
summon:Spawn()
else
local summon = ents.Create( "benny_domflag" )
summon:SetPos( tr.HitPos )
local ang = Angle( 0, 0, 0 )
summon:SetAngles( ang )
summon:Spawn()
end
2024-08-30 18:30:03 -04:00
end
end,
2024-03-25 00:48:36 -04:00
2024-08-30 18:30:03 -04:00
["AttackAlt"] = function( class, ent, handler )
if ent:GetDelay() > CurTime() then return end
ent:SetDelay( CurTime() + 0.5 )
end,
2024-03-25 00:48:36 -04:00
2024-08-30 18:30:03 -04:00
["Reload"] = function( class, ent, handler )
end,
2024-03-25 00:48:36 -04:00
2024-08-30 18:30:03 -04:00
["Think"] = function( class, ent, handler )
if ent:GetBurstCount() > 0 and !handler:GetOwner():KeyDown( IN_ATTACK ) then
ent:SetBurstCount( 0 )
end
end,
2024-03-12 18:43:31 -04:00
2024-08-30 18:30:03 -04:00
["Deploy"] = function( class, ent, handler )
ent:SetDelay( CurTime() + 0.5 )
2024-03-12 18:43:31 -04:00
2024-08-30 18:30:03 -04:00
local ply = handler:GetOwner()
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["deploy"][class.HoldType] ), 0, true )
end,
2024-03-25 00:48:36 -04:00
2024-08-30 18:30:03 -04:00
["Holster"] = function( class, ent, handler )
ent:SetDelay( CurTime() + 0.25 )
local ply = handler:GetOwner()
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["holster"][class.HoldType] ), 0, true )
end,
2024-03-25 00:48:36 -04:00
})
2024-09-21 14:08:48 -04:00
local BaseClass = ITEMS.base_firearm
2024-08-30 18:30:03 -04:00
do -- Handguns
AddItem( "mk23", {
PrintName = "#Item.mk23.Name",
Description = "#Item.mk23.Description",
Category = "pistol",
Base = "base_firearm",
Model = "models/benny/weapons/test_mk23.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "handgun",
DefaultBodygroups = { false, false, 1 },
2024-08-30 18:30:03 -04:00
ClipSize = 12,
Delay = (60/320),
2024-08-30 18:30:03 -04:00
FireSound = {
"benny/weapons/usp/sup_01.ogg",
"benny/weapons/usp/sup_02.ogg",
"benny/weapons/usp/sup_03.ogg",
2024-08-30 18:30:03 -04:00
},
MagOutSound = "benny/weapons/usp/magout.ogg",
MagInSound = "benny/weapons/usp/magin.ogg",
BoltDropSound = "benny/weapons/usp/slidedrop.ogg",
2024-08-30 18:30:03 -04:00
BoltPullSound = "benny/weapons/glock/cock.ogg",
Accuracy = 5/60,
BurstCount = 1,
Accuracy_Add = 0.5,
Accuracy_Reset = 0.4,
Accuracy_Decay = 5,
})
AddItem( "cz75", {
PrintName = "CZ-75",
Description = "9mm handgun",
2024-09-06 22:53:01 -04:00
Category = "pistol",
Base = "base_firearm",
Model = "models/benny/weapons/test_cz75.mdl",
2024-09-06 22:53:01 -04:00
HoldType = "handgun",
ClipSize = 17,
Delay = (60/480),
FireSound = {
"benny/weapons/m92/01.ogg",
"benny/weapons/m92/02.ogg",
"benny/weapons/m92/03.ogg",
},
MagOutSound = "benny/weapons/m92/magout.ogg",
MagInSound = "benny/weapons/m92/magin.ogg",
BoltDropSound = "benny/weapons/m92/slidedrop.ogg",
BoltPullSound = "benny/weapons/glock/cock.ogg",
Accuracy = 5/60,
BurstCount = 1,
Accuracy_Add = 0.5,
Accuracy_Reset = 0.4,
Accuracy_Decay = 5,
})
AddItem( "g18", {
PrintName = "G18",
Description = "automatic 9mm handgun",
Category = "pistol",
Base = "base_firearm",
Model = "models/benny/weapons/test_g18.mdl",
HoldType = "handgun",
ClipSize = 33,
Delay = (60/1000),
2024-09-06 22:53:01 -04:00
FireSound = {
"benny/weapons/glock/01.ogg",
"benny/weapons/glock/02.ogg",
"benny/weapons/glock/03.ogg",
},
MagOutSound = "benny/weapons/glock/magout.ogg",
MagInSound = "benny/weapons/glock/magin.ogg",
BoltDropSound = "benny/weapons/glock/cock.ogg",
2024-09-06 22:53:01 -04:00
BoltPullSound = "benny/weapons/glock/cock.ogg",
Accuracy = 5/60,
--BurstCount = 1,
2024-09-06 22:53:01 -04:00
Accuracy_Add = 0.5,
Accuracy_Reset = 0.4,
Accuracy_Decay = 5,
})
2024-08-30 18:30:03 -04:00
end
do -- Rifles
AddItem( "fnc", {
PrintName = "#Item.fnc.Name",
Description = "#Item.fnc.Description",
Category = "assaultrifle",
Base = "base_firearm",
2024-08-30 18:30:03 -04:00
Model = "models/benny/weapons/test_fnc.mdl",--"models/weapons/w_rif_ar556.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "rifle",
ClipSize = 30,
Delay = (60/800),
2024-08-30 18:30:03 -04:00
FireSound = {
"benny/weapons/m16a2/01.ogg",
"benny/weapons/m16a2/02.ogg",
"benny/weapons/m16a2/03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "oicw", {
PrintName = "#Item.oicw.Name",
Description = "#Item.oicw.Description",
Category = "assaultrifle",
Base = "base_firearm_ubgl",
Model = "models/benny/weapons/test_oicw.mdl",
HoldType = "rifle",
ClipSize = 30,
Delay = (60/800),
FireSound = {
"benny/weapons/stoner63/01.ogg",
"benny/weapons/stoner63/02.ogg",
"benny/weapons/stoner63/03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
2024-08-30 18:30:03 -04:00
AddItem( "qbz", {
PrintName = "#Item.qbz.Name",
Description = "#Item.qbz.Description",
Category = "assaultrifle",
Base = "base_firearm",
Model = "models/benny/weapons/test_qbz.mdl",--"models/weapons/w_rif_ar556.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "rifle",
ClipSize = 30,
Delay = (60/750),
FireSound = {
"benny/weapons/stoner63/01.ogg",
"benny/weapons/stoner63/02.ogg",
"benny/weapons/stoner63/03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "m16a2", {
PrintName = "#Item.m16a2.Name",
Description = "#Item.m16a2.Description",
Category = "assaultrifle",
Base = "base_firearm",
Model = "models/benny/weapons/test_m16a2.mdl",--"models/weapons/w_rif_m16a2.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "rifle",
ClipSize = 30,
Delay = (60/1050),
2024-08-30 18:30:03 -04:00
BurstCount = 3,
BurstRunaway = true,
BurstAuto = true,
BurstDelay = 0.2,
FireSound = {
"benny/weapons/m16a2/01.ogg",
"benny/weapons/m16a2/02.ogg",
"benny/weapons/m16a2/03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
end
do -- MGs
AddItem( "qbb", {
PrintName = "#Item.qbb.Name",
Description = "#Item.qbb.Description",
Category = "machinegun",
Base = "base_firearm",
Model = "models/benny/weapons/test_qbb.mdl",
HoldType = "rifle",
ClipSize = 75,
Delay = (60/750),
FireSound = {
"benny/weapons/stoner63/01.ogg",
"benny/weapons/stoner63/02.ogg",
"benny/weapons/stoner63/03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "stoner", {
PrintName = "#Item.stoner.Name",
Description = "#Item.stoner.Description",
Category = "machinegun",
Base = "base_firearm",
Model = "models/benny/weapons/test_stoner.mdl",
HoldType = "rifle",
ClipSize = 100,
Delay = (60/880),
FireSound = {
"benny/weapons/stoner63/01.ogg",
"benny/weapons/stoner63/02.ogg",
"benny/weapons/stoner63/03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "hk21", {
PrintName = "#Item.hk21.Name",
Description = "#Item.hk21.Description",
Category = "machinegun",
Base = "base_firearm",
Model = "models/benny/weapons/test_hk21.mdl",
HoldType = "rifle",
ClipSize = 70,
Delay = (60/640),
FireSound = {
"benny/weapons/hk21/39_01.ogg",
"benny/weapons/hk21/39_02.ogg",
"benny/weapons/hk21/39_03.ogg",
},
Accuracy = 1,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
end
2024-08-30 18:30:03 -04:00
do -- SMGs
AddItem( "tmp", {
PrintName = "#Item.tmp.Name",
Description = "#Item.tmp.Description",
Category = "smg",
Base = "base_firearm",
Model = "models/benny/weapons/test_tmp.mdl",--"models/weapons/w_rif_ar556.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "handgun",
ClipSize = 25,
2024-08-30 18:30:03 -04:00
Delay = (60/850),
FireSound = {
"benny/weapons/tmp/01.ogg",
"benny/weapons/tmp/02.ogg",
"benny/weapons/tmp/03.ogg",
},
})
AddItem( "mp7", {
PrintName = "#Item.mp7.Name",
Description = "#Item.mp7.Description",
Category = "smg",
Base = "base_firearm",
Model = "models/benny/weapons/test_mp7.mdl",--"models/weapons/w_rif_ar556.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "handgun",
ClipSize = 20,
Delay = (60/950),
FireSound = {
"benny/weapons/mp7/01.ogg",
"benny/weapons/mp7/02.ogg",
"benny/weapons/mp7/03.ogg",
},
})
AddItem( "mp5k", {
PrintName = "#Item.mp5k.Name",
Description = "#Item.mp5k.Description",
Category = "smg",
Base = "base_firearm",
Model = "models/benny/weapons/test_mp5k.mdl",--"models/weapons/w_rif_ar556.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "handgun",
ClipSize = 30,
2024-08-30 18:30:03 -04:00
Delay = (60/750),
FireSound = {
"benny/weapons/mp5k/01.ogg",
"benny/weapons/mp5k/02.ogg",
"benny/weapons/mp5k/03.ogg",
},
})
AddItem( "mac11", {
PrintName = "#Item.mac11.Name",
Description = "#Item.mac11.Description",
Category = "smg",
Base = "base_firearm",
Model = "models/benny/weapons/test_mac10.mdl",--"models/weapons/w_rif_ar556.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "handgun",
2024-09-06 22:53:01 -04:00
ClipSize = 20,
2024-08-30 18:30:03 -04:00
Delay = (60/1000),
FireSound = {
"benny/weapons/mac11/01.ogg",
"benny/weapons/mac11/02.ogg",
"benny/weapons/mac11/03.ogg",
},
})
end
do -- Shotguns
AddItem( "spas12", {
PrintName = "#Item.spas12.Name",
Description = "#Item.spas12.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_spas12.mdl",
2024-08-30 18:30:03 -04:00
HoldType = "rifle",
ClipSize = 8,
Pellets = 8,
Delay = 0.4,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 8,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "aa12", {
PrintName = "#Item.aa12.Name",
Description = "#Item.aa12.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_aa12.mdl",
HoldType = "rifle",
ClipSize = 8,
Pellets = 8,
Delay = 0.4,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 8,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "db", {
PrintName = "#Item.db.Name",
Description = "#Item.db.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_db.mdl",
HoldType = "rifle",
ClipSize = 2,
Pellets = 8,
Delay = 0.4,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 4,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "1887", {
PrintName = "#Item.1887.Name",
Description = "#Item.1887.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_1887.mdl",
HoldType = "rifle",
ClipSize = 5,
Pellets = 8,
Delay = 0.4,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 8,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "spas15", {
PrintName = "#Item.spas15.Name",
Description = "#Item.spas15.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_spas15.mdl",
HoldType = "rifle",
ClipSize = 6,
Pellets = 8,
Delay = 0.6,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 8,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "r870", {
PrintName = "#Item.r870.Name",
Description = "#Item.r870.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_r870.mdl",
HoldType = "rifle",
ClipSize = 4,
Pellets = 8,
Delay = 0.6,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 8,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
AddItem( "striker", {
PrintName = "#Item.striker.Name",
Description = "#Item.striker.Description",
Category = "shotgun",
Base = "base_firearm",
Model = "models/benny/weapons/test_striker.mdl",
HoldType = "rifle",
ClipSize = 12,
Pellets = 8,
Delay = 0.3,
BurstCount = 1,
FireSound = {
"benny/weapons/spas12/01.ogg",
"benny/weapons/spas12/02.ogg",
"benny/weapons/spas12/03.ogg",
},
MagOutSound = "benny/weapons/spas12/magout-01.ogg",
MagInSound = "benny/weapons/spas12/magout-02.ogg",
BoltDropSound = "benny/weapons/spas12/magin.ogg",
BoltPullSound = "benny/weapons/glock/magin.ogg",
Accuracy = 8,
Accuracy_Add = 0.4,
Accuracy_Reset = 0.4,
Accuracy_Decay = 12,
})
2024-08-30 18:30:03 -04:00
end
-- bat
-- bat_wood
-- machete
-- kabar
-- baton
-- deagle
-- cz75a
-- glock
-- 1911
-- mk23
-- nambu
-- anaconda
-- tmp
-- mp7
-- mp5k
-- mac11
-- bizon
-- chicom
-- fnc
-- qbz
-- m16a2
2024-03-07 22:34:29 -05:00
for ID, Data in pairs(ITEMS) do
local tent = {}
tent.Base = "b-itembase"
tent.PrintName = Data.PrintName or ID
tent.ID = ID
tent.Class = ITEMS[ID]
tent.Spawnable = true
tent.AdminOnly = false
tent.Category = "Other"
-- print("aei_" .. ID)
scripted_ents.Register( tent, "b-item_" .. ID )
end