1186 lines
28 KiB
Lua
1186 lines
28 KiB
Lua
|
|
---------------------
|
|
-- Your Name is Benny
|
|
---------------------
|
|
|
|
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
|
|
|
|
function BaseClassGet( item )
|
|
-- TODO
|
|
end
|
|
|
|
AddItem( "base", {
|
|
PrintName = "Base Item",
|
|
Description = "Beginning item base.",
|
|
Category = "base",
|
|
|
|
Model = "models/benny/weapons/test_m16a2.mdl",
|
|
DefaultBodygroups = {},
|
|
Vars = {
|
|
["Float"] = {
|
|
"Acquisition",
|
|
"HolsterIn",
|
|
},
|
|
},
|
|
|
|
["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
|
|
end,
|
|
|
|
["Deploy"] = function( class, ent, handler )
|
|
ent:SetNoDraw( false )
|
|
end,
|
|
|
|
["Drop"] = function( class, ent, handler )
|
|
end,
|
|
|
|
["Holster"] = function( class, ent, handler )
|
|
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 )
|
|
end,
|
|
|
|
["Attack"] = function( class, ent, handler )
|
|
end,
|
|
|
|
["AttackAlt"] = function( class, ent, handler )
|
|
end,
|
|
|
|
["Alt"] = function( class, ent, handler )
|
|
end,
|
|
|
|
["Think"] = function( class, ent, handler )
|
|
if ent:GetHolsterIn() != 0 and ent:GetHolsterIn() <= CurTime() then
|
|
class:FinishHolster( ent, handler )
|
|
ent:SetHolsterIn( 0 )
|
|
end
|
|
end,
|
|
|
|
["EntThink"] = function( class, ent, handler )
|
|
end,
|
|
|
|
["EntPhysicsCollide"] = function( class, ent, data, collider )
|
|
end,
|
|
|
|
["Reload"] = function( class, ent, handler )
|
|
end,
|
|
})
|
|
|
|
local AnimationLookup = {
|
|
["fire"] = {
|
|
["handgun"] = "handgun_fire",
|
|
["rifle"] = "rifle_fire",
|
|
},
|
|
["reload"] = {
|
|
["handgun"] = "handgun_reload",
|
|
["rifle"] = "rifle_reload",
|
|
},
|
|
["reload_rack"] = {
|
|
["handgun"] = "handgun_reload_rack",
|
|
["rifle"] = "rifle_reload_rack",
|
|
},
|
|
["reload_insert"] = {
|
|
["handgun"] = "handgun_reload_insert",
|
|
["rifle"] = "rifle_reload_insert",
|
|
},
|
|
["deploy"] = {
|
|
["handgun"] = "handgun_deploy",
|
|
["rifle"] = "rifle_deploy",
|
|
},
|
|
["holster"] = {
|
|
["handgun"] = "handgun_holster",
|
|
["rifle"] = "handgun_holster",
|
|
},
|
|
}
|
|
|
|
local BaseClass = ITEMS.base
|
|
AddItem( "base_firearm", {
|
|
PrintName = "Base Firearm",
|
|
Description = "Item base for firearms.",
|
|
Category = "base",
|
|
Base = "base",
|
|
|
|
FirearmHelper = true,
|
|
|
|
Vars = {
|
|
["Bool"] = {
|
|
"Loaded",
|
|
},
|
|
["Int"] = {
|
|
"Clip",
|
|
"BurstCount",
|
|
"Firemode",
|
|
},
|
|
["Float"] = {
|
|
"Delay",
|
|
"DelayBurst",
|
|
"RefillTime",
|
|
"Accuracy_Reset",
|
|
"Accuracy_Amount",
|
|
"DelayReload",
|
|
},
|
|
},
|
|
HoldType = "rpg",
|
|
|
|
Delay = 0.1,
|
|
Pellets = 1,
|
|
Accuracy = 1,
|
|
ClipSize = 15,
|
|
BurstCount = math.huge,
|
|
BurstRunaway = false,
|
|
BurstAuto = false,
|
|
BurstDelay = 0,
|
|
|
|
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",
|
|
|
|
["Initialize"] = function( class, ent, handler )
|
|
BaseClass.Initialize( class, ent, handler )
|
|
|
|
ent:SetClip( class.ClipSize )
|
|
ent:SetLoaded(true)
|
|
|
|
print( class, "Initialized a firearm" )
|
|
end,
|
|
|
|
["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
|
|
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
|
|
BaseClass.Think( class, ent, handler )
|
|
end,
|
|
|
|
["EntThink"] = function( class, ent )
|
|
if IsValid(ent:GetOwner()) then return end -- Only run this stuff when there's no owner in hand
|
|
if CLIENT then return end
|
|
|
|
local Firedown = ((ent.ShootTime or 0) >= CurTime())
|
|
if Firedown then class:Attack( ent ) end
|
|
|
|
local InProcess = ent:GetBurstCount() > 0
|
|
local Topped = ent:GetBurstCount() == class.BurstCount
|
|
local Runaway = class.BurstRunaway
|
|
local BAuto = class.BurstAuto
|
|
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
|
|
end,
|
|
|
|
["Attack"] = function( class, ent, handler )
|
|
if ent:GetClip() <= 0 then return end
|
|
if ent:GetDelay() > CurTime() then return end
|
|
if ent:GetDelayBurst() > CurTime() then return end
|
|
if ent:GetBurstCount() >= class.BurstCount then return end
|
|
if ent:GetHolsterIn() != 0 then return end
|
|
|
|
local HandlerValid = IsValid(handler)
|
|
local handlerorself = HandlerValid and handler or ent
|
|
|
|
local Runaway = class.BurstRunaway
|
|
local BAuto = class.BurstAuto
|
|
ent:SetBurstCount( ent:GetBurstCount() + 1 )
|
|
if ent:GetBurstCount() >= class.BurstCount then
|
|
ent:SetDelayBurst( CurTime() + class.BurstDelay )
|
|
if BAuto then
|
|
ent:SetBurstCount( 0 )
|
|
ent.ShootTime = 0
|
|
end
|
|
end
|
|
|
|
ent:SetClip( ent:GetClip() - 1 )
|
|
if ent:GetClip() == 0 then
|
|
handlerorself:EmitSound( "benny/weapons/1911/slidedrop.ogg", 70, 100, 0.4, CHAN_STATIC )
|
|
end
|
|
|
|
ent:SetDelay( CurTime() + class.Delay )
|
|
handlerorself:EmitSound( istable(class.FireSound) and TSelShared(class.FireSound, "FireSound") or class.FireSound, 100, 100, 0.5, CHAN_STATIC )
|
|
|
|
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
|
|
|
|
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") )
|
|
end,
|
|
|
|
["Reload"] = function( class, ent, handler )
|
|
if ent:GetDelay() > CurTime() then return end
|
|
if ent:GetHolsterIn() != 0 then return end
|
|
|
|
local ply = handler:GetOwner()
|
|
local time = 0.6
|
|
|
|
if ent:GetLoaded() then
|
|
handler:EmitSound( class.MagOutSound, 70, 100, 0.4, CHAN_STATIC )
|
|
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
|
|
time = 0.4
|
|
ent:PlayAnimation( ent:LookupSequence("magout") )
|
|
else
|
|
handler:EmitSound( class.MagInSound, 70, 100, 0.4, CHAN_STATIC )
|
|
ent:SetLoaded( true )
|
|
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") )
|
|
end
|
|
ent:SetDelay( CurTime() + time )
|
|
end,
|
|
|
|
["Deploy"] = function( class, ent, handler )
|
|
handler:EmitSound( "weapons/usp/usp_slideback.wav", 70, 125, 0.4, CHAN_STATIC )
|
|
ent:SetDelay( CurTime() + 0.5 )
|
|
|
|
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
|
|
end,
|
|
|
|
["Drop"] = function( class, ent, handler )
|
|
ent:SetRefillTime( 0 )
|
|
BaseClass.Drop( class, ent, handler )
|
|
end,
|
|
|
|
["Holster"] = function( class, ent, handler )
|
|
ent:SetRefillTime( 0 )
|
|
|
|
handler:EmitSound( "weapons/elite/elite_deploy.wav", 70, 125, 0.4, CHAN_STATIC )
|
|
ent:SetDelay( CurTime() + 0.25 )
|
|
ent:SetHolsterIn( CurTime() + 0.25 )
|
|
|
|
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
|
|
end,
|
|
|
|
["EntPhysicsCollide"] = function( class, ent, data, collider )
|
|
if ( data.DeltaTime > 0.1 and data.Speed > 200 ) then
|
|
ent.ShootTime = CurTime() + math.Rand( 0.1, 0.5 )
|
|
end
|
|
end,
|
|
|
|
["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 )
|
|
end
|
|
end,
|
|
})
|
|
|
|
local BaseClass = ITEMS.base_firearm
|
|
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 )
|
|
BaseClass.Initialize( class, ent, handler )
|
|
|
|
ent:SetClip2( class.ClipSize2 )
|
|
end,
|
|
|
|
["Attack"] = function( class, ent, handler )
|
|
if ent:GetFiremode() == 1 then
|
|
class:Attack2( ent, handler )
|
|
else
|
|
BaseClass.Attack( class, ent, handler )
|
|
end
|
|
end,
|
|
|
|
["Reload"] = function( class, ent, handler )
|
|
if ent:GetFiremode() == 1 then
|
|
class:Reload2( ent, handler )
|
|
else
|
|
BaseClass.Reload( class, ent, handler )
|
|
end
|
|
end,
|
|
|
|
["Alt"] = function( class, ent, handler )
|
|
ent:SetFiremode( ent:GetFiremode() == 1 and 0 or 1 )
|
|
end,
|
|
|
|
["Think"] = function( class, ent, handler )
|
|
BaseClass.Think( class, ent, handler )
|
|
|
|
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 )
|
|
end,
|
|
})
|
|
|
|
local BaseClass = ITEMS.base
|
|
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,
|
|
})
|
|
|
|
local BaseClass = ITEMS.base
|
|
AddItem( "toolgun", {
|
|
PrintName = "#Item.toolgun.Name",
|
|
Description = "#Item.toolgun.Description",
|
|
Category = "dev",
|
|
Base = "base",
|
|
|
|
Model = "models/benny/weapons/testgun.mdl",
|
|
HoldType = "handgun",
|
|
|
|
Vars = {
|
|
["Float"] = {
|
|
"Delay",
|
|
},
|
|
["Int"] = {
|
|
"BurstCount",
|
|
},
|
|
},
|
|
|
|
["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 )
|
|
|
|
handler:EmitSound("weapons/airboat/airboat_gun_lastshot1.wav", 100, 100, 1, CHAN_STATIC)
|
|
|
|
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
|
|
end
|
|
end,
|
|
|
|
["AttackAlt"] = function( class, ent, handler )
|
|
if ent:GetDelay() > CurTime() then return end
|
|
ent:SetDelay( CurTime() + 0.5 )
|
|
end,
|
|
|
|
["Reload"] = function( class, ent, handler )
|
|
|
|
end,
|
|
|
|
["Think"] = function( class, ent, handler )
|
|
if ent:GetBurstCount() > 0 and !handler:GetOwner():KeyDown( IN_ATTACK ) then
|
|
ent:SetBurstCount( 0 )
|
|
end
|
|
end,
|
|
|
|
["Deploy"] = function( class, ent, handler )
|
|
ent:SetDelay( CurTime() + 0.5 )
|
|
|
|
local ply = handler:GetOwner()
|
|
ply:AddVCDSequenceToGestureSlot( GESTURE_SLOT_ATTACK_AND_RELOAD, ply:LookupSequence( AnimationLookup["deploy"][class.HoldType] ), 0, true )
|
|
end,
|
|
|
|
["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,
|
|
})
|
|
|
|
local BaseClass = ITEMS.base_firearm
|
|
do -- Handguns
|
|
|
|
AddItem( "mk23", {
|
|
PrintName = "#Item.mk23.Name",
|
|
Description = "#Item.mk23.Description",
|
|
Category = "pistol",
|
|
Base = "base_firearm",
|
|
|
|
Model = "models/benny/weapons/test_mk23.mdl",
|
|
HoldType = "handgun",
|
|
DefaultBodygroups = { false, false, 1 },
|
|
|
|
ClipSize = 12,
|
|
Delay = (60/320),
|
|
FireSound = {
|
|
"benny/weapons/usp/sup_01.ogg",
|
|
"benny/weapons/usp/sup_02.ogg",
|
|
"benny/weapons/usp/sup_03.ogg",
|
|
},
|
|
MagOutSound = "benny/weapons/usp/magout.ogg",
|
|
MagInSound = "benny/weapons/usp/magin.ogg",
|
|
BoltDropSound = "benny/weapons/usp/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( "cz75", {
|
|
PrintName = "#Item.cz75.Name",
|
|
Description = "#Item.cz75.Description",
|
|
Category = "pistol",
|
|
Base = "base_firearm",
|
|
|
|
Model = "models/benny/weapons/test_cz75.mdl",
|
|
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 = "#Item.g18.Name",
|
|
Description = "#Item.g18.Description",
|
|
Category = "pistol",
|
|
Base = "base_firearm",
|
|
|
|
Model = "models/benny/weapons/test_g18.mdl",
|
|
HoldType = "handgun",
|
|
|
|
ClipSize = 33,
|
|
Delay = (60/1000),
|
|
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",
|
|
BoltPullSound = "benny/weapons/glock/cock.ogg",
|
|
|
|
Accuracy = 5/60,
|
|
--BurstCount = 1,
|
|
Accuracy_Add = 0.5,
|
|
Accuracy_Reset = 0.4,
|
|
Accuracy_Decay = 5,
|
|
})
|
|
|
|
end
|
|
|
|
do -- Rifles
|
|
|
|
AddItem( "fnc", {
|
|
PrintName = "#Item.fnc.Name",
|
|
Description = "#Item.fnc.Description",
|
|
Category = "assaultrifle",
|
|
Base = "base_firearm",
|
|
|
|
Model = "models/benny/weapons/test_fnc.mdl",--"models/weapons/w_rif_ar556.mdl",
|
|
HoldType = "rifle",
|
|
|
|
ClipSize = 30,
|
|
Delay = (60/800),
|
|
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,
|
|
})
|
|
|
|
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",
|
|
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",
|
|
HoldType = "rifle",
|
|
|
|
ClipSize = 30,
|
|
Delay = (60/1050),
|
|
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
|
|
|
|
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",
|
|
HoldType = "handgun",
|
|
|
|
ClipSize = 25,
|
|
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",
|
|
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",
|
|
HoldType = "handgun",
|
|
|
|
ClipSize = 30,
|
|
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",
|
|
HoldType = "handgun",
|
|
|
|
ClipSize = 20,
|
|
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",
|
|
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.22,
|
|
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,
|
|
})
|
|
|
|
end
|
|
|
|
-- bat
|
|
-- bat_wood
|
|
-- machete
|
|
-- kabar
|
|
-- baton
|
|
|
|
-- deagle
|
|
-- cz75a
|
|
-- glock
|
|
-- 1911
|
|
-- mk23
|
|
-- nambu
|
|
-- anaconda
|
|
|
|
-- tmp
|
|
-- mp7
|
|
-- mp5k
|
|
-- mac11
|
|
-- bizon
|
|
-- chicom
|
|
|
|
-- fnc
|
|
-- qbz
|
|
-- m16a2
|
|
|
|
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 |