• Re-spawning door(s)
    2 replies, posted
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.