The madcow weapons are obviously a great pack to use for DarkRP, for the door charge it seems to not place the doors back. I was wondering what i could do to respawn the doors within 200 seconds?
[CODE]// Variables that are used on both client and server
SWEP.Base = "weapon_mad_base"
SWEP.ViewModelFlip = false
SWEP.ViewModel = "models/weapons/v_slam.mdl"
SWEP.WorldModel = "models/weapons/w_slam.mdl"
SWEP.HoldType = "slam"
SWEP.Spawnable = true
SWEP.AdminSpawnable = false
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.RunArmOffset = Vector (-0.5928, 0, 6.3399)
SWEP.RunArmAngle = Vector (-19.4462, -2.5193, 0)
/*---------------------------------------------------------
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()
// Holst/Deploy your fucking weapon
if (not self.Owner:IsNPC() and self.Owner:KeyDown(IN_USE)) then
bHolsted = !self.Weapon:GetDTBool(0)
self:SetHolsted(bHolsted)
self.Weapon:SetNextPrimaryFire(CurTime() + 0.3)
self.Weapon:SetNextSecondaryFire(CurTime() + 0.3)
self:SetIronsights(false)
return
end
/*
if self.Weapon:GetNWBool("Planted") then
self.Weapon:SendWeaponAnim(ACT_SLAM_DETONATOR_DETONATE)
self.Weapon:EmitSound("Streetwar.d3_c17_10b_mine_mode")
for k, ent in pairs(ents.GetAll()) do
if ent:GetClass() == "ent_mad_charge" and ent.Owner == self.Owner then
timer.Simple(1, function() ent:Explosion() ent:Remove() end)
self.Weapon:SendWeaponAnim(ACT_SLAM_DETONATOR_DETONATE)
end
end
self.Weapon:SetNextPrimaryFire(CurTime() + 2)
self.Weapon:SetNextSecondaryFire(CurTime() + 2)
self.Weapon:SetNWBool("Planted", false)
timer.Simple(0.5, function()
self.Weapon:SendWeaponAnim(ACT_SLAM_DETONATOR_HOLSTER)
end)
timer.Simple(1, function()
if self.Owner:GetAmmoCount(self.Primary.Ammo) > 0 then
self:Deploy()
else
self.Weapon:Remove()
self.Owner:ConCommand("lastinv")
end
end)
return
end
*/
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)
self.Weapon:SetNextPrimaryFire(CurTime() + 0.5)
self.Weapon:SetNextSecondaryFire(CurTime() + 0.5)
if not trace.Hit or trace.Entity:GetClass() ~= "prop_door_rotating" or trace.HitWorld then
if (SERVER) then
self.Owner:PrintMessage(HUD_PRINTTALK, "Explosive charge can only be installed on doors!")
end
return
end
self.Weapon:SetNextPrimaryFire(CurTime() + self.Primary.Delay)
self.Weapon:SetNextSecondaryFire(CurTime() + self.Primary.Delay)
self.Weapon:SendWeaponAnim(ACT_SLAM_TRIPMINE_ATTACH)
timer.Simple(0.5, function()
if (not self.Owner:Alive() or self.Weapon:GetOwner():GetActiveWeapon():GetClass() ~= "weapon_mad_charge" or not IsFirstTimePredicted()) then return end
self.Weapon:SendWeaponAnim(ACT_SLAM_TRIPMINE_ATTACH2)
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 or trace.Entity:GetClass() ~= "prop_door_rotating" or trace.HitWorld then
timer.Simple(0.6, function()
if self.Owner:GetAmmoCount(self.Primary.Ammo) > 0 then
self:Deploy()
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
Charge = ents.Create("ent_mad_charge")
Charge:SetPos(trace.HitPos + trace.HitNormal)
trace.HitNormal.z = -trace.HitNormal.z
Charge:SetAngles(trace.HitNormal:Angle() - Angle(270, 180, 180))
Charge.Owner = self.Owner
Charge:Spawn()
if trace.Entity and trace.Entity:IsValid() and trace.Entity:GetClass() == "prop_door_rotating" then
if not trace.Entity:IsNPC() and not trace.Entity:IsPlayer() and trace.Entity:GetPhysicsObject():IsValid() then
constraint.Weld(Charge, trace.Entity)
end
else
Charge:SetMoveType(MOVETYPE_NONE)
end
timer.Simple(0.6, function()
if (not self.Owner:Alive() or self.Weapon:GetOwner():GetActiveWeapon():GetClass() ~= "weapon_mad_charge") or not IsFirstTimePredicted() then return end
// self.Weapon:SetNWBool("Planted", true)
self:Deploy()
end)
end)
end
/*---------------------------------------------------------
Name: SWEP:SecondaryAttack()
Desc: +attack2 has been pressed.
---------------------------------------------------------*/
function SWEP:SecondaryAttack()
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:GetNWBool("Planted") then
// self.Weapon:SendWeaponAnim(ACT_SLAM_DETONATOR_DRAW)
// else
self.Weapon:SendWeaponAnim(ACT_SLAM_TRIPMINE_DRAW)
// end
self.Weapon:SetNextPrimaryFire(CurTime() + self.DeployDelay)
self.Weapon:SetNextSecondaryFire(CurTime() + self.DeployDelay)
self.ActionDelay = (CurTime() + self.DeployDelay)
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]
In the <madcowsaddondir>/lua/entities/ent_mad_charge/init.lua file:
Replace
[lua]
//local function ResetDoor(door, fakedoor)
//door:SetNotSolid(false)
//door:SetNoDraw(false)
//fakedoor:Remove()
//end
[/lua]
with
[lua]
local function ResetDoor(door, fakedoor)
door:SetNotSolid(false)
door:SetNoDraw(false)
fakedoor:Remove()
end
[/lua]
And not too far after that, replace the timers with
[lua]
timer.Simple(0.01, function()
ent:SetVelocity(push)
end)
timer.Simple(0.01, function()
ent:GetPhysicsObject():ApplyForceCenter(push)
end)
timer.Simple(25, function()
if not IsValid(v) or not IsValid(ent) then return end
ResetDoor(v, ent)
end)
[/lua]
[B]Update:[/B] There was a few typos in the above code. Should be fixed now.
Replace the 25 with the delay you want between explosion and respawn.
to reduce glitching of the door would it be alright to put ent:GetPhysicsObject():ApplyForceCenter([B]Pull[/B])
Sorry, you need to Log In to post a reply to this thread.