Перейти к содержанию
Авторизация  
Razi

[Cheat Engine] Как считывать/записывать значение на 7/9 бит?

Рекомендуемые сообщения

Как считывать/записывать значения на 7/9 бит на языке Lua? Нужно считывать/записывать значение на 9 bit с помощью CEComboBox. Нужно считывать/записывать значение на 7 bit с Edit box.

В игре, каждая вещь (item) в списке вещей (item list) хранится в виде  значения word (2 байта) с количеством, выраженным как 7-битное значение, объединенное с индексом вещи (item's index), выраженное как 9-битное значение между диапазоном 0-320. В двоичном виде: QQQQQQQXXXXXXXXX Где X - индекс, а Q - количество.

Например: 55 Potion, 55 - это количество, Potion - это индекс вещи (item's index).

Изменено пользователем Razi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на луа не подскажу, но общий алгоритм примерно такой:

1. Взять старшую часть (QQQQQQQX), сдвинуть ее на бит вправо с дополнением нулями (нулем). Получится количество в байтовом эквиваленте
2. Занулить старшие 7 бит исходного числа, получится 2 байтный индекс айтема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не тестил, может не работать

-- "QQQQQQQXXXXXXXXX" двигаем 2-х байтовое значение вправо на 9, влево на 7  
local address = 0x00241B70
local value = readSmallInteger(address)
local firstParam = bShr(value, 9)
local secondParam = bShl(value, 7)
print("firstParam = ".. firstParam)
print("secondParam = ".. secondParam)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
13 часов назад, MasterGH сказал:

Не тестил, может не работать

Вправо на 9 - это понятно. А вот влево на 7 работать не будет, так как
XXXXXXXXX0000000 и 

0000000XXXXXXXXX - разные числа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Dark Byte на форуме подсказал:

считывать количество: (работает)

quantity=(wordvalue >> 9) & 0x7f

записывать количество: ( не работает)

wordvalue=(wordvalue & 0x1ff) | (quantity << 9)

 

считывать index: (работает)

index=wordvalue & 0x1ff

записывать index: ( не работает)

wordvalue=(wordvalue & 0xfe00) | index

 

Считывание количества и индекса работает, а запись количества и индекса не работает.

считывать индекс можно с кодом:

Спойлер

cacheTable_CEEditsiteminv = {}
for a = 1, 20 do
  cacheTable_CEEditsiteminv[a] = UDF1["CEComboBox"..a+183]
end

for x = 1, 20 do 
    local offset = x*2-2 
    cacheTable_CEEditsiteminv[x].ItemIndex = (bAnd(0xFFFF, readInteger(0x009E8ACC+offset))) & 0x1ff 
    if bAnd(0xFFFF, readInteger(0x009E8ACC+offset)) == 0xFFFF then 
    cacheTable_CEEditsiteminv[x].ItemIndex = 0x140 
    end 
end 

 

считывать количество можно с кодом:

Спойлер

cacheTable_CEEditsqtyinv = {}
for a = 1, 20 do
  cacheTable_CEEditsqtyinv[a] = UDF1["CEEdit"..a+299]
end

for x = 1, 20 do 
    local offset = x*2-2 
    cacheTable_CEEditsqtyinv[x].Text = (bAnd(0xFFFF, readInteger(0x009E8ACC+offset)) >> 9) & 0x7f 
end

 

 

Изменено пользователем Razi

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В данном топике никто не постил уже 4 месяца. Пости здесь только если твой вопрос точно совпадает с темой данного топика.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.