5 Commits

Author SHA1 Message Date
Not
adbdbb8c03 do not transmit on first frame 2023-10-17 20:31:23 +02:00
Not
e833227b64 fix possible values for lb_ghost_trans_prox 2023-10-13 22:27:24 +02:00
Not
ef620772d9 remove entries with invalid data 2023-10-13 22:19:08 +02:00
Not
46f787f543 parse some header values as numbers 2023-10-13 21:52:14 +02:00
Not
d0e3698ee4 answer command stream only once 2023-10-13 21:31:54 +02:00
2 changed files with 30 additions and 8 deletions

View File

@ -123,9 +123,16 @@ Ghosts = {
this:reset()
local headers = Index:getMap(gamemap, mapChecksum(gamemap))
local data
local ok, data
for _, header in ipairs(headers) do
data = Ghost.read(header, Ghost.tableReader)
ok, data = pcall(Ghost.read, header, Ghost.tableReader)
if not ok then
print(data)
print("\x85\ERROR:\x80 invalid ghost data, removing entry")
Index:remove(header)
Index:write()
continue
end
this:set(header, data)
end
end,
@ -197,7 +204,7 @@ CV_RegisterVar({
name = "lb_ghost_trans_prox",
defaultvalue = 150,
flags = CV_CALL,
PossibleValue = CV_NATURAL,
PossibleValue = CV_Natural,
func = function(cv)
transProximity = cv.value
end
@ -406,6 +413,10 @@ Server = {
transmitters = {},
callback = function(cmd, handle)
if handle.transmitters[cmd] then
return
end
local mapindex = Index:getMap(gamemap, mapChecksum(gamemap))
local header = assert(mapindex[tonumber(cmd)])
local data = Ghost.read(header, Ghost.stringReader)
@ -579,7 +590,7 @@ local function open(filename, mode, fn)
f:close()
if not ok then
err = string.format("%s\n(%s (%s))", err, filename, mode)
err = string.format("%s\n(\x82%s\x80 (%s))", err, filename, mode)
end
return ok, err
@ -602,6 +613,17 @@ Index = {
this:setMap(header.map, header.checksum, map)
end,
remove = function(this, header)
local map = this:getMap(header.map, header.checksum)
for i, h in ipairs(map) do
if h.player == header.player then
map[i] = nil
this:setMap(header.map, header.checksum, map)
return
end
end
end,
find = function(this, header)
local index = this:getMap(header.map, header.checksum)
for i, h in ipairs(index) do
@ -645,10 +667,10 @@ Index = {
map = c:next(),
checksum = c:next(),
player = c:next(),
time = c:next(),
flags = c:next(),
time = tonumber(c:next()),
flags = tonumber(c:next()),
skin = c:next(),
color = c:next()
color = tonumber(c:next())
}
end,

View File

@ -90,7 +90,7 @@ end
rawset(_G, "lb_transmitter", Transmitter)
addHook("ThinkFrame", function()
if not #transmitters then return end
if not (#transmitters and leveltime) then return end
local index = (leveltime % #transmitters) + 1
local transmitter = transmitters[index]