mirror of
https://github.com/etlegacy/wolfadmin.git
synced 2024-12-01 16:41:06 +00:00
153 lines
4 KiB
Lua
153 lines
4 KiB
Lua
|
|
-- WolfAdmin module for Wolfenstein: Enemy Territory servers.
|
|
-- Copyright (C) 2015-2016 Timo 'Timothy' Smit
|
|
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
-- it under the terms of the GNU General Public License as published by
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
-- at your option any later version.
|
|
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
local teams = require "luascripts.wolfadmin.game.teams"
|
|
|
|
local bits = require "luascripts.wolfadmin.util.bits"
|
|
local constants = require "luascripts.wolfadmin.util.constants"
|
|
local events = require "luascripts.wolfadmin.util.events"
|
|
|
|
local fireteams = {}
|
|
|
|
fireteams.FT_ALPHA = 0
|
|
fireteams.FT_BRAVO = 1
|
|
fireteams.FT_CHARLIE = 2
|
|
fireteams.FT_DELTA = 3
|
|
fireteams.FT_ECHO = 4
|
|
fireteams.FT_FOXTROT = 5
|
|
|
|
fireteams.NUM_FIRETEAMS = 6
|
|
|
|
function fireteams.getId(fireteam)
|
|
return 893 + fireteam
|
|
end
|
|
|
|
function fireteams.isUsed(fireteamId)
|
|
if not fireteamId then
|
|
return nil
|
|
end
|
|
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
local id = tonumber(et.Info_ValueForKey(data, "id"))
|
|
|
|
return (id ~= -1)
|
|
end
|
|
|
|
function fireteams.isPrivate(fireteamId)
|
|
if not fireteamId or not fireteams.isUsed(fireteamId) then
|
|
return nil
|
|
end
|
|
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
local p = tonumber(et.Info_ValueForKey(data, "p"))
|
|
|
|
return (p == 1)
|
|
end
|
|
|
|
function fireteams.getName(fireteamId)
|
|
if not fireteamId or not fireteams.isUsed(fireteamId) then
|
|
return nil
|
|
end
|
|
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
local id = tonumber(et.Info_ValueForKey(data, "id"))
|
|
|
|
local name
|
|
|
|
if id == fireteams.FT_ALPHA then
|
|
name = "Alpha"
|
|
elseif id == fireteams.FT_BRAVO then
|
|
name = "Bravo"
|
|
elseif id == fireteams.FT_CHARLIE then
|
|
name = "Charlie"
|
|
elseif id == fireteams.FT_DELTA then
|
|
name = "Delta"
|
|
elseif id == fireteams.FT_ECHO then
|
|
name = "Echo"
|
|
elseif id == fireteams.FT_FOXTROT then
|
|
name = "Foxtrot"
|
|
end
|
|
|
|
return name
|
|
end
|
|
|
|
function fireteams.getLeader(fireteamId)
|
|
if not fireteamId or not fireteams.isUsed(fireteamId) then
|
|
return nil
|
|
end
|
|
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
local l = tonumber(et.Info_ValueForKey(data, "l"))
|
|
|
|
return l
|
|
end
|
|
|
|
function fireteams.getTeam(fireteamId)
|
|
if not fireteamId or not fireteams.isUsed(fireteamId) then
|
|
return nil
|
|
end
|
|
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
local l = tonumber(et.Info_ValueForKey(data, "l"))
|
|
local team = et.gentity_get(l, "sess.sessionTeam")
|
|
|
|
return team
|
|
end
|
|
|
|
function fireteams.getMembers(fireteamId)
|
|
if not fireteamId or not fireteams.isUsed(fireteamId) then
|
|
return nil
|
|
end
|
|
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
|
|
local members = {}
|
|
|
|
for i = 0, 15 do
|
|
local c = tonumber("0x0"..et.Info_ValueForKey(data, "c"):sub(16 - i, 16 - i))
|
|
|
|
for j = 0, 3 do
|
|
if bits.hasbit(c, 2^j) then
|
|
table.insert(members, (i * 4 + j))
|
|
end
|
|
end
|
|
end
|
|
|
|
return members
|
|
end
|
|
|
|
function fireteams.getPlayerFireteamId(clientId)
|
|
local hex = math.floor(clientId / 4)
|
|
local bit = clientId % 4
|
|
|
|
for i = 0, 11 do
|
|
local fireteamId = fireteams.getId(i)
|
|
|
|
if fireteams.isUsed(fireteamId) then -- please add a continue statement one day
|
|
local data = et.trap_GetConfigstring(fireteamId)
|
|
local c = tonumber("0x0"..et.Info_ValueForKey(data, "c"):sub(16 - hex, 16 - hex))
|
|
|
|
if bits.hasbit(c, 2^bit) then
|
|
return fireteamId
|
|
end
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
return fireteams
|