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