add commands for moving and checksumming records

This commit is contained in:
Not
2022-11-19 01:26:46 +01:00
parent cf74af8945
commit 57120e257a
3 changed files with 320 additions and 153 deletions

View File

@ -1,6 +1,28 @@
-- Leaderboards written by Not
-- Reusable
---------- Imported functions -------------
-- lb_common.lua
local ticsToTime = lb_TicsToTime
local zoneAct = lb_ZoneAct
local stat_t = lb_stat_t
local lbComp = lb_comp
local mapChecksum = lb_map_checksum
local score_t = lb_score_t
local mapnumFromExtended = lb_mapnum_from_extended
-- browser.lua
local InitBrowser = InitBrowser
local DrawBrowser = DrawBrowser
local BrowserController = BrowserController
-- lb_store.lua
local GetMapRecords = lb_get_map_records
local SaveRecord = lb_save_record
local MapList = lb_map_list
local MoveRecords = lb_move_records
--------------------------------------------
-- Holds the current maps records table including all modes
local MapRecords = {}
@ -85,25 +107,6 @@ local scroll_to
local allowJoin
-- Imported functions --
-- lb_common.lua
local ticsToTime = lb_TicsToTime
local zoneAct = lb_ZoneAct
local stat_t = lb_stat_t
local lbComp = lb_comp
local mapChecksum = lb_map_checksum
-- browser.lua
local InitBrowser = InitBrowser
local DrawBrowser = DrawBrowser
local BrowserController = BrowserController
-- lb_store.lua
local GetMapRecords = lb_get_map_records
local SaveRecord = lb_save_record
local MapList = lb_map_list
---------------
-- cvars
local cv_teamchange
@ -182,19 +185,6 @@ local cv_spb_separate = CV_RegisterVar({
end
})
local function score_t(map, name, skin, color, time, splits, flags, stat)
return {
["map"] = map,
["name"] = name,
["skin"] = skin,
["color"] = color,
["time"] = time,
["splits"] = splits,
["flags"] = flags,
["stat"] = stat
}
end
local MSK_SPEED = 0xF0
local MSK_WEIGHT = 0xF
@ -343,35 +333,6 @@ local function findMap(player, ...)
end
COM_AddCommand("findmap", findMap)
local function mapnumFromExtended(map)
local p, q = map:upper():match("MAP(%w)(%w)$", 1)
if not (p and q) then
return nil
end
local mapnum = 0
local A = string.byte("A")
if tonumber(p) != nil then
-- Non extended map numbers
if tonumber(q) == nil then
return nil
end
mapnum = tonumber(p) * 10 + tonumber(q)
else
--Extended map numbers
p = string.byte(p) - A
local qn = tonumber(q)
if qn == nil then
qn = string.byte(q) - A + 10
end
mapnum = 36 * p + qn + 100
end
return mapnum
end
local SPBModeSym = {
[F_SPBEXP] = "X",
[F_SPBBIG] = "B",
@ -683,6 +644,50 @@ local function findRival(player, ...)
end
COM_AddCommand("rival", findRival)
local function moveRecords(player, from_map, from_checksum, to_map, to_checksum)
if not(from_map and from_checksum and to_map) then
CONS_Printf(player, "Usage: lb_move_records <from_map> <from_checksum> <to_map> [<to_checksum>]")
CONS_Printf(
player,
string.format(
"Summary: Move records from one map to another.\n"..
"If no <to_checksum> is supplied then the checksum of the current loaded map %s is used.\n"..
"Hint: Use lb_known_maps to find checksums",
to_map or "<to_map>"
)
)
return
end
local from = {
["id"] = mapnumFromExtended(from_map),
["checksum"] = from_checksum
}
local to = {
["id"] = mapnumFromExtended(to_map),
}
to.checksum = to_checksum or mapChecksum(to.id)
if not to.checksum then
CONS_Printf(player, string.format("error: '%s' is missing; provide to_checksum to continue", to.id))
return
end
CONS_Printf(
player,
string.format(
"%d records have been moved from %s %s to %s %s",
MoveRecords(from, to, ST_SEP),
from_map, from.checksum,
to_map, to.checksum
)
)
CONS_Printf(player, "Please repack coldstore and restart the server for changes to take effect.")
end
COM_AddCommand("lb_move_records", moveRecords)
--DEBUGGING
--local function printTable(tb)
-- for mode, tbl in pairs(tb) do
@ -1192,12 +1197,12 @@ local function saveTime(player)
end
-- DEBUGGING
--local function saveLeaderboard(player, ...)
-- TimeFinished = tonumber(... or player.realtime)
-- splits = {1000, 2000, 3000}
-- saveTime(player)
--end
--COM_AddCommand("save", saveLeaderboard)
local function saveLeaderboard(player, ...)
TimeFinished = tonumber(... or player.realtime)
splits = {1000, 2000, 3000}
saveTime(player)
end
COM_AddCommand("save", saveLeaderboard)
local function regLap(player)
if player.laps > prevLap and TimeFinished == 0 then