bitstream fix ping

$Mr.R1ch$

Активный
Автор темы
164
30
Версия MoonLoader
Другое
Пытаюсь пофиксить баг на мобайл сампе, суть бага в том, что некорректно обновляется пинг, а то есть если открыть таб, то только так он обновится, а я вывожу его в мимгуи окно и из за бага я не могу нормально мониторить свой пинг (ещё при заходе он сразу отображается на 0). Пытаюсь пофиксить через bitstream но, идёт сильная просадка ФПС и таб не закрывается когда обновляется пинг (проблемы в коде). Что тут не так?

Lua:
imgui.Text(u8'Пинг: '..sampGetPlayerPing(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))) 
do
    local lastUpdateSend = 0
    function sampSendScorePingUpdate()
        local now = os.clock()
        if now - lastUpdateSend <= 1.2 then return end
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
        lastUpdateSend = now
    end
end
do
    local sampGetPlayerPing_ = sampGetPlayerPing
    local sampGetPlayerScore_ = sampGetPlayerScore
    function sampGetPlayerPing(id)
        sampSendScorePingUpdate()
        return sampGetPlayerPing_(id)
    end
    function sampGetPlayerScore(id)
        sampSendScorePingUpdate()
        return sampGetPlayerScore_(id)
    end
end
Или может есть альтернативы по лучше?
 
  • Эм
Реакции: AnWu
Решение
закрыть таб на мобайле (который новым интерфейсом):

Lua:
function interfaceToggle(id, toggle)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, 62)
    raknetBitStreamWriteInt8(bs, id)
    raknetBitStreamWriteBool(bs, toggle)
    raknetEmulPacketReceiveBitStream(220, bs)
    raknetDeleteBitStream(bs)
end

function sampSendScorePingUpdate()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
        lastScoreUpdate = os.time()+2
end

local ev = require("lib.samp.events")
function ev.onUpdateScoresAndPings()
    if lastScoreUpdate ~= nil and os.time() < lastScoreUpdate then
        lua_thread.create(function()
            while os.time() < lastScoreUpdate do...

Vintik

Через тернии к звёздам
Проверенный
1,513
979
Смотри.
Вчера попытался — у меня почему-то пинг не обновлялся.
Времени мало лишнего дома, а ГТА у меня там — сегодня попробую тебе что-то дельное сказать.
Так могу предложить проверить вот такой код (не вставляй его никуда, отдельно):
Lua:
local last_ping_update = 0

function sampSendScorePingUpdate()
    if os.clock() - last_ping_update > 1 then
        last_ping_update = os.clock()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    lua_thread.create(function()
        while true do
            wait(1000)
            sampAddChatMessage('Твой пинг: ' .. tostring(sampGetPlayerPing(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))), -1)
        end
    end)
    while true do
        wait(0)
        sampSendScorePingUpdate() -- в общем, надо добавить вызов функции, и всё
    end
end
Он должен раз в секунду писать твой пинг в чат. Работает ли? Открывает ли таб?
 

$Mr.R1ch$

Активный
Автор темы
164
30
Смотри.
Вчера попытался — у меня почему-то пинг не обновлялся.
Времени мало лишнего дома, а ГТА у меня там — сегодня попробую тебе что-то дельное сказать.
Так могу предложить проверить вот такой код (не вставляй его никуда, отдельно):
Lua:
local last_ping_update = 0

function sampSendScorePingUpdate()
    if os.clock() - last_ping_update > 1 then
        last_ping_update = os.clock()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    lua_thread.create(function()
        while true do
            wait(1000)
            sampAddChatMessage('Твой пинг: ' .. tostring(sampGetPlayerPing(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))), -1)
        end
    end)
    while true do
        wait(0)
        sampSendScorePingUpdate() -- в общем, надо добавить вызов функции, и всё
    end
end
Он должен раз в секунду писать твой пинг в чат. Работает ли? Открывает ли таб?
Работает, пинг обновляется, но таб все равно открывается

Смотри.
Вчера попытался — у меня почему-то пинг не обновлялся.
Времени мало лишнего дома, а ГТА у меня там — сегодня попробую тебе что-то дельное сказать.
Так могу предложить проверить вот такой код (не вставляй его никуда, отдельно):
Lua:
local last_ping_update = 0

function sampSendScorePingUpdate()
    if os.clock() - last_ping_update > 1 then
        last_ping_update = os.clock()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
    end
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    lua_thread.create(function()
        while true do
            wait(1000)
            sampAddChatMessage('Твой пинг: ' .. tostring(sampGetPlayerPing(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))), -1)
        end
    end)
    while true do
        wait(0)
        sampSendScorePingUpdate() -- в общем, надо добавить вызов функции, и всё
    end
end
Он должен раз в секунду писать твой пинг в чат. Работает ли? Открывает ли таб?
самое важное то, что это как то можно пофиксить. Недавно я видел Arizona Tools (Admin Tools) сделанный разработчиками ПК версии на мобайл, и заметил кое что, когда находишься в слежке за игроком, то в панеле пинг обновляется без всяких проблем, (таб не открывается тоже), может попробую найти в исходнике эту функции, но я не знаю как их шляпу читать...

хорошо, спасибо что помогаешь)
@Vintik
 
Последнее редактирование:

Radare

Участник
10
59
закрыть таб на мобайле (который новым интерфейсом):

Lua:
function interfaceToggle(id, toggle)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, 62)
    raknetBitStreamWriteInt8(bs, id)
    raknetBitStreamWriteBool(bs, toggle)
    raknetEmulPacketReceiveBitStream(220, bs)
    raknetDeleteBitStream(bs)
end

function sampSendScorePingUpdate()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
        lastScoreUpdate = os.time()+2
end

local ev = require("lib.samp.events")
function ev.onUpdateScoresAndPings()
    if lastScoreUpdate ~= nil and os.time() < lastScoreUpdate then
        lua_thread.create(function()
            while os.time() < lastScoreUpdate do
                wait(0)
                interfaceToggle(56, false)
            end
        end)
    end
end

но лучше всего перехватить данные и вообще убрать эффект таба (только на наш запрос обновления)

Lua:
function sampSendScorePingUpdate()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
        needUpdateScores = true
end



local playerScoresAndPings = {}
local ev = require("lib.samp.events")
function ev.onUpdateScoresAndPings(data)
    if needUpdateScores then
        playerScoresAndPings = data
        needUpdateScores = false
        return false
    end
end



function sampGetPlayerPing(playerid)
    sampSendScorePingUpdate()
    if playerScoresAndPings[playerid] ~= nil and playerScoresAndPings[playerid].ping then return playerScoresAndPings[playerid].ping
    else return 0 end
end



function sampGetPlayerScore(playerid)
   sampSendScorePingUpdate()
    if playerScoresAndPings[playerid] ~= nil and playerScoresAndPings[playerid].score ~= nil then return playerScoresAndPings[playerid].score
    else return 0 end
end
 
  • Нравится
Реакции: $Mr.R1ch$

$Mr.R1ch$

Активный
Автор темы
164
30
закрыть таб на мобайле (который новым интерфейсом):

Lua:
function interfaceToggle(id, toggle)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt8(bs, 62)
    raknetBitStreamWriteInt8(bs, id)
    raknetBitStreamWriteBool(bs, toggle)
    raknetEmulPacketReceiveBitStream(220, bs)
    raknetDeleteBitStream(bs)
end

function sampSendScorePingUpdate()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
        lastScoreUpdate = os.time()+2
end

local ev = require("lib.samp.events")
function ev.onUpdateScoresAndPings()
    if lastScoreUpdate ~= nil and os.time() < lastScoreUpdate then
        lua_thread.create(function()
            while os.time() < lastScoreUpdate do
                wait(0)
                interfaceToggle(56, false)
            end
        end)
    end
end

но лучше всего перехватить данные и вообще убрать эффект таба (только на наш запрос обновления)

Lua:
function sampSendScorePingUpdate()
        local bs = raknetNewBitStream()
        raknetSendRpc(155, bs)
        raknetDeleteBitStream(bs)
        needUpdateScores = true
end



local playerScoresAndPings = {}
local ev = require("lib.samp.events")
function ev.onUpdateScoresAndPings(data)
    if needUpdateScores then
        playerScoresAndPings = data
        needUpdateScores = false
        return false
    end
end



function sampGetPlayerPing(playerid)
    sampSendScorePingUpdate()
    if playerScoresAndPings[playerid] ~= nil and playerScoresAndPings[playerid].ping then return playerScoresAndPings[playerid].ping
    else return 0 end
end



function sampGetPlayerScore(playerid)
   sampSendScorePingUpdate()
    if playerScoresAndPings[playerid] ~= nil and playerScoresAndPings[playerid].score ~= nil then return playerScoresAndPings[playerid].score
    else return 0 end
end
спасибо, работает! Правда таб не открывается, но это понятно почему