WIP Melee weapons

This commit is contained in:
Fesiug 2024-01-04 00:27:54 -05:00
parent 0fcac41f40
commit 41f63aaabd
5 changed files with 205 additions and 24 deletions

View File

@ -10,7 +10,34 @@ function SWEP:DrawWorldModel()
end end
wm:SetModel( class.WModel ) wm:SetModel( class.WModel )
wm:SetNoDraw( true ) wm:SetNoDraw( true )
if class.MAdj then
if wm:IsEffectActive( EF_BONEMERGE ) then
wm:RemoveEffects( EF_BONEMERGE )
end
-- Specify a good position
local offsetVec = class.MAdj
local offsetAng = class.MAdjA or angle_zero
local boneid = p:LookupBone("ValveBiped.Bip01_R_Hand") -- Right Hand
if !boneid then return end
local matrix = p:GetBoneMatrix(boneid)
if !matrix then return end
local newPos, newAng = LocalToWorld(offsetVec, offsetAng, matrix:GetTranslation(), matrix:GetAngles())
wm:SetPos(newPos)
wm:SetAngles(newAng)
wm:SetupBones()
else
if !wm:IsEffectActive( EF_BONEMERGE ) then
wm:AddEffects( EF_BONEMERGE ) wm:AddEffects( EF_BONEMERGE )
end
wm:SetPos(self:GetPos())
wm:SetAngles(self:GetAngles())
end
wm:SetParent( p ) wm:SetParent( p )
if true or self:GetUserAim() then wm:DrawModel() end if true or self:GetUserAim() then wm:DrawModel() end
else else

View File

@ -750,7 +750,7 @@ hook.Add( "HUDPaint", "Benny_HUDPaint", function()
draw.SimpleText( "L", "Benny_10", b_x + bump + ss(2), b_y + ss(b_h) - ss(9), scheme["bg"], TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP ) draw.SimpleText( "L", "Benny_10", b_x + bump + ss(2), b_y + ss(b_h) - ss(9), scheme["bg"], TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP )
end end
end end
if class.Features == "firearm" or class.Features == "grenade" then if class.Features == "firearm" or class.Features == "grenade" or class.Features == "melee" then
invid = invid + 1 invid = invid + 1
surface.SetDrawColor( scheme[active and "bg" or "fg"] ) surface.SetDrawColor( scheme[active and "bg" or "fg"] )
surface.DrawOutlinedRect( b_x + bump + ss(1), b_y + ss(1), boxsize-ss(2), ss(b_h-2), ss(0.5) ) surface.DrawOutlinedRect( b_x + bump + ss(1), b_y + ss(1), boxsize-ss(2), ss(b_h-2), ss(0.5) )

View File

@ -26,7 +26,7 @@ local function beatup( ply, num )
for _, item in pairs( weighted ) do for _, item in pairs( weighted ) do
local class = WeaponGet(item.Class) local class = WeaponGet(item.Class)
local id = iflip[item] local id = iflip[item]
if class.Features == "firearm" or class.Features == "grenade" then if class.Features == "firearm" or class.Features == "grenade" or class.Features == "melee" then
invid = invid + 1 invid = invid + 1
if num == 0 then num = 10 end if num == 0 then num = 10 end
if num == invid then if num == invid then

View File

@ -22,6 +22,10 @@ PLAYER.TeammateNoCollide = true
PLAYER.AvoidPlayers = true PLAYER.AvoidPlayers = true
PLAYER.UseVMHands = true PLAYER.UseVMHands = true
function PLAYER:Init()
self.Player:AddEFlags( EFL_NO_DAMAGE_FORCES )
end
function PLAYER:SetupDataTables() function PLAYER:SetupDataTables()
self.Player:NetworkVar( "Bool", 0, "Shoulder" ) self.Player:NetworkVar( "Bool", 0, "Shoulder" )

View File

@ -226,35 +226,81 @@ do -- Bases
end, end,
}) })
local q1, q2 = Vector( -1, -1, -1 ), Vector( 1, 1, 1 )
ItemDef("base_melee", { ItemDef("base_melee", {
Name = "Base Melee", Name = "Base Melee",
Category = "base", Category = "melee",
Base = "base", Base = "base",
Description = "Base for melee weapons", Description = "Base for melee weapons",
Features = "firearm", Features = "melee",
WModel = "models/weapons/w_pistol.mdl", WModel = "models/weapons/w_crowbar.mdl",
HoldType = "pistol", HoldType = "melee",
-- Firearm specific Damage = 34,
Firemodes = { Force = 100,
{ Delay = 0.45,
Mode = 1, Range = 64,
}, HullSize = 2,
},
Damage = 0,
Delay = 60/600,
Spread = 0,
SpreadAdd = 0,
SpreadAddMax = 1,
SpreadDecay_Start = 1,
SpreadDecay_End = 2,
SpreadDecay_RampTime = 1,
Func_Attack = function( self, hand ) Func_Attack = function( self, hand )
if self:bGetIntDelay( hand ) > CurTime() then
return
end
local wep_table = self:bWepTable( hand )
local wep_class = self:bWepClass( hand )
self:bSetIntDelay( hand, CurTime() + wep_class.Delay )
self:TPCustom( wep_class.GestureFire[1], wep_class.GestureFire[2] )
local p = self:GetOwner()
q1[1] = -wep_class.HullSize
q1[2] = -wep_class.HullSize
q1[3] = -wep_class.HullSize
q2[1] = wep_class.HullSize
q2[2] = wep_class.HullSize
q2[3] = wep_class.HullSize
local range = p:EyeAngles():Forward()
range:Mul(wep_class.Range)
range:Add(p:EyePos())
local tr = {
start = p:EyePos(),
endpos = range,
mins = q1,
maxs = q2,
filter = p,
collisiongroup = COLLISION_GROUP_PLAYER,
}
-- debugoverlay.SweptBox( tr.start, tr.endpos, tr.mins, tr.maxs, angle_zero, 3, Color( 255, 255, 255, 0 ))
if p:IsPlayer() then p:LagCompensation( true ) end
tr = util.TraceHull(tr)
if p:IsPlayer() then p:LagCompensation( false ) end
if tr.HitWorld then
self:EmitSound( "physics/concrete/concrete_block_impact_hard1.wav", 70, 150 + util.SharedRandom( "Benny_RifleMelee", -20, 20 ), 0.25 )
elseif tr.Entity and tr.Entity != NULL then
self:EmitSound( "benny/violence/bodysplat_mix.ogg", 70, 100 + util.SharedRandom( "Benny_RifleMelee", -10, 10 ), 0.25 )
if SERVER then
local dmginfo = DamageInfo()
dmginfo:SetAttacker( p )
dmginfo:SetInflictor( self )
dmginfo:SetDamage( wep_class.Damage )
dmginfo:SetDamagePosition( tr.HitPos )
dmginfo:SetDamageForce( tr.Normal*wep_class.Force*wep_class.Damage )
tr.Entity:TakeDamageInfo( dmginfo )
end
else
self:EmitSound( "weapons/slam/throw.wav", 70, 200 + util.SharedRandom( "Benny_RifleMelee", -20, 20 ), 0.25 )
end
end,
Func_AttackAlt = function( self, hand )
end, end,
}) })
@ -282,6 +328,110 @@ do -- Bases
end end
do -- Melee
ItemDef("bat", {
Name = "ALUMINUM BAT",
Description = "Bonk!",
Base = "base_melee",
MAdj = Vector( 3, -2, 3 ),
MAdjA = Angle( 0, 0, 180 ),
WModel = "models/benny/wep/melee_bat.mdl",
HoldType = "melee2",
GestureFire = { ACT_HL2MP_GESTURE_RANGE_ATTACK_MELEE2, 0.2 },
GestureDraw = { ACT_HL2MP_GESTURE_RELOAD_REVOLVER, 0.8 },
--
Damage = 34,
Force = 100,
Delay = 0.45,
Range = 72,
HullSize = 2,
})
ItemDef("bat_wood", {
Name = "BASEBALL BAT",
Description = "There's my ball!",
Base = "base_melee",
MAdj = Vector( 3, -2, 3 ),
MAdjA = Angle( 0, 0, 180 ),
WModel = "models/benny/wep/melee_bat.mdl",
HoldType = "melee2",
GestureFire = { ACT_HL2MP_GESTURE_RANGE_ATTACK_MELEE2, 0.2 },
GestureDraw = { ACT_HL2MP_GESTURE_RELOAD_REVOLVER, 0.8 },
--
Damage = 34,
Force = 100,
Delay = 0.5,
Range = 72,
HullSize = 2,
})
ItemDef("machete", {
Name = "MACHETE",
Description = "Chop chop!",
Base = "base_melee",
MAdj = Vector( 3, -2, 0 ),
MAdjA = Angle( 0, 0, 180 ),
WModel = "models/benny/wep/melee_machete.mdl",
HoldType = "melee",
GestureFire = { ACT_HL2MP_GESTURE_RANGE_ATTACK_MELEE, 0.2 },
GestureDraw = { ACT_HL2MP_GESTURE_RELOAD_REVOLVER, 0.8 },
--
Damage = 34,
Force = 100,
Delay = 0.4,
Range = 64,
HullSize = 2,
})
ItemDef("kabar", {
Name = "KABAR",
Description = "Shank shank!",
Base = "base_melee",
MAdj = Vector( 3, -2, 0 ),
MAdjA = Angle( 0, 0, 180 ),
WModel = "models/benny/wep/melee_kabar.mdl",
HoldType = "knife",
GestureFire = { ACT_HL2MP_GESTURE_RANGE_ATTACK_MELEE2, 0.0 },
GestureDraw = { ACT_HL2MP_GESTURE_RELOAD_REVOLVER, 0.8 },
--
Damage = 34,
Force = 100,
Delay = 0.35,
Range = 48,
HullSize = 2,
})
ItemDef("baton", {
Name = "BATON",
Description = "Excessive force!",
Base = "base_melee",
MAdj = Vector( 3, -2, 0 ),
MAdjA = Angle( 0, 0, 180 ),
WModel = "models/benny/wep/melee_baton.mdl",
HoldType = "melee2",
GestureFire = { ACT_GMOD_GESTURE_MELEE_SHOVE_1HAND, 0.3 },
GestureDraw = { ACT_HL2MP_GESTURE_RELOAD_REVOLVER, 0.8 },
--
Damage = 34,
Force = 100,
Delay = 0.45,
Range = 64,
HullSize = 2,
})
end
do -- Pistols do -- Pistols
ItemDef("deagle", { ItemDef("deagle", {