Files
2021-12-03 01:19:31 +00:00

279 lines
7.5 KiB
Lua

Queue = {}
Queue.Players = {}
Queue.PlayerInfo = {}
Queue.SortedKeys = {}
Queue.Messages = {}
debugg = true;
function getKeysSortedByValue(tbl, sortFunction)
local keys = {}
for key in pairs(tbl) do
table.insert(keys, key)
end
table.sort(keys, function(a, b)
return sortFunction(tbl[a], tbl[b])
end)
return keys
end
function Queue:IsWhitelisted(user)
local discordId = nil;
local license = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "discord:") then
discordId = string.gsub(id, "discord:", "")
--print("Found discord id: "..discordId)
end
if string.match(id, "license:") then
license = string.gsub(id, "license:", "")
end
end
local identifierDiscord = discordId;
if identifierDiscord then
local roles = exports.Badger_Discord_API:GetDiscordRoles(user);
if not (roles == false) then
for i = 1, #roles do
for roleID, list in pairs(Config.Rankings) do
if exports.Badger_Discord_API:CheckEqual(roles[i], roleID) then
return true;
end
end
end
end
end
return false;
end
queueIndex = 0;
function Queue:SetupPriority(user)
local discordId = nil;
local license = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "discord:") then
discordId = string.gsub(id, "discord:", "")
--print("Found discord id: "..discordId)
end
if string.match(id, "license:") then
license = string.gsub(id, "license:", "")
end
end
if license ~= nil then
-- Reset their account
Queue.Players[license] = nil;
local identifierDiscord = discordId;
queueIndex = queueIndex + 1;
theirPrios = {};
msgs = {};
if identifierDiscord and (Queue.Players[license] == nil) then
local roles = exports.Badger_Discord_API:GetDiscordRoles(user)
local lastRolePrio = 99999999999999999999;
local msg = nil;
if not (roles == false) then
for i = 1, #roles do
for roleID, list in pairs(Config.Rankings) do
local rolePrio = list[1];
if exports.Badger_Discord_API:CheckEqual(roles[i], roleID) then
-- Return the index back to the Client script
table.insert(theirPrios, rolePrio);
if lastRolePrio > tonumber(rolePrio) then
msg = list[2];
lastRolePrio = rolePrio;
end
end
end
end
else
Queue.Players[license] = tonumber(Config.Default_Prio) + queueIndex;;
Queue.Messages[license] = Config.Displays.Messages.MSG_CONNECTING;
end
if #theirPrios > 0 then
table.sort(theirPrios);
Queue.Players[license] = tonumber(theirPrios[1]) + queueIndex;
end
if msg ~= nil then
Queue.Messages[license] = msg;
end
elseif identifierDiscord == nil then
Queue.Players[license] = tonumber(Config.Default_Prio) + queueIndex;
Queue.Messages[license] = Config.Displays.Messages.MSG_CONNECTING;
end
if Queue.Players[license] == nil then
Queue.Players[license] = tonumber(Config.Default_Prio) + queueIndex;
end
if Queue.Messages[license] == nil then
Queue.Messages[license] = Config.Displays.Messages.MSG_CONNECTING;
end
local SortedKeys = getKeysSortedByValue(Queue.Players, function(a, b) return a < b end)
Queue.SortedKeys = SortedKeys;
local username = GetPlayerName(user);
Queue.PlayerInfo[license] = { username, Queue.Players[license] };
if debugg then
for identifier, data in pairs(Queue.PlayerInfo) do
print("[DEBUG] " .. tostring(data[1]) .. " has priority of: " .. tostring(data[2]) );
end
end
end -- License == nil, don't run
end
function GetMessage(user)
local discordId = nil;
local license = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "discord:") then
discordId = string.gsub(id, "discord:", "")
--print("Found discord id: "..discordId)
end
if string.match(id, "license:") then
license = string.gsub(id, "license:", "")
end
end
local msg = Config.Displays.Messages.MSG_CONNECTING;
if (Queue.Messages[license] ~= nil) then
return Queue.Messages[license];
else
return msg;
end
end
function Queue:IsSetUp(user)
local discordId = nil;
local license = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "discord:") then
discordId = string.gsub(id, "discord:", "")
--print("Found discord id: "..discordId)
end
if string.match(id, "license:") then
license = string.gsub(id, "license:", "")
end
end
if (Queue.Players[license] ~= nil) then
return true;
end
return false;
end
function Queue:CheckQueue(user, currentConnectors, slots)
local discordId = nil;
local license = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "discord:") then
discordId = string.gsub(id, "discord:", "")
--print("Found discord id: "..discordId)
end
if string.match(id, "license:") then
license = string.gsub(id, "license:", "")
end
end
if (tostring(Queue.SortedKeys[1]) == tostring(license) ) then
return true; -- They can login
end
-- Added 12/10/20
--[[]]--
local openSlots = (slots - GetNumPlayerIndices()) - currentConnectors;
local count = 1;
for k, v in pairs(Queue.SortedKeys) do
if Queue.SortedKeys[count] == license and count <= openSlots then
return true;
end
count = count + 1;
end
--[[]]--
-- End add
return false; -- Still waiting in queue, not next in line
end
function Queue:GetMax()
local cout = 0;
for identifier, prio in pairs(Queue.Players) do
cout = cout + 1;
end
return cout;
end
function Queue:GetQueueNum(user)
local discordId = nil;
local license = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "discord:") then
discordId = string.gsub(id, "discord:", "")
--print("Found discord id: "..discordId)
end
if string.match(id, "license:") then
license = string.gsub(id, "license:", "")
end
end
local cout = 1;
for i = 1, #Queue.SortedKeys do
local identifier = Queue.SortedKeys[i];
if identifier == license then
return cout;
end
cout = cout + 1;
end
return 1;
end
function Queue:PopLicense(license)
-- Pop them off the Queue
local tempQueue = {};
lic = license:gsub("license:", "");
--[[
for id, prio in pairs(Queue.Players) do
if tostring(id) ~= tostring(lic) then
tempQueue[id] = prio;
end
end
]]--
Queue.Messages[lic] = nil;
Queue.Players[lic] = nil;
--Queue.Players = tempQueue;
Queue.PlayerInfo[lic] = nil;
if debugg then
print("[DEBUG] " .. tostring(lic) .. " has been POPPED from QUEUE")
end
local SortedKeys = getKeysSortedByValue(Queue.Players, function(a, b) return a < b end)
Queue.SortedKeys = SortedKeys;
end
function Queue:Pop(user)
-- Pop them off the Queue
local lic = nil;
for _, id in ipairs(GetPlayerIdentifiers(user)) do
if string.match(id, "license:") then
lic = string.gsub(id, "license:", "")
end
end
local tempQueue = {};
--[[
for id, prio in pairs(Queue.Players) do
if tostring(id) ~= tostring(lic) then
tempQueue[id] = prio;
end
end
]]--
Queue.Messages[lic] = nil;
Queue.Players[lic] = nil;
--Queue.Players = tempQueue;
Queue.PlayerInfo[lic] = nil;
local SortedKeys = getKeysSortedByValue(Queue.Players, function(a, b) return a < b end)
Queue.SortedKeys = SortedKeys;
if debugg then
print("[DEBUG] " .. GetPlayerName(user) .. " has been POPPED from QUEUE")
end
if debugg then
for identifier, data in pairs(Queue.PlayerInfo) do
print("[DEBUG] " .. tostring(data[1]) .. " has priority of: " .. tostring(data[2]) );
end
end
end