I would like to have a breacher so i can add it on my rp server instead of a door ram :)
How would i make it so it blows door down but after a certain amount of time it respawns, Kinda of like shotgun when you shoot the door.
Thank you
[code]// Variables that are used on both client and server
SWEP.Base = "weapon_mad_base"
SWEP.ViewModelFlip = true
SWEP.ViewModel = "models/weapons/v_c4.mdl"
SWEP.WorldModel = "models/weapons/w_c4.mdl"
SWEP.Spawnable = false
SWEP.AdminSpawnable = true
SWEP.Primary.Sound = Sound("")
SWEP.Primary.Recoil = 0
SWEP.Primary.Damage = 0
SWEP.Primary.NumShots = 1
SWEP.Primary.Cone = 0.075
SWEP.Primary.Delay = 5
SWEP.Primary.ClipSize = -1 // Size of a clip
SWEP.Primary.DefaultClip = 1 // Default number of bullets in a clip
SWEP.Primary.Automatic = false // Automatic/Semi Auto
SWEP.Primary.Ammo = "Thumper"
SWEP.Secondary.ClipSize = -1 // Size of a clip
SWEP.Secondary.DefaultClip = -1 // Default number of bullets in a clip
SWEP.Secondary.Automatic = false // Automatic/Semi Auto
SWEP.Secondary.Ammo = "none"
SWEP.ShellEffect = "none" // "effect_mad_shell_pistol" or "effect_mad_shell_rifle" or "effect_mad_shell_shotgun"
SWEP.ShellDelay = 0
SWEP.Pistol = true
SWEP.Rifle = false
SWEP.Shotgun = false
SWEP.Sniper = false
SWEP.Blacklist = {}
SWEP.Blacklist["ent_mad_c4"] = true
SWEP.Timer = 30
/*---------------------------------------------------------
Name: SWEP:Precache()
Desc: Use this function to precache stuff.
---------------------------------------------------------*/
function SWEP:Precache()
util.PrecacheSound("weapons/c4/c4_disarm.wav")
util.PrecacheSound("weapons/c4/c4_explode1.wav")
util.PrecacheSound("weapons/c4/c4_click.wav")
util.PrecacheSound("weapons/c4/c4_plant.wav")
util.PrecacheSound("weapons/c4/c4_beep1.wav")
end
/*---------------------------------------------------------
Name: SWEP:PrimaryAttack()
Desc: +attack1 has been pressed.
---------------------------------------------------------*/
function SWEP:PrimaryAttack()
if (not self:CanPrimaryAttack()) then return end
local tr = {}
tr.start = self.Owner:GetShootPos()
tr.endpos = self.Owner:GetShootPos() + 100 * self.Owner:GetAimVector()
tr.filter = {self.Owner}
local trace = util.TraceLine(tr)
if not trace.Hit then return end
self.Weapon:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
self.Weapon:SetNextSecondaryFire(CurTime() + self.Primary.Delay)
self.Weapon:SendWeaponAnim(ACT_VM_PRIMARYATTACK)
timer.Simple(3, function()
if (not self.Owner:Alive() or self.Weapon:GetOwner():GetActiveWeapon():GetClass() ~= "weapon_mad_c4" or not IsFirstTimePredicted()) then return end
self.Weapon:SendWeaponAnim(ACT_VM_SECONDARYATTACK)
local tr = {}
tr.start = self.Owner:GetShootPos()
tr.endpos = self.Owner:GetShootPos() + 100 * self.Owner:GetAimVector()
tr.filter = {self.Owner}
local trace = util.TraceLine(tr)
if not trace.Hit then
timer.Simple(0.6, function()
if self.Owner:GetAmmoCount(self.Primary.Ammo) > 0 then
self.Weapon:SendWeaponAnim(ACT_VM_DRAW)
else
self.Weapon:Remove()
self.Owner:ConCommand("lastinv")
end
end)
return
end
self.Owner:SetAnimation(PLAYER_ATTACK1)
self:TakePrimaryAmmo(1)
if (CLIENT) then return end
C4 = ents.Create("ent_mad_c4")
C4:SetPos(trace.HitPos + trace.HitNormal)
trace.HitNormal.z = -trace.HitNormal.z
C4:SetAngles(trace.HitNormal:Angle() - Angle(90, 180))
C4.Owner = self.Owner
C4:SetNWFloat("Timer", self.Timer)
C4:Spawn()
self:CSShootBullet()
if trace.Entity and trace.Entity:IsValid() and not self.Blacklist[trace.Entity:GetClass()] then
if not trace.Entity:IsNPC() and not trace.Entity:IsPlayer() and trace.Entity:GetPhysicsObject():IsValid() then
constraint.Weld(C4, trace.Entity)
end
else
C4:SetMoveType(MOVETYPE_NONE)
end
timer.Simple(0.6, function()
if (not self.Owner:Alive() or self.Weapon:GetOwner():GetActiveWeapon():GetClass() ~= "weapon_mad_c4") or not IsFirstTimePredicted() then return end
if self.Owner:GetAmmoCount(self.Primary.Ammo) > 0 then
self.Weapon:SendWeaponAnim(ACT_VM_DRAW)
else
self.Weapon:Remove()
self.Owner:ConCommand("lastinv")
end
end)
end)
end
/*---------------------------------------------------------
Name: SWEP:SecondaryAttack()
Desc: +attack2 has been pressed.
---------------------------------------------------------*/
function SWEP:SecondaryAttack()
self.Weapon:SetNextPrimaryFire(CurTime() + 0.1)
self.Weapon:SetNextSecondaryFire(CurTime() + 0.1)
if self.Timer == 30 then
if (SERVER) then
self.Owner:PrintMessage(HUD_PRINTTALK, "60 Seconds.")
end
self.Timer = 60
self.Owner:EmitSound("C4.PlantSound")
elseif self.Timer == 60 then
if (SERVER) then
self.Owner:PrintMessage(HUD_PRINTTALK, "120 Seconds.")
end
self.Timer = 120
self.Owner:EmitSound("C4.PlantSound")
elseif self.Timer == 120 then
if (SERVER) then
self.Owner:PrintMessage(HUD_PRINTTALK, "300 Seconds.")
end
self.Timer = 300
self.Owner:EmitSound("C4.PlantSound")
elseif self.Timer == 300 then
if (SERVER) then
self.Owner:PrintMessage(HUD_PRINTTALK, "30 Seconds.")
end
self.Timer = 30
self.Owner:EmitSound("C4.PlantSound")
end
end
/*---------------------------------------------------------
Name: SWEP:CanPrimaryAttack()
Desc: Helper function for checking for no ammo.
---------------------------------------------------------*/
function SWEP:CanPrimaryAttack()
if (self.Owner:GetAmmoCount(self.Primary.Ammo) <= 0) or (self.Owner:WaterLevel() > 2) then
self.Weapon:SetNextPrimaryFire(CurTime() + 0.5)
return false
end
if (not self.Owner:IsNPC()) and (self.Owner:KeyDown(IN_SPEED)) then
self.Weapon:SetNextPrimaryFire(CurTime() + 0.5)
return false
end
return true
end
/*---------------------------------------------------------
Name: SWEP:Deploy()
Desc: Whip it out.
---------------------------------------------------------*/
function SWEP:Deploy()
if self.Weapon:GetNetworkedBool("Suppressor") then
self.Weapon:SendWeaponAnim(ACT_VM_DRAW_SILENCED)
else
self.Weapon:SendWeaponAnim(ACT_VM_DRAW)
end
self.Weapon:SetNextPrimaryFire(CurTime() + self.DeployDelay)
self.Weapon:SetNextSecondaryFire(CurTime() + self.DeployDelay)
self.ActionDelay = (CurTime() + self.DeployDelay)
// self:SetIronsights(false)
return true
end
/*---------------------------------------------------------
Name: SWEP:Holster()
---------------------------------------------------------*/
function SWEP:Holster()
if (CLIENT) and self.Ghost:IsValid() then
self.Ghost:SetColor(255, 255, 255, 0)
end
return true
end
/*---------------------------------------------------------
Name: SWEP:OnRemove()
Desc: Called just before entity is deleted.
---------------------------------------------------------*/
function SWEP:OnRemove()
if (CLIENT) and self.Ghost:IsValid() then
self.Ghost:SetColor(255, 255, 255, 0)
end
return true
end[/code]
target:unlock or some shit like that.
look at resources
(darkrp battering ram)
Taken from here : [url]http://www.garrysmod.org/downloads/?a=view&id=53546[/url]
[lua]if trace.Entity:GetClass() == "prop_door_rotating" then
trace.Entity:EmitSound(Sound("physics/wood/wood_box_impact_hard3.wav"))
trace.Entity:Fire("open", "", .001)
trace.Entity:Fire("unlock", "", .001)
local pos = trace.Entity:GetPos()
local ang = trace.Entity:GetAngles()
local model = trace.Entity:GetModel()
local skin = trace.Entity:GetSkin()
trace.Entity:SetNotSolid(true)
trace.Entity:SetNoDraw(true)
local function ResetDoor(door, fakedoor)
door:SetNotSolid(false)
door:SetNoDraw(false)
fakedoor:Remove()
end
local norm = (pos - self.Owner:GetPos()):Normalize()
local push = 1000000 * norm
local ent = ents.Create("prop_physics")
ent:SetPos(pos)
ent:SetAngles(ang)
ent:SetModel(model)
if(skin) then
ent:SetSkin(skin)
end
ent:Spawn()
timer.Simple(.01, ent.SetVelocity, ent, push)
timer.Simple(.01, ent:GetPhysicsObject().ApplyForceCenter, ent:GetPhysicsObject(), push)
timer.Simple(140, ResetDoor, trace.Entity, ent)
end[/lua]
When you want to do how a script achieves something, just read it.
Sorry, you need to Log In to post a reply to this thread.