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() this:reset()
local headers = Index:getMap(gamemap, mapChecksum(gamemap)) local headers = Index:getMap(gamemap, mapChecksum(gamemap))
local data local ok, data
for _, header in ipairs(headers) do 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) this:set(header, data)
end end
end, end,
@ -197,7 +204,7 @@ CV_RegisterVar({
name = "lb_ghost_trans_prox", name = "lb_ghost_trans_prox",
defaultvalue = 150, defaultvalue = 150,
flags = CV_CALL, flags = CV_CALL,
PossibleValue = CV_NATURAL, PossibleValue = CV_Natural,
func = function(cv) func = function(cv)
transProximity = cv.value transProximity = cv.value
end end
@ -406,6 +413,10 @@ Server = {
transmitters = {}, transmitters = {},
callback = function(cmd, handle) callback = function(cmd, handle)
if handle.transmitters[cmd] then
return
end
local mapindex = Index:getMap(gamemap, mapChecksum(gamemap)) local mapindex = Index:getMap(gamemap, mapChecksum(gamemap))
local header = assert(mapindex[tonumber(cmd)]) local header = assert(mapindex[tonumber(cmd)])
local data = Ghost.read(header, Ghost.stringReader) local data = Ghost.read(header, Ghost.stringReader)
@ -579,7 +590,7 @@ local function open(filename, mode, fn)
f:close() f:close()
if not ok then 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 end
return ok, err return ok, err
@ -602,6 +613,17 @@ Index = {
this:setMap(header.map, header.checksum, map) this:setMap(header.map, header.checksum, map)
end, 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) find = function(this, header)
local index = this:getMap(header.map, header.checksum) local index = this:getMap(header.map, header.checksum)
for i, h in ipairs(index) do for i, h in ipairs(index) do
@ -645,10 +667,10 @@ Index = {
map = c:next(), map = c:next(),
checksum = c:next(), checksum = c:next(),
player = c:next(), player = c:next(),
time = c:next(), time = tonumber(c:next()),
flags = c:next(), flags = tonumber(c:next()),
skin = c:next(), skin = c:next(),
color = c:next() color = tonumber(c:next())
} }
end, end,

View File

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