mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
Upload
This commit is contained in:
227
gamemodes/terrortown/entities/weapons/weapon_ttt_beacon.lua
Normal file
227
gamemodes/terrortown/entities/weapons/weapon_ttt_beacon.lua
Normal file
@@ -0,0 +1,227 @@
|
||||
--[[
|
||||
| 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
|
||||
Reference in New Issue
Block a user