Открыть в фоне новый CEF-инвентарь Аризоны

KtotoTama

Новичок
Автор темы
7
0
Версия MoonLoader
.026-beta
Народ, как можно к примеру открыть в фоне новый инвентарь АРЗ, выполнить какое-либо действие (сервер проверяет открыт ли инвентарь) и после его закрыть без последствий?
{220, 0, 73, 64} - открыть инвентарь. Окей.
Если после этого заблокировать на время все входящие пакеты, то инвентарь визуально открываться не будет на клиенте.

Однако при последующих ручных открытиях в инвентаре не работает мышь. То есть, инвентарь открывается. но мышь по-прежнему управляет камерой в игре. В чём тут суть, кто-нибудь уже разгадал это? Попытка найти входящий пакет, который блокировать нельзя, результатом не увенчалась. Кроме {220, 17}, но тогда инвентарь будет визуально открываться.
 

Willy4ka

вилличка
Модератор
770
1,139
Народ, как можно к примеру открыть в фоне новый инвентарь АРЗ, выполнить какое-либо действие (сервер проверяет открыт ли инвентарь) и после его закрыть без последствий?
{220, 0, 73, 64} - открыть инвентарь. Окей.
Если после этого заблокировать на время все входящие пакеты, то инвентарь визуально открываться не будет на клиенте.

Однако при последующих ручных открытиях в инвентаре не работает мышь. То есть, инвентарь открывается. но мышь по-прежнему управляет камерой в игре. В чём тут суть, кто-нибудь уже разгадал это? Попытка найти входящий пакет, который блокировать нельзя, результатом не увенчалась. Кроме {220, 17}, но тогда инвентарь будет визуально открываться.
когда открывается инвентарь можно удалять его джава скриптом через функцию

Lua:
evalanon([[
const char = document.querySelector(".inventory__character-wrapper")
if (char) char.remove()
const main = document.querySelector(".inventory__main-inventory-wrapper")
if (main) main.remove()
const inv = document.querySelector(".inventory")
if (inv) inv.remove()
]])
Lua:
function evalanon(code)
    evalcef(("(() => {%s})()"):format(code))
end

function evalcef(code, encoded)
    encoded = encoded or 0
    local bs = raknetNewBitStream();
    raknetBitStreamWriteInt8(bs, 17);
    raknetBitStreamWriteInt32(bs, 0);
    raknetBitStreamWriteInt16(bs, #code);
    raknetBitStreamWriteInt8(bs, encoded);
    raknetBitStreamWriteString(bs, code);
    raknetEmulPacketReceiveBitStream(220, bs);
    raknetDeleteBitStream(bs);
end
 

Tema05

Известный
1,642
550
Народ, как можно к примеру открыть в фоне новый инвентарь АРЗ, выполнить какое-либо действие (сервер проверяет открыт ли инвентарь) и после его закрыть без последствий?
{220, 0, 73, 64} - открыть инвентарь. Окей.
Если после этого заблокировать на время все входящие пакеты, то инвентарь визуально открываться не будет на клиенте.

Однако при последующих ручных открытиях в инвентаре не работает мышь. То есть, инвентарь открывается. но мышь по-прежнему управляет камерой в игре. В чём тут суть, кто-нибудь уже разгадал это? Попытка найти входящий пакет, который блокировать нельзя, результатом не увенчалась. Кроме {220, 17}, но тогда инвентарь будет визуально открываться.
Может показаться, что это какая-то фигня. Но я сам сталкивался с этой проблемой когда делал скрипт открывающий инвентарь в фоне несколько раз в минуту на протяжении длительного времени. Это действительно хороший вопрос. Как я понял основная проблема именно в задержках. Если ты слишком быстро открываешь инвентарь ради 1 действия и закрываешь. В 99% случаев задержка перед закрытием решает проблему, но например у меня из-за частого использования через пару часов работы курсор всё равно ломается. Я написал себе dll-ку позволяющую видеть и нопать любые пакеты, которые нельзя заблочить из луа. Перепробовав различные варианты по итогу нашёл решение как полностью нопать открытие инвентаря без последствий для курсора. Но тут возникает множество коллизий с другими интерфейсами и системами сервера из-за которых всё может стать ещё хуже. По хорошему тут надо ревёрсить и конкретно изучать в каком месте трегиррится курсор и откуда это может вызываться. Иной вариант писать костыли, которые этот курсор будут каждый раз подрубать из луа.

Если у тебя простой функционал, который редко будет трогать инвентарь, поставь небольшие задержки и добавь эмуляцию отправки ответных пакетов на сервер, которые не отправляются если ты нопаешь входящие. Это мне помогло исключить баг с курсором при +- стерильных условиях. Если у тебя как у меня требуется дрочить инвентарь туда сюда по кд, то оно того наверное не стоит, рассмотри чтоб не прятать его или смирить с тем, что после работы скрипта придётся перезайти, дабы починить курсор.
 
  • Вау
Реакции: KtotoTama