Compare commits
15 Commits
v1.2.18
...
13aeceeedd
Author | SHA1 | Date | |
---|---|---|---|
13aeceeedd | |||
7b28cd0777 | |||
ec982d10c3 | |||
f3ec32384a | |||
07dca46c92 | |||
14645dbc90 | |||
6c7cdf34b9 | |||
23a8373230 | |||
14f8769d93 | |||
5080672f7a | |||
5790a3c020 | |||
e3c870eefd | |||
41b152ccf6 | |||
de63c4b2be | |||
8a6161a1e1 |
185
leaderboard.lua
185
leaderboard.lua
@ -12,6 +12,8 @@ local splits = {}
|
||||
local PATCH = nil
|
||||
local help = true
|
||||
local EncoreInitial = nil
|
||||
local cv_teamchange
|
||||
local scoreTable
|
||||
|
||||
-- Tracks if stats have been written or not
|
||||
local StatTrack = false
|
||||
@ -81,11 +83,24 @@ local cv_gui = CV_RegisterVar({
|
||||
PossibleValue = {Off = GUI_OFF, Splits = GUI_SPLITS, On = GUI_ON}
|
||||
})
|
||||
|
||||
local cv_afk = CV_RegisterVar({
|
||||
local AntiAFK = true
|
||||
CV_RegisterVar({
|
||||
name = "lb_afk",
|
||||
defaultvalue = 1,
|
||||
flags = CV_NETVAR,
|
||||
PossibleValue = CV_OnOff
|
||||
flags = CV_NETVAR | CV_CALL,
|
||||
PossibleValue = CV_OnOff,
|
||||
func = function(v)
|
||||
-- Set players afkTime and toggle AntiAFK
|
||||
if v.value then
|
||||
for p in players.iterate do
|
||||
p.afkTime = leveltime
|
||||
end
|
||||
|
||||
AntiAFK = true
|
||||
else
|
||||
AntiAFK = false
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local cv_enable = CV_RegisterVar({
|
||||
@ -239,7 +254,7 @@ if f then
|
||||
flags = tonumber(t[7])
|
||||
end
|
||||
|
||||
local scoreTable = getScoreTable(tonumber(t[1]), flags) or {}
|
||||
scoreTable = getScoreTable(tonumber(t[1]), flags) or {}
|
||||
|
||||
local spl = {}
|
||||
if t[6] != nil then
|
||||
@ -356,19 +371,37 @@ local function findMap(player, ...)
|
||||
return
|
||||
end
|
||||
|
||||
local hell = "\x85HELL"
|
||||
local tol = {
|
||||
[TOL_SP] = "\x81Race\x80", -- Nuked race maps
|
||||
[TOL_COOP] = "\x8D\Battle\x80", -- Nuked battle maps
|
||||
[TOL_RACE] = "\x88Race\x80",
|
||||
[TOL_MATCH] = "\x87\Battle\x80"
|
||||
}
|
||||
local lvltype, map
|
||||
|
||||
for i = 1, #mapheaderinfo do
|
||||
local map = mapheaderinfo[i]
|
||||
map = mapheaderinfo[i]
|
||||
if map == nil then
|
||||
continue
|
||||
end
|
||||
|
||||
if map.lvlttl:lower():find(search:lower()) then
|
||||
-- Only care for up to TOL_MATCH (0x10)
|
||||
lvltype = tol[map.typeoflevel & 0x1F] or map.typeoflevel
|
||||
|
||||
-- If not battle print numlaps
|
||||
lvltype = (map.typeoflevel & (TOL_MATCH | TOL_COOP) and lvltype) or string.format("%s \x82%-2d\x80", lvltype, map.numlaps)
|
||||
|
||||
CONS_Printf(
|
||||
player,
|
||||
string.format(
|
||||
"%s - %s",
|
||||
"%s %-9s %-25s - %s\t%s",
|
||||
G_BuildMapName(i),
|
||||
map.lvlttl
|
||||
lvltype,
|
||||
map.lvlttl,
|
||||
map.subttl,
|
||||
(map.menuflags & LF2_HIDEINMENU and hell) or ""
|
||||
)
|
||||
)
|
||||
end
|
||||
@ -380,8 +413,6 @@ local function mapNotExists(player, map)
|
||||
CONS_Printf(player, string.format("Map doesn't exist: %s", map:upper()))
|
||||
end
|
||||
|
||||
local ALPH = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
|
||||
local function changelevel(player, ...)
|
||||
if not doyoudare(player) then
|
||||
return
|
||||
@ -403,6 +434,8 @@ local function changelevel(player, ...)
|
||||
end
|
||||
|
||||
local mapnum = 0
|
||||
local A = string.byte("A")
|
||||
|
||||
if tonumber(p) != nil then
|
||||
-- Non extended map numbers
|
||||
if tonumber(q) == nil then
|
||||
@ -412,11 +445,12 @@ local function changelevel(player, ...)
|
||||
mapnum = tonumber(p) * 10 + tonumber(q)
|
||||
else
|
||||
--Extended map numbers
|
||||
p = ALPH:find(p) - 1
|
||||
p = string.byte(p) - A
|
||||
local qn = tonumber(q)
|
||||
if qn == nil then
|
||||
qn = ALPH:find(q) + 9
|
||||
qn = string.byte(q) - A + 10
|
||||
end
|
||||
|
||||
mapnum = 36 * p + qn + 100
|
||||
end
|
||||
|
||||
@ -425,6 +459,12 @@ local function changelevel(player, ...)
|
||||
return
|
||||
end
|
||||
|
||||
-- Verify valid race level
|
||||
if not (mapheaderinfo[mapnum].typeoflevel & (TOL_SP | TOL_RACE)) then
|
||||
CONS_Printf(player, "Battle maps are not supported")
|
||||
return
|
||||
end
|
||||
|
||||
nextMap = G_BuildMapName(mapnum)
|
||||
end
|
||||
COM_AddCommand("changelevel", changelevel)
|
||||
@ -660,7 +700,7 @@ function ticsToTime(tics, pure)
|
||||
|
||||
return string.format(
|
||||
"%d:%02d:%02d",
|
||||
G_TicsToMinutes(tics),
|
||||
G_TicsToMinutes(tics, true),
|
||||
G_TicsToSeconds(tics),
|
||||
G_TicsToCentiseconds(tics)
|
||||
)
|
||||
@ -907,9 +947,9 @@ local function drawScroll(v, player, scoreTable, gui)
|
||||
local x = 10
|
||||
if #scoreTable >= 10 then
|
||||
x = x + 8
|
||||
end
|
||||
if #scoreTable >= 100 then
|
||||
x = x + 8
|
||||
if #scoreTable >= 100 then
|
||||
x = x + 8
|
||||
end
|
||||
end
|
||||
|
||||
local y = FixedInt(scrollY)
|
||||
@ -960,8 +1000,6 @@ local function drawScoreboard(v, player)
|
||||
if player != displayplayers[0] then return end
|
||||
|
||||
cachePatches(v)
|
||||
|
||||
local scoreTable = getScoreTable(gamemap, Flags)
|
||||
|
||||
local gui = cv_gui.value
|
||||
if leveltime < START_TIME or player.exiting or player.lives == 0 then
|
||||
@ -1009,7 +1047,7 @@ end
|
||||
|
||||
-- Find location of player and scroll to it
|
||||
function scroll_to(player)
|
||||
local m = getScoreTable(gamemap, Flags) or {}
|
||||
local m = scoreTable or {}
|
||||
|
||||
scrollToPos = 2
|
||||
for pos, score in ipairs(m) do
|
||||
@ -1038,7 +1076,8 @@ local function writeStats()
|
||||
end
|
||||
|
||||
local function saveTime(player)
|
||||
local scoreTable = getScoreTable(gamemap, Flags) or {}
|
||||
|
||||
scoreTable = $ or {}
|
||||
|
||||
local pskin = skins[player.mo.skin]
|
||||
local newscore = score_t(
|
||||
@ -1138,35 +1177,39 @@ local function getGamer()
|
||||
end
|
||||
end
|
||||
|
||||
local function changeMap()
|
||||
COM_BufInsertText(server, "map " + nextMap + " -force -gametype race")
|
||||
nextMap = nil
|
||||
end
|
||||
|
||||
local function think()
|
||||
if nextMap then
|
||||
COM_BufInsertText(server, "map " + nextMap)
|
||||
nextMap = nil
|
||||
end
|
||||
if nextMap then changeMap() end
|
||||
|
||||
if disable then
|
||||
if cv_afk.value and ingame() > 1 then
|
||||
for p in players.iterate do
|
||||
if p.valid and not p.spectator and not p.exiting and p.lives > 0 then
|
||||
if p.cmd.buttons then
|
||||
p.afkTime = leveltime
|
||||
end
|
||||
if AntiAFK then
|
||||
if ingame() > 1 then
|
||||
for p in players.iterate do
|
||||
if p.valid and not p.spectator and not p.exiting and p.lives > 0 then
|
||||
if p.cmd.buttons then
|
||||
p.afkTime = leveltime
|
||||
end
|
||||
|
||||
--Away from kart
|
||||
if p.afkTime + AFK_BALANCE_WARN == leveltime then
|
||||
chatprintf(p, "[AFK] \x89You will be moved to spectator in 10 seconds!", false)
|
||||
S_StartSound(nil, 26, p)
|
||||
end
|
||||
if p.afkTime + AFK_BALANCE < leveltime then
|
||||
p.spectator = true
|
||||
chatprint("\x89" + p.name + " was moved to the other team for game balance", true)
|
||||
--Away from kart
|
||||
if p.afkTime + AFK_BALANCE_WARN == leveltime then
|
||||
chatprintf(p, "[AFK] \x89You will be moved to spectator in 10 seconds!", false)
|
||||
S_StartSound(nil, 26, p)
|
||||
end
|
||||
if p.afkTime + AFK_BALANCE < leveltime then
|
||||
p.spectator = true
|
||||
chatprint("\x89" + p.name + " was moved to the other team for game balance", true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
for p in players.iterate do
|
||||
if p.valid and not p.spectator then
|
||||
p.afkTime = leveltime
|
||||
else
|
||||
for p in players.iterate do
|
||||
if p.valid and not p.spectator then
|
||||
p.afkTime = leveltime
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1217,29 +1260,34 @@ local function think()
|
||||
end
|
||||
if clearcheats then
|
||||
clearcheats = false
|
||||
for p in players.iterate do
|
||||
p.SPBAKARTBIG = false
|
||||
p.SPBAjustice = false
|
||||
p.SPBAshutup = false
|
||||
for q in players.iterate do
|
||||
q.SPBAKARTBIG = false
|
||||
q.SPBAjustice = false
|
||||
q.SPBAshutup = false
|
||||
end
|
||||
end
|
||||
for p in players.iterate do
|
||||
if not p.spectator then
|
||||
if p.SPBAKARTBIG then
|
||||
Flags = $ | F_SPBBIG
|
||||
end
|
||||
if p.SPBAjustice then
|
||||
Flags = $ | F_SPBJUS
|
||||
end
|
||||
|
||||
if p then
|
||||
if p.SPBAKARTBIG then
|
||||
Flags = $ | F_SPBBIG
|
||||
end
|
||||
if p.SPBAjustice then
|
||||
Flags = $ | F_SPBJUS
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
if not (Flags & F_SPBATK) then
|
||||
hud.enable("freeplay")
|
||||
end
|
||||
end
|
||||
|
||||
local cv_teamchange = CV_FindVar("allowteamchange")
|
||||
scoreTable = getScoreTable(gamemap, Flags)
|
||||
|
||||
if not cv_teamchange then
|
||||
cv_teamchange = CV_FindVar("allowteamchange")
|
||||
end
|
||||
|
||||
if p then
|
||||
-- Scroll controller
|
||||
-- Spectators can't input buttons so let the gamer do it
|
||||
@ -1264,13 +1312,15 @@ local function think()
|
||||
p.afkTime = leveltime
|
||||
end
|
||||
|
||||
if leveltime > PREVENT_JOIN_TIME and p.afkTime + AFK_TIMEOUT > leveltime then
|
||||
if cv_teamchange.value then
|
||||
allowJoin(false)
|
||||
end
|
||||
elseif p.afkTime + AFK_TIMEOUT < leveltime then
|
||||
if not cv_teamchange.value then
|
||||
allowJoin(true)
|
||||
if not replayplayback then
|
||||
if leveltime > PREVENT_JOIN_TIME and p.afkTime + AFK_TIMEOUT > leveltime then
|
||||
if cv_teamchange.value then
|
||||
allowJoin(false)
|
||||
end
|
||||
elseif p.afkTime + AFK_TIMEOUT < leveltime then
|
||||
if not cv_teamchange.value then
|
||||
allowJoin(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1286,15 +1336,18 @@ end
|
||||
addHook("ThinkFrame", think)
|
||||
|
||||
local function interThink()
|
||||
if nextMap then
|
||||
COM_BufInsertText(server, "map " + nextMap)
|
||||
nextMap = nil
|
||||
if nextMap then changeMap() end
|
||||
|
||||
if not cv_teamchange then
|
||||
cv_teamchange = CV_FindVar("allowteamchange")
|
||||
end
|
||||
if not CV_FindVar("allowteamchange").value then
|
||||
|
||||
if not cv_teamchange.value then
|
||||
allowJoin(true)
|
||||
end
|
||||
end
|
||||
addHook("IntermissionThinker", interThink)
|
||||
addHook("VoteThinker", interThink)
|
||||
|
||||
-- Returns the values clamed between min, max
|
||||
function clamp(min_v, v, max_v)
|
||||
|
Reference in New Issue
Block a user