Помощь с цефом

tygodym

Участник
Автор темы
35
4
Версия MoonLoader
.027.0-preview
Здравствуйте, хочу поменять визуально для себя содержимое цеф интерфейса на аризоне. Взял за основу баланс бизнеса и его меню. Без понятия как заменить одно число на другое. если это конечно возможно. Прошу помощи
Пакет аризоны:
window.executeEvent('event.business.info.initializeBusinessInformation', `[{"id":159,"type":"tunning-shop-ls","title":"Авто-сервис LS","balance": 18155984, "opened":0,"stats":}]`);

Код: (Что пытался сделать):
function onReceivePacket(id, bs)
    if (id == 220) then
        raknetBitStreamIgnoreBits(bs, 8)
        local cefPacketID = raknetBitStreamReadInt8(bs)
        if cefPacketID == 17 then
            raknetBitStreamIgnoreBits(bs, 32)
            local length = raknetBitStreamReadInt16(bs)
            local encoded = raknetBitStreamReadInt8(bs)
            local cmd = (encoded ~= 0) and raknetBitStreamDecodeString(bs, length + encoded) or raknetBitStreamReadString(bs, length)
            local eventCall, dataCall = string.match(cmd, "window%.executeEvent%('([%w.]+)', (.*)%)")
            if eventCall == 'event.business.info.initializeBusinessInformation' then
                if dataCall:find('"balance":') then
                    -- ???
                end
            end
        end
    end
end
 
Решение
Без понятия как заменить одно число на другое. если это конечно возможно
как вариант, можно декодировать json из пакета (чтобы руками всё не перезаписывать), обновить нужное поле, заново собрать строчку и эмулировать входящий пакет с обновленными данными, оригинальный пакет просто проигнорировать

и на будущее, лучше использовать addEventHandler, чем объявлять функцию для событий

Lua:
function cef_emul(str)
  local bs = raknetNewBitStream()
  raknetBitStreamWriteInt8(bs, 17)
  raknetBitStreamWriteInt32(bs, 0)
  raknetBitStreamWriteInt16(bs, #str)
  raknetBitStreamWriteInt8(bs, 0)
  raknetBitStreamWriteString(bs, str)
  raknetEmulPacketReceiveBitStream(220, bs)
  raknetDeleteBitStream(bs)
end

addEventHandler("onReceivePacket"...

wojciech?

Известный
Проверенный
390
288
Без понятия как заменить одно число на другое. если это конечно возможно
как вариант, можно декодировать json из пакета (чтобы руками всё не перезаписывать), обновить нужное поле, заново собрать строчку и эмулировать входящий пакет с обновленными данными, оригинальный пакет просто проигнорировать

и на будущее, лучше использовать addEventHandler, чем объявлять функцию для событий

Lua:
function cef_emul(str)
  local bs = raknetNewBitStream()
  raknetBitStreamWriteInt8(bs, 17)
  raknetBitStreamWriteInt32(bs, 0)
  raknetBitStreamWriteInt16(bs, #str)
  raknetBitStreamWriteInt8(bs, 0)
  raknetBitStreamWriteString(bs, str)
  raknetEmulPacketReceiveBitStream(220, bs)
  raknetDeleteBitStream(bs)
end

addEventHandler("onReceivePacket", function(id, bs)
  if (id == 220) then
    raknetBitStreamIgnoreBits(bs, 8)
    local cefPacketID = raknetBitStreamReadInt8(bs)
    if cefPacketID == 17 then
      raknetBitStreamIgnoreBits(bs, 32)
      local length = raknetBitStreamReadInt16(bs)
      local encoded = raknetBitStreamReadInt8(bs)
      local cmd = (encoded ~= 0) and raknetBitStreamDecodeString(bs, length + encoded) or raknetBitStreamReadString(bs, length)
      local eventCall, dataCall = string.match(cmd, "window%.executeEvent%('([%w.]+)', `(.*)`%)")
      if eventCall == 'event.business.info.initializeBusinessInformation' then
        -- безопасно декодируем json
        local result, data = pcall(decodeJson, dataCall)
        if result then
           -- устанавливаем новый баланс
          data[1].balance = 777

           -- убираем табуляции и переносы строк из новый json строки
          local json = encodeJson(data):gsub("[\t\n]", "")

          -- эмулируем входящий пакет с обновленными данными
          cef_emul(("window.executeEvent(\'event.business.info.initializeBusinessInformation\', `%s`);"):format(json))

          -- игнорируем оригинальный пакет
          return false
        end
      end
    end
  end
end)
 
  • Нравится
Реакции: tygodym