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...

$Mr.R1ch$

Активный
Автор темы
164
30
А в чём твоя идея, еще раз?
Через битстрим как?
Идея пофиксить отображение пинга за разработчиков на мобилке, когда я писал на мунлоадере скрипт, то пинг обновлялся без каких либо проблем, а вот на мобилке нифига. А так или через битстрим, или через что то другое, что будет лучше работать

Идея пофиксить отображение пинга за разработчиков на мобилке, когда я писал на мунлоадере скрипт, то пинг обновлялся без каких либо проблем, а вот на мобилке нифига. А так или через битстрим, или через что то другое, что будет лучше работать
вот тема ещё которую я делал, там есть сравнение между ПК и мобайл - https://www.blast.hk/threads/208840/#post-1486558
 

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

-- в функцию main, в бесконечный цикл интегрируй:

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    while true do
        wait(0)
        sampSendScorePingUpdate() -- в общем, надо добавить вызов функции, и всё
    end
end

-- в imgui.draw или как там эта функция называется:

imgui.Text(u8'Пинг: ' .. sampGetPlayerPing(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))))
 

$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

-- в функцию main, в бесконечный цикл интегрируй:

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    while true do
        wait(0)
        sampSendScorePingUpdate() -- в общем, надо добавить вызов функции, и всё
    end
end

-- в imgui.draw или как там эта функция называется:

imgui.Text(u8'Пинг: ' .. sampGetPlayerPing(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))))
все равно таб не закрывается, но по производительности вроде лучше, желательно сделать так, чтобы таб закрылся мгновенно, иначе нельзя писать в чат и управлять камерой и тп
 
Последнее редактирование:

Vintik

Через тернии к звёздам
Проверенный
1,513
979
все равно таб не закрывается, но по производительности вроде лучше, желательно сделать так, чтобы таб закрылся мгновенно, иначе нельзя писать в чат и управлять камерой и тп
А кто таб открывает? Или он сам?
 

$Mr.R1ch$

Активный
Автор темы
164
30
Последнее редактирование:

Vintik

Через тернии к звёздам
Проверенный
1,513
979
да, только не каждую секунду а каждое обновление пинга

@Vintik
В том коде, что я тебе скинул, обновление пинга идёт каждую секунду.
Скажи когда открывается таб конкретно. Когда включено меню имгуи?
 

$Mr.R1ch$

Активный
Автор темы
164
30
В том коде, что я тебе скинул, обновление пинга идёт каждую секунду.
Скажи когда открывается таб конкретно. Когда включено меню имгуи?
Код я поставил вверх, тем самым нету зависимости, включен ли имгуи или нет, таб открывается не каждую секунду, а каждое обновление пинга, то есть как только в имгуи окне пинг с 50 станет 53, то сразу откроется таб

@Vintik
 
Последнее редактирование:

Vintik

Через тернии к звёздам
Проверенный
1,513
979
Понял.
Я сейчас не дома, я работаю, и поэтому вечером смогу протестировать и сказать тебе.
Пока что нет доступа к GTA.
Более того, никаких стандартных функций я не знаю, чтобы закрыть TAB, буду пробовать.
Постараюсь отписать как можно раньше.
 

$Mr.R1ch$

Активный
Автор темы
164
30
Понял.
Я сейчас не дома, я работаю, и поэтому вечером смогу протестировать и сказать тебе.
Пока что нет доступа к GTA.
Более того, никаких стандартных функций я не знаю, чтобы закрыть TAB, буду пробовать.
Постараюсь отписать как можно раньше.
хорошо, спасибо что помогаешь)