mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
82 lines
2.3 KiB
Lua
82 lines
2.3 KiB
Lua
--[[
|
|
| 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/
|
|
--]]
|
|
|
|
-- Traitor radar functionality
|
|
|
|
|
|
-- should mirror client
|
|
local chargetime = 30
|
|
|
|
local math = math
|
|
|
|
local function RadarScan(ply, cmd, args)
|
|
if IsValid(ply) and ply:IsTerror() then
|
|
if ply:HasEquipmentItem(EQUIP_RADAR) then
|
|
|
|
if ply.radar_charge > CurTime() then
|
|
LANG.Msg(ply, "radar_charging")
|
|
return
|
|
end
|
|
|
|
ply.radar_charge = CurTime() + chargetime
|
|
|
|
local scan_ents = player.GetAll()
|
|
table.Add(scan_ents, ents.FindByClass("ttt_decoy"))
|
|
|
|
local targets = {}
|
|
for k, p in ipairs(scan_ents) do
|
|
if ply == p or (not IsValid(p)) then continue end
|
|
|
|
if p:IsPlayer() then
|
|
if not p:IsTerror() then continue end
|
|
if p:GetNWBool("disguised", false) and (not ply:IsTraitor()) then continue end
|
|
end
|
|
|
|
local pos = p:LocalToWorld(p:OBBCenter())
|
|
|
|
-- Round off, easier to send and inaccuracy does not matter
|
|
pos.x = math.Round(pos.x)
|
|
pos.y = math.Round(pos.y)
|
|
pos.z = math.Round(pos.z)
|
|
|
|
local role = p:IsPlayer() and p:GetRole() or -1
|
|
|
|
if not p:IsPlayer() then
|
|
-- Decoys appear as innocents for non-traitors
|
|
if not ply:IsTraitor() then
|
|
role = ROLE_INNOCENT
|
|
end
|
|
elseif role != ROLE_INNOCENT and role != ply:GetRole() then
|
|
-- Detectives/Traitors can see who has their role, but not who
|
|
-- has the opposite role.
|
|
role = ROLE_INNOCENT
|
|
end
|
|
|
|
table.insert(targets, {role=role, pos=pos})
|
|
end
|
|
|
|
net.Start("TTT_Radar")
|
|
net.WriteUInt(#targets, 8)
|
|
for k, tgt in ipairs(targets) do
|
|
net.WriteUInt(tgt.role, 2)
|
|
|
|
net.WriteInt(tgt.pos.x, 15)
|
|
net.WriteInt(tgt.pos.y, 15)
|
|
net.WriteInt(tgt.pos.z, 15)
|
|
end
|
|
net.Send(ply)
|
|
|
|
else
|
|
LANG.Msg(ply, "radar_not_owned")
|
|
end
|
|
end
|
|
end
|
|
concommand.Add("ttt_radar_scan", RadarScan)
|