--[[ | This file was obtained through the combined efforts | of Madbluntz & Plymouth Antiquarian Society. | | Credits: lifestorm, Gregory Wayne Rossel JR., | Maloy, DrPepper10 @ RIP, Atle! | | Visit for more: https://plymouth.thetwilightzone.ru/ --]] -- Variables that are used on both client and server SWEP.Instructions = "Shoot a prop to attach a Manhack.\nRight click to attach a rollermine." SWEP.Author = "Facepunch" SWEP.Spawnable = true SWEP.AdminOnly = true SWEP.UseHands = true SWEP.ViewModel = "models/weapons/c_pistol.mdl" SWEP.WorldModel = "models/weapons/w_pistol.mdl" SWEP.Primary.ClipSize = -1 SWEP.Primary.DefaultClip = -1 SWEP.Primary.Automatic = false SWEP.Primary.Ammo = "none" SWEP.Secondary.ClipSize = -1 SWEP.Secondary.DefaultClip = -1 SWEP.Secondary.Automatic = false SWEP.Secondary.Ammo = "none" SWEP.Weight = 5 SWEP.AutoSwitchTo = false SWEP.AutoSwitchFrom = false SWEP.PrintName = "#GMOD_ManhackGun" SWEP.Slot = 3 SWEP.SlotPos = 1 SWEP.DrawAmmo = false SWEP.DrawCrosshair = true SWEP.UseHands = true local ShootSound = Sound( "Metal.SawbladeStick" ) --[[--------------------------------------------------------- Reload does nothing -----------------------------------------------------------]] function SWEP:Reload() end --[[--------------------------------------------------------- Think does nothing -----------------------------------------------------------]] function SWEP:Think() end --[[--------------------------------------------------------- PrimaryAttack -----------------------------------------------------------]] function SWEP:PrimaryAttack() local owner = self:GetOwner() local tr = util.TraceLine( util.GetPlayerTrace( owner ) ) --if ( tr.HitWorld ) then return end if ( IsFirstTimePredicted() ) then local effectdata = EffectData() effectdata:SetOrigin( tr.HitPos ) effectdata:SetNormal( tr.HitNormal ) effectdata:SetMagnitude( 8 ) effectdata:SetScale( 1 ) effectdata:SetRadius( 16 ) util.Effect( "Sparks", effectdata ) end self:EmitSound( ShootSound ) self:ShootEffects() -- The rest is only done on the server if ( CLIENT ) then return end -- Make a manhack local ent = ents.Create( "npc_manhack" ) if ( !IsValid( ent ) ) then return end ent:SetPos( tr.HitPos + owner:GetAimVector() * -16 ) ent:SetAngles( tr.HitNormal:Angle() ) ent:Spawn() local weld = nil if ( tr.HitWorld ) then -- freeze it in place ent:GetPhysicsObject():EnableMotion( false ) else -- Weld it to the object that we hit weld = constraint.Weld( tr.Entity, ent, tr.PhysicsBone, 0, 0 ) end if ( owner:IsPlayer() ) then undo.Create( "Manhack" ) undo.AddEntity( weld ) undo.AddEntity( ent ) undo.SetPlayer( owner ) undo.Finish() end end --[[--------------------------------------------------------- SecondaryAttack -----------------------------------------------------------]] function SWEP:SecondaryAttack() local owner = self:GetOwner() local tr = util.TraceLine( util.GetPlayerTrace( owner ) ) --if ( tr.HitWorld ) then return end self:EmitSound( ShootSound ) self:ShootEffects() if ( IsFirstTimePredicted() ) then local effectdata = EffectData() effectdata:SetOrigin( tr.HitPos ) effectdata:SetNormal( tr.HitNormal ) effectdata:SetMagnitude( 8 ) effectdata:SetScale( 1 ) effectdata:SetRadius( 16 ) util.Effect( "Sparks", effectdata ) end -- The rest is only done on the server if ( CLIENT ) then return end -- Make a manhack local ent = ents.Create( "npc_rollermine" ) if ( !IsValid( ent ) ) then return end ent:SetPos( tr.HitPos + owner:GetAimVector() * -16 ) ent:SetAngles( tr.HitNormal:Angle() ) ent:Spawn() local weld = nil if ( !tr.HitWorld ) then -- Weld it to the object that we hit weld = constraint.Weld( tr.Entity, ent, tr.PhysicsBone, 0, 0 ) end if ( owner:IsPlayer() ) then undo.Create( "Rollermine" ) undo.AddEntity( weld ) undo.AddEntity( ent ) undo.SetPlayer( owner ) undo.Finish() end end --[[--------------------------------------------------------- Name: ShouldDropOnDie Desc: Should this weapon be dropped when its owner dies? -----------------------------------------------------------]] function SWEP:ShouldDropOnDie() return false end