--[[ | 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/ --]] -- DISABLED: Beacons are meant to signal locations. In practice no one uses -- them. I'm leaving the weapon in in case I think of a way to make it useful, -- or if you want to experiment with it. Uncomment the two lines that say -- "DISABLED" above them (ie. the AddCSLuaFile and SWEP.CanBuy) and the weapon will -- appear in the detective's equipment menu. Do the same for the ttt_beacon -- entity to make it all work. --DISABLED --AddCSLuaFile() SWEP.HoldType = "normal" if CLIENT then SWEP.PrintName = "Beacon" SWEP.Slot = 6 SWEP.ViewModelFlip = false SWEP.ViewModelFOV = 10 SWEP.EquipMenuData = { type="Weapon", model="models/props_lab/reciever01b.mdl", desc="Broadcasts a location to everyone.\n\nUse to warn or group innocents." }; SWEP.Icon = "vgui/ttt/icon_beacon" end SWEP.Base = "weapon_tttbase" SWEP.ViewModel = "models/weapons/v_crowbar.mdl" SWEP.WorldModel = "models/props_lab/reciever01b.mdl" SWEP.Primary.ClipSize = 3 SWEP.Primary.DefaultClip = 1 SWEP.Primary.Automatic = true SWEP.Primary.Ammo = "slam" SWEP.Primary.Delay = 1.0 SWEP.Secondary.ClipSize = -1 SWEP.Secondary.DefaultClip = -1 SWEP.Secondary.Automatic = true SWEP.Secondary.Ammo = "none" SWEP.Secondary.Delay = 1.0 SWEP.Kind = WEAPON_EQUIP -- DISABLED --SWEP.CanBuy = {ROLE_DETECTIVE} -- only detectives can buy SWEP.LimitedStock = true -- only buyable once SWEP.WeaponID = AMMO_BEACON SWEP.Spawnable = true SWEP.AllowDrop = false SWEP.NoSights = true function SWEP:OnDrop() self:Remove() end function SWEP:PrimaryAttack() self:SetNextPrimaryFire( CurTime() + self.Primary.Delay ) if self:CanPrimaryAttack() then self:BeaconDrop() end end function SWEP:SecondaryAttack() self:SetNextSecondaryFire( CurTime() + self.Secondary.Delay ) if self:CanPrimaryAttack() then self:BeaconStick() end end local throwsound = Sound( "Weapon_SLAM.SatchelThrow" ) -- might be able to move this drop/stick stuff into something more general now -- that a number of weapons use it function SWEP:BeaconDrop() if SERVER then local ply = self:GetOwner() if not IsValid(ply) then return end if self.Planted then return end local vsrc = ply:GetShootPos() local vang = ply:GetAimVector() local vvel = ply:GetVelocity() local vthrow = vvel + vang * 200 local beacon = ents.Create("ttt_beacon") if IsValid(beacon) then beacon:SetPos(vsrc + vang * 10) beacon:SetOwner(ply) beacon:Spawn() beacon:PointAtEntity(ply) local ang = beacon:GetAngles() ang:RotateAroundAxis(ang:Right(), 90) beacon:SetAngles(ang) beacon:PhysWake() local phys = beacon:GetPhysicsObject() if IsValid(phys) then phys:SetVelocity(vthrow) end self:PlacedBeacon() end end self:EmitSound(throwsound) end function SWEP:BeaconStick() if SERVER then local ply = self:GetOwner() if not IsValid(ply) then return end if self.Planted then return end local ignore = {ply, self} local spos = ply:GetShootPos() local epos = spos + ply:GetAimVector() * 80 local tr = util.TraceLine({start=spos, endpos=epos, filter=ignore, mask=MASK_SOLID}) if tr.HitWorld then local beacon = ents.Create("ttt_beacon") if IsValid(beacon) then beacon:PointAtEntity(ply) local tr_ent = util.TraceEntity({start=spos, endpos=epos, filter=ignore, mask=MASK_SOLID}, beacon) if tr_ent.HitWorld then local ang = tr_ent.HitNormal:Angle() --ang:RotateAroundAxis(ang:Right(), -90) --ang:RotateAroundAxis(ang:Up(), -180) --ang:RotateAroundAxis(ang:Forward(), 90) beacon:SetPos(tr_ent.HitPos + ang:Forward() * 2.5) beacon:SetAngles(ang) beacon:SetOwner(ply) beacon:Spawn() local phys = beacon:GetPhysicsObject() if IsValid(phys) then phys:EnableMotion(false) end beacon.IsOnWall = true self:PlacedBeacon() end end end end end function SWEP:PlacedBeacon() self:TakePrimaryAmmo(1) if not self:CanPrimaryAttack() then self:Remove() self.Planted = true end end function SWEP:PickupBeacon() if self:Clip1() >= self.Primary.ClipSize then return false else self:SetClip1(self:Clip1() + 1) return true end end -- Ammo hackery after getting bought function SWEP:WasBought(buyer) self:SetClip1(self:Clip1() + 2) end function SWEP:Reload() return false end function SWEP:OnRemove() if CLIENT and IsValid(self:GetOwner()) and self:GetOwner() == LocalPlayer() and self:GetOwner():IsTerror() then RunConsoleCommand("lastinv") end end if CLIENT then function SWEP:Initialize() self:AddHUDHelp("Click to place the beacon") return self.BaseClass.Initialize(self) end end function SWEP:Deploy() self:GetOwner():DrawViewModel(false) return true end function SWEP:DrawWorldModel() if not IsValid(self:GetOwner()) then self:DrawModel() end end function SWEP:DrawWorldModelTranslucent() end