Сlient Network Stats

B365

Известный
Автор темы
30
15
Версия MoonLoader
.026-beta
Как получить информацию из статистики F5 (Client Network Stats / Netstats)? А именно: Download & Upload Rate, Packetloss, Process Memory.
 

B365

Известный
Автор темы
30
15
В библиотеке SAMP.lua есть событие "onServerStatisticsResponse". Часть события закомментирована в самом файле "events.lua" и не работает. Закомментированная часть ссылается на RakNetStatisticsStruct. В структуре RakNetStatisticsStruct есть информация о Client Network Stats. Как получить эту информацию если событие не работает?
 

Вложения

  • Сlient Network Stats.png
    Сlient Network Stats.png
    125.9 KB · Просмотры: 140

B365

Известный
Автор темы
30
15
В памяти через чит энжин эти значения не искал?
Конечно. Удается найти адрес, но не указатель. The value of the pointer needed to find this address is probably 150103AC - HEX при поиске дает 0 результатов. От троттлинга сети игру так-же крашит постоянно. Только собьещь количество результатов с тысяч до десятых как игру крашит.

Edit: Через ffi тоже результата нет.
RakNetStatisticsStruct + sampGetRakclientInterface()

Lua:
require "lib.moonloader"
require 'lib.sampfuncs'
local ffi = require "ffi"

ffi.cdef[[
    typedef unsigned RakNetTime;

    enum PacketPriority
    {
        SYSTEM_PRIORITY,
        HIGH_PRIORITY,
        MEDIUM_PRIORITY,
        LOW_PRIORITY,
        NUMBER_OF_PRIORITIES
    } PacketPriority;

    #pragma pack(push, 1)

    struct RakNetStatisticsStruct
    {
    unsigned messageSendBuffer[NUMBER_OF_PRIORITIES];
    unsigned messagesSent[NUMBER_OF_PRIORITIES];
    unsigned messageDataBitsSent[NUMBER_OF_PRIORITIES];
    unsigned messageTotalBitsSent[NUMBER_OF_PRIORITIES];
    unsigned packetsContainingOnlyAcknowlegements;
    unsigned acknowlegementsSent;
    unsigned acknowlegementsPending;
    unsigned acknowlegementBitsSent;
    unsigned packetsContainingOnlyAcknowlegementsAndResends;
    unsigned messageResends;
    unsigned messageDataBitsResent;
    unsigned messagesTotalBitsResent;
    unsigned messagesOnResendQueue;
    unsigned numberOfUnsplitMessages;
    unsigned numberOfSplitMessages;
    unsigned totalSplits;
    unsigned packetsSent;
    unsigned encryptionBitsSent;
    unsigned totalBitsSent;
    unsigned sequencedMessagesOutOfOrder;
    unsigned sequencedMessagesInOrder;
    unsigned orderedMessagesOutOfOrder;
    unsigned orderedMessagesInOrder;
    unsigned packetsReceived;
    unsigned packetsWithBadCRCReceived;
    unsigned bitsReceived;
    unsigned bitsWithBadCRCReceived;
    unsigned acknowlegementsReceived;
    unsigned duplicateAcknowlegementsReceived;
    unsigned messagesReceived;
    unsigned invalidMessagesReceived;
    unsigned duplicateMessagesReceived;
    unsigned messagesWaitingForReassembly;
    unsigned internalOutputQueueSize;
    double bitsPerSecond;
    RakNetTime connectionStartTime;
    }__attribute__ ((packed));

   #pragma pack(pop)
]]

function main()
    repeat wait(0) until isSampAvailable()
    local stats = ffi.cast('struct RakNetStatisticsStruct*', sampGetRakclientInterface())
    sampAddChatMessage(stats.messagesReceived, -1)
end

-- 0
 
Последнее редактирование:

хуега)

РП игрок
Модератор
2,570
2,272
Если тебе надо получать строки при открытом меню, то можешь использовать хук на отрисовку этой статистики (не всей, а только ее части):
Lua:
local ffi = require("ffi")
local hooks = require("hooks")



local originalCallCFontsDrawText



local function callCFontsDrawText(pFonts, pSprite, szText, ...)
    print(ffi.string(szText)) -- выведет каждую строку по отдельности
    return originalCallCFontsDrawText(pFonts, pSprite, szText, ...)
end



originalCallCFontsDrawText = hooks.call.new(
    "void(__thiscall*)(void *CFonts, int pSprite, const char *szText, char *, int, int, int, int color, int bShadow)",
    callCFontsDrawText, getModuleHandle("samp.dll") + 0x5D754 -- R1
)
Либо же нарпямую получать текст, для этого не обязательно нажимать F5 (но я не уверен, что он обновляется без открытия статистики)
Lua:
function getClientStatsText()
    local szText = ffi.cast("const char*", getModuleHandle("samp.dll") + 0x111CB8) -- R1
    return ffi.string(szText)
end


print(getClientStatsText())
Также думаю, можно и самому получать каждое значение, но это более запарно и мне пока лень
 
  • Нравится
Реакции: Dewize