Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- AddCSLuaFile()
- SWEP.PrintName = "Fists"
- SWEP.Author = "Kilburn, robotboy655, MaxOfS2D & Tenrys"
- SWEP.Purpose = "Well we sure as hell didn't use guns! We would just wrestle Hunters to the ground with our bare hands! I used to kill ten, twenty a day, just using my fists."
- SWEP.Spawnable = true
- SWEP.UseHands = true
- SWEP.DrawAmmo = false
- SWEP.ViewModel = "models/weapons/c_arms_citizen.mdl"
- SWEP.WorldModel = ""
- SWEP.Base= "weapon_tttbase"
- SWEP.AutoSpawnable = false
- SWEP.Kind = WEAPON_MELEE
- SWEP.NoSights = true
- SWEP.IsSilent = true
- SWEP.AutoSpawnable = false
- SWEP.AllowDelete = false -- never removed for weapon reduction
- SWEP.AllowDrop = false
- SWEP.Icon = "vgui/ttt/ak47_icon_dark.png"
- SWEP.ViewModelFlip= false
- SWEP.ViewModelFOV = 52
- SWEP.Slot = 0
- SWEP.SlotPos = 5
- SWEP.Primary.ClipSize = -1
- SWEP.Primary.DefaultClip = -1
- SWEP.Primary.Automatic = true
- SWEP.Primary.Ammo = "none"
- SWEP.Primary.Delay = 0.5
- SWEP.Secondary.ClipSize = -1
- SWEP.Secondary.DefaultClip = -1
- SWEP.Secondary.Automatic = true
- SWEP.Secondary.Ammo = "none"
- SWEP.Secondary.Delay = 3
- local SwingSound = Sound( "weapons/slam/throw.wav" )
- local HitSound = Sound( "Flesh.ImpactHard" )
- function SWEP:Initialize()
- self:SetHoldType( "fist" )
- end
- function SWEP:PreDrawViewModel( vm, wep, ply )
- vm:SetMaterial( "engine/occlusionproxy" ) -- Hide that view model with hacky material
- end
- SWEP.HitDistance = 48
- function SWEP:SetupDataTables()
- self:NetworkVar( "Float", 0, "NextMeleeAttack" )
- self:NetworkVar( "Float", 1, "NextIdle" )
- self:NetworkVar( "Int", 2, "Combo" )
- end
- function SWEP:UpdateNextIdle()
- local vm = self.Owner:GetViewModel()
- self:SetNextIdle( CurTime() + vm:SequenceDuration() )
- end
- function SWEP:PrimaryAttack( right )
- self.Owner:SetAnimation( PLAYER_ATTACK1 )
- local anim = "fists_left"
- if ( right ) then anim = "fists_right" end
- if ( self:GetCombo() >= 2 ) then
- anim = "fists_uppercut"
- end
- local vm = self.Owner:GetViewModel()
- vm:SendViewModelMatchingSequence( vm:LookupSequence( anim ) )
- self:EmitSound( SwingSound )
- self:UpdateNextIdle()
- self:SetNextMeleeAttack( CurTime() + 0.2 )
- self:SetNextPrimaryFire( CurTime() + 0.9 )
- self:SetNextSecondaryFire( CurTime() + 0.9 )
- end
- function SWEP:SecondaryAttack()
- self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
- self.Weapon:SetNextSecondaryFire( CurTime() + 0.1 )
- local tr = self.Owner:GetEyeTrace(MASK_SHOT)
- if tr.Hit and IsValid(tr.Entity) and tr.Entity:IsPlayer() and (self.Owner:EyePos() - tr.HitPos):Length() < 100 then
- local ply = tr.Entity
- if SERVER then
- CreateConVar("ttt_crowbar_pushforce", "395", FCVAR_NOTIFY)
- end
- if SERVER and (not ply:IsFrozen()) then
- local pushvel = tr.Normal * GetConVar("ttt_crowbar_pushforce"):GetFloat()
- -- limit the upward force to prevent launching
- pushvel.z = math.Clamp(pushvel.z, 50, 100)
- ply:SetVelocity(ply:GetVelocity() + pushvel)
- self.Owner:SetAnimation( PLAYER_ATTACK1 )
- ply.was_pushed = {att=self.Owner, t=CurTime()} --, infl=self}
- end
- self.Weapon:EmitSound(HitSound)
- local anim = "fists_right"
- if ( right ) then anim = "fists_left" end
- if ( self:GetCombo() >= 2 ) then
- anim = "fists_uppercut"
- end
- self.Weapon:SetNextSecondaryFire( CurTime() + self.Secondary.Delay )
- end
- end
- --function SWEP:SecondaryAttack()
- -- self:PrimaryAttack( true )
- --end
- function SWEP:DealDamage()
- local anim = self:GetSequenceName(self.Owner:GetViewModel():GetSequence())
- self.Owner:LagCompensation( true )
- local tr = util.TraceLine( {
- start = self.Owner:GetShootPos(),
- endpos = self.Owner:GetShootPos() + self.Owner:GetAimVector() * self.HitDistance,
- filter = self.Owner
- } )
- if ( !IsValid( tr.Entity ) ) then
- tr = util.TraceHull( {
- start = self.Owner:GetShootPos(),
- endpos = self.Owner:GetShootPos() + self.Owner:GetAimVector() * self.HitDistance,
- filter = self.Owner,
- mins = Vector( -10, -10, -8 ),
- maxs = Vector( 10, 10, 8 )
- } )
- end
- -- We need the second part for single player because SWEP:Think is ran shared in SP.
- if ( tr.Hit && !( game.SinglePlayer() && CLIENT ) ) then
- self:EmitSound( HitSound )
- end
- local hit = false
- if ( SERVER && IsValid( tr.Entity ) && ( tr.Entity:IsNPC() || tr.Entity:IsPlayer() || tr.Entity:Health() > 0 ) ) then
- local dmginfo = DamageInfo()
- local attacker = self.Owner
- if ( !IsValid( attacker ) ) then attacker = self end
- dmginfo:SetAttacker( attacker )
- dmginfo:SetInflictor( self )
- dmginfo:SetDamage( math.random( 8, 12 ) )
- if ( anim == "fists_left" ) then
- dmginfo:SetDamageForce( self.Owner:GetRight() * 4912 + self.Owner:GetForward() * 9998 ) -- Yes we need those specific numbers
- elseif ( anim == "fists_right" ) then
- dmginfo:SetDamageForce( self.Owner:GetRight() * -4912 + self.Owner:GetForward() * 9989 )
- elseif ( anim == "fists_uppercut" ) then
- dmginfo:SetDamageForce( self.Owner:GetUp() * 5158 + self.Owner:GetForward() * 10012 )
- dmginfo:SetDamage( math.random( 12, 24 ) )
- end
- tr.Entity:TakeDamageInfo( dmginfo )
- hit = true
- end
- if ( SERVER && IsValid( tr.Entity ) ) then
- local phys = tr.Entity:GetPhysicsObject()
- if ( IsValid( phys ) ) then
- tr.Entity:Fire("Break", 0.1)
- phys:ApplyForceOffset( self.Owner:GetAimVector() * 80 * phys:GetMass(), tr.HitPos )
- end
- end
- if ( SERVER ) then
- if ( hit && anim != "fists_uppercut" ) then
- self:SetCombo( self:GetCombo() + 1 )
- else
- self:SetCombo( 0 )
- end
- end
- self.Owner:LagCompensation( false )
- end
- function SWEP:OnRemove()
- if ( IsValid( self.Owner ) && CLIENT && self.Owner:IsPlayer() ) then
- local vm = self.Owner:GetViewModel()
- if ( IsValid( vm ) ) then vm:SetMaterial( "" ) end
- end
- end
- function SWEP:Holster( wep )
- self:OnRemove()
- return true
- end
- function SWEP:Deploy()
- local vm = self.Owner:GetViewModel()
- vm:SendViewModelMatchingSequence( vm:LookupSequence( "fists_draw" ) )
- self:UpdateNextIdle()
- if ( SERVER ) then
- self:SetCombo( 0 )
- end
- return true
- end
- function SWEP:Think()
- local vm = self.Owner:GetViewModel()
- local curtime = CurTime()
- local idletime = self:GetNextIdle()
- if ( idletime > 0 && CurTime() > idletime ) then
- vm:SendViewModelMatchingSequence( vm:LookupSequence( "fists_idle_0" .. math.random( 1, 2 ) ) )
- self:UpdateNextIdle()
- end
- local meleetime = self:GetNextMeleeAttack()
- if ( meleetime > 0 && CurTime() > meleetime ) then
- self:DealDamage()
- self:SetNextMeleeAttack( 0 )
- end
- if ( SERVER && CurTime() > self:GetNextPrimaryFire() + 0.1 ) then
- self:SetCombo( 0 )
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement