1. Post #1
    Apozen's Avatar
    June 2011
    137 Posts
    Is there a way to prevent crowbars from opening doors via lua?
    I'm annoyed all the time when players can just whack a door to make it open.

  2. Post #2
    InfernalCookie's Avatar
    December 2010
    700 Posts
    Not that I know of. All I know is that you can decompile it and change all the doors properties

  3. Post #3
    Apozen's Avatar
    June 2011
    137 Posts
    Ahh that really sucks :| I played on a server one time and the guy said "server restart attempting door fix"
    then he fixed the doors somehow.

  4. Post #4
    my_hat_stinks's Avatar
    April 2011
    267 Posts
    garrysmod\gamemodes\terrortown\entities\weapons\we apon_zm_improvised

    Edit in one or more of these areas:
    Line 60, return false or remove the function
    Line 83, return before it opens or remove the function
    Lines 182-184 and lines 210-212, remove these lines

    You'll probably want to remove lines 78-80, too, since it will be redundant
    Reply With Quote Edit / Delete Reply Windows 7 United Kingdom Show Events Lua Helper Lua Helper x 1 (list)

  5. Post #5
    Apozen's Avatar
    June 2011
    137 Posts
    Thanks, I'll mess around with that and return with feedback :)

  6. Post #6
    Apozen's Avatar
    June 2011
    137 Posts
    Tried that, but now you don't spawn with a crowbar at all :\
    
    if SERVER then
       AddCSLuaFile( "shared.lua" )
       
    end
    
    SWEP.HoldType			= "melee"
    
    if CLIENT then
       SWEP.PrintName			= "crowbar_name"
    
       SWEP.Slot				= 0
    
       SWEP.Icon = "VGUI/ttt/icon_cbar"   
       SWEP.ViewModelFOV = 54
    end
    
    SWEP.Base				= "weapon_tttbase"
    SWEP.ViewModel			= "models/weapons/v_crowbar.mdl"
    SWEP.WorldModel			= "models/weapons/w_crowbar.mdl"
    SWEP.Weight			= 5
    SWEP.DrawCrosshair		= false
    SWEP.ViewModelFlip		= false
    SWEP.Primary.Damage = 20
    SWEP.Primary.ClipSize		= -1
    SWEP.Primary.DefaultClip	= -1
    SWEP.Primary.Automatic		= true
    SWEP.Primary.Delay = 0.5
    SWEP.Primary.Ammo		= "none"
    SWEP.Secondary.ClipSize		= -1
    SWEP.Secondary.DefaultClip	= -1
    SWEP.Secondary.Automatic	= true
    SWEP.Secondary.Ammo		= "none"
    SWEP.Secondary.Delay = 5
    
    SWEP.Kind = WEAPON_MELEE
    SWEP.WeaponID = AMMO_CROWBAR
    
    SWEP.InLoadoutFor = {ROLE_INNOCENT, ROLE_TRAITOR, ROLE_DETECTIVE}
    
    SWEP.NoSights = true
    SWEP.IsSilent = true
    
    SWEP.AutoSpawnable = false
    
    SWEP.AllowDelete = false -- never removed for weapon reduction
    SWEP.AllowDrop = false
    
    local sound_single = Sound("Weapon_Crowbar.Single")
    local sound_open = Sound("DoorHandles.Unlocked3")
    
    if SERVER then
       CreateConVar("ttt_crowbar_unlocks", "1", FCVAR_ARCHIVE)
       CreateConVar("ttt_crowbar_pushforce", "395", FCVAR_NOTIFY)
    end
    
    -- 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
    
    
    
    -- will open door AND return what it did
       -- Get ready for some prototype-quality code, all ye who read this
       if SERVER and GetConVar("ttt_crowbar_unlocks"):GetBool() 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
                -- 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
          end
       end
    
       if self.Owner.LagCompensation then
          self.Owner:LagCompensation(false)
       end
    end
    
    function SWEP:SecondaryAttack()
       self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
       self.Weapon:SetNextSecondaryFire( CurTime() + 0.1 )
    
       local tr = self.Owner:GetEyeTrace(MASK_SHOT)
    
       if tr.Hit and ValidEntity(tr.Entity) and tr.Entity:IsPlayer() and (self.Owner:EyePos() - tr.HitPos):Length() < 100 then
          local ply = tr.Entity
    
          if SERVER and (not ply:IsFrozen()) then
             local pushvel = tr.Normal * GetConVar("ttt_crowbar_pushforce"):GetFloat()
    
             -- limit the upward force to prevent launching
             pushvel.z = math.Clamp(pushvel.z, 50, 100)
    
             ply:SetVelocity(ply:GetVelocity() + pushvel)
             self.Owner:SetAnimation( PLAYER_ATTACK1 )
    
             ply.was_pushed = {att=self.Owner, t=CurTime()} --, infl=self}
          end
    
          self.Weapon:EmitSound(sound_single)      
          self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
    
          self.Weapon:SetNextSecondaryFire( CurTime() + self.Secondary.Delay )
       end
    end
    
    function SWEP:GetClass()
    	return "weapon_zm_improvised"
    end
    
    function SWEP:OnDrop()
    	self:Remove()
    end
    

  7. Post #7
    "The superior man understands what is right; the inferior man understands what will sell"
    Chessnut's Avatar
    August 2011
    3,484 Posts
    CreateConVar("ttt_crowbar_unlocks", "1", FCVAR_ARCHIVE)
    

    I wonder.
    Reply With Quote Edit / Delete Reply Windows 7 United States Show Events Winner Winner x 2 (list)

  8. Post #8
    Apozen's Avatar
    June 2011
    137 Posts
    CreateConVar("ttt_crowbar_unlocks", "1", FCVAR_ARCHIVE)
    

    I wonder.
    LMAO let me try that.

    EDIT: Winner, I feel like a fool now.