Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if ( SERVER ) then
- AddCSLuaFile( "shared.lua" )
- SWEP.HoldType = "melee2"
- end
- if ( CLIENT ) then
- SWEP.PrintName = "Le Baguette" --weapon name
- SWEP.Author = "Gidz.Co"
- SWEP.Category = "Gidz.Co"
- SWEP.DrawAmmo = false
- end
- SWEP.Base = "weapon_base"
- SWEP.Spawnable = true
- SWEP.AdminSpawnable = true
- SWEP.ViewModel = "models/weapons/gidzco/bagette/v_bagette.mdl" --replace this with the shit you want
- SWEP.WorldModel = "models/weapons/gidzco/bagette/w_bagette.mdl" --same with this
- SWEP.DrawCrosshair = true
- function SWEP:Initialize() --idk why this is here but ok sure
- self:SetWeaponHoldType( "melee2" )
- end
- function SWEP:Precache() --sounds
- util.PrecacheSound("weapons/gidzco/baguette/melee_tonfa_01")
- util.PrecacheSound("weapons/gidzco/baguette/melee_tonfa_02")
- util.PrecacheSound("weapons/gidzco/hl2_slash1.wav")
- end
- -------------Primary Fire Attributes----------------------------------------
- SWEP.Primary.Delay = 0.5
- SWEP.Primary.Recoil = 0
- SWEP.Primary.Damage = 5
- SWEP.Primary.NumShots = 1
- SWEP.Primary.Cone = 0
- SWEP.Primary.ClipSize = -1
- SWEP.Primary.DefaultClip = -1
- SWEP.Primary.Automatic = true
- SWEP.Primary.Ammo = "none"
- -------------End Primary Fire Attributes------------------------------------
- -------------Secondary Fire Attributes-------------------------------------
- SWEP.Secondary.Delay = 1.2
- SWEP.Secondary.Recoil = 0
- SWEP.Secondary.Damage = 0
- SWEP.Secondary.NumShots = 1
- SWEP.Secondary.Cone = 0
- SWEP.Secondary.ClipSize = -1
- SWEP.Secondary.DefaultClip = -1
- SWEP.Secondary.Automatic = true
- SWEP.Secondary.Ammo = "none"
- -------------End Secondary Fire Attributes--------------------------------
- -- only open things that have a name (and are therefore likely to be meant to
- -- open) and are the right class. Opening behaviour also differs per class, so
- -- return one of the OPEN_ values
- local function OpenableEnt(ent)
- local cls = ent:GetClass()
- if ent:GetName() == "" then
- return OPEN_NO
- elseif cls == "prop_door_rotating" then
- return OPEN_ROT
- elseif cls == "func_door" or cls == "func_door_rotating" then
- return OPEN_DOOR
- elseif cls == "func_button" then
- return OPEN_BUT
- elseif cls == "func_movelinear" then
- return OPEN_NOTOGGLE
- else
- return OPEN_NO
- end
- end
- local function CrowbarCanUnlock(t)
- return not GAMEMODE.crowbar_unlocks or GAMEMODE.crowbar_unlocks[t]
- end
- -- will open door AND return what it did
- function SWEP:OpenEnt(hitEnt)
- -- Get ready for some prototype-quality code, all ye who read this
- if SERVER then
- local openable = OpenableEnt(hitEnt)
- if openable == OPEN_DOOR or openable == OPEN_ROT then
- local unlock = CrowbarCanUnlock(openable)
- if unlock then
- hitEnt:Fire("Unlock", nil, 0)
- end
- if unlock or hitEnt:HasSpawnFlags(256) then
- if openable == OPEN_ROT then
- hitEnt:Fire("OpenAwayFrom", self.Owner, 0)
- end
- hitEnt:Fire("Toggle", nil, 0)
- else
- return OPEN_NO
- end
- elseif openable == OPEN_BUT then
- if CrowbarCanUnlock(openable) then
- hitEnt:Fire("Unlock", nil, 0)
- hitEnt:Fire("Press", nil, 0)
- else
- return OPEN_NO
- end
- elseif openable == OPEN_NOTOGGLE then
- if CrowbarCanUnlock(openable) then
- hitEnt:Fire("Open", nil, 0)
- else
- return OPEN_NO
- end
- end
- return openable
- else
- return OPEN_NO
- end
- end
- function SWEP:PrimaryAttack()
- self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
- if not IsValid(self.Owner) then return end
- if self.Owner.LagCompensation then -- for some reason not always true
- self.Owner:LagCompensation(true)
- end
- local spos = self.Owner:GetShootPos()
- local sdest = spos + (self.Owner:GetAimVector() * 70)
- local tr_main = util.TraceLine({start=spos, endpos=sdest, filter=self.Owner, mask=MASK_SHOT_HULL})
- local hitEnt = tr_main.Entity
- self.Weapon:EmitSound(sound_single)
- if IsValid(hitEnt) or tr_main.HitWorld then
- self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
- if not (CLIENT and (not IsFirstTimePredicted())) then
- local edata = EffectData()
- edata:SetStart(spos)
- edata:SetOrigin(tr_main.HitPos)
- edata:SetNormal(tr_main.Normal)
- --edata:SetSurfaceProp(tr_main.MatType)
- --edata:SetDamageType(DMG_CLUB)
- edata:SetEntity(hitEnt)
- if hitEnt:IsPlayer() or hitEnt:GetClass() == "prop_ragdoll" then
- util.Effect("BloodImpact", edata)
- -- does not work on players rah
- --util.Decal("Blood", tr_main.HitPos + tr_main.HitNormal, tr_main.HitPos - tr_main.HitNormal)
- -- do a bullet just to make blood decals work sanely
- -- need to disable lagcomp because firebullets does its own
- self.Owner:LagCompensation(false)
- self.Owner:FireBullets({Num=1, Src=spos, Dir=self.Owner:GetAimVector(), Spread=Vector(0,0,0), Tracer=0, Force=1, Damage=0})
- else
- util.Effect("Impact", edata)
- end
- end
- else
- self.Weapon:SendWeaponAnim( ACT_VM_MISSCENTER )
- end
- if CLIENT then
- -- used to be some shit here
- else -- SERVER
- -- Do another trace that sees nodraw stuff like func_button
- local tr_all = nil
- tr_all = util.TraceLine({start=spos, endpos=sdest, filter=self.Owner})
- self.Owner:SetAnimation( PLAYER_ATTACK1 )
- if hitEnt and hitEnt:IsValid() then
- if self:OpenEnt(hitEnt) == OPEN_NO and tr_all.Entity and tr_all.Entity:IsValid() then
- -- See if there's a nodraw thing we should open
- self:OpenEnt(tr_all.Entity)
- end
- local dmg = DamageInfo()
- dmg:SetDamage(self.Primary.Damage)
- dmg:SetAttacker(self.Owner)
- dmg:SetInflictor(self.Weapon)
- dmg:SetDamageForce(self.Owner:GetAimVector() * 1500)
- dmg:SetDamagePosition(self.Owner:GetPos())
- dmg:SetDamageType(DMG_CLUB)
- hitEnt:DispatchTraceAttack(dmg, spos + (self.Owner:GetAimVector() * 3), sdest)
- -- self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
- -- self.Owner:TraceHullAttack(spos, sdest, Vector(-16,-16,-16), Vector(16,16,16), 30, DMG_CLUB, 11, true)
- -- self.Owner:FireBullets({Num=1, Src=spos, Dir=self.Owner:GetAimVector(), Spread=Vector(0,0,0), Tracer=0, Force=1, Damage=20})
- else
- -- if tr_main.HitWorld then
- -- self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
- -- else
- -- self.Weapon:SendWeaponAnim( ACT_VM_MISSCENTER )
- -- end
- -- See if our nodraw trace got the goods
- if tr_all.Entity and tr_all.Entity:IsValid() then
- self:OpenEnt(tr_all.Entity)
- end
- end
- end
- if self.Owner.LagCompensation then
- self.Owner:LagCompensation(false)
- end
- end
- function SWEP:GetClass()
- return "weapon_crowbar"
- end
- function SWEP:OnDrop()
- self:Remove()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement