Lobber
Известный
- 178
- 57
Тот же вопрос. Все чего я добился с положением розыска, это рандомное шевеление в диапазоне всего экрана, но не конкретных коордитаткак это в клео провернуть?
Тот же вопрос. Все чего я добился с положением розыска, это рандомное шевеление в диапазоне всего экрана, но не конкретных коордитаткак это в клео провернуть?
Может быть @D3.Pheonix знает?как это в клео провернуть?
В клео тоже не силен, но подозреваю что нужно сделать так:Может быть @D3.Pheonix знает?
UPD
Короче, что я делал последние несколько часов, можете не повторять, это не имеет какого-либо смысла
Считывал float с дефолтного значения оси, затем:
Вычитал - краш (логично)
Прибавлял int 1 = рандомное положение/пропадание
Прибавлял float 1.0 = аналогично тому что выше
Использовал конструкции для смещения, особого результата не принесло
Конвертация int-float-int, во всех её проявлениях - рандомное положение
Прибавление 1.0 int = краш (логично)
Прибавление 0.1 в float = 3 раза - краш
Прибавление 0.1 через конструкцию смещения в виде HEX - работает, не вызывает крашей, рандомное положение
1 в INT, перевод в float, затем в HEX - рандомное положение
Ну и конечно же, пробовал запись 1, 2 и 4 размером во всех выше перечисленных вариациях, ни-че-го
Для себя сделал вывод что данная затея в слепую не имеет смысла, ждем знающих
0AC8
0A8C
записать нужное значение0AC8
0AC8: 1@ = allocate_memory_size 4
0A8C: write_memory 1@ size 4 value *здесь нужное значение* virtual_protect 0
0A8C: write_memory 5828231 size 4 value 1@ virtual_protect 1
В клео тоже не силен, но подозреваю что нужно сделать так:
выделить память опкодом0AC8
(Объявите переменную на глобальном уровне, чтобы постоянно можно было использовать ее)
Потом в эту память через опкод0A8C
записать нужное значение
и потом единожды записать в нужный адрес позиции худа этот самый указатель который вы выделили опкодом0AC8
UPD: Даже код накидал(первый раз в клео залез вообще :D)
CLEO:0AC8: 1@ = allocate_memory_size 4 0A8C: write_memory 1@ size 4 value *здесь нужное значение* virtual_protect 0 0A8C: write_memory 5828231 size 4 value 1@ virtual_protect 1
Подозреваю что придется переводить float в hex рукамиМысль здравая, и крашей действительно нет, как и рандомных пропаданий. Но увы, похоже что установить координаты таким методом не выйдет, ибо положение упирается в правый угол и никуда оттуда уходить не хочет
Подозреваю что придется переводить float в hex руками
Вот сайтик есть: https://gregstoll.dyndns.org/~gregstoll/floattohex/
И потом этот hex перевести в dec, и уже dec подставлять вместо *здесь нужное значение*
Попробуй
Еще забыл уточнить 5828231 менять на адрес элемента худа
После выделения памяти ее нужно освобождать через опкод:В клео тоже не силен, но подозреваю что нужно сделать так:
выделить память опкодом0AC8
(Объявите переменную на глобальном уровне, чтобы постоянно можно было использовать ее)
Потом в эту память через опкод0A8C
записать нужное значение
и потом единожды записать в нужный адрес позиции худа этот самый указатель который вы выделили опкодом0AC8
UPD: Даже код накидал(первый раз в клео залез вообще :D)
CLEO:0AC8: 1@ = allocate_memory_size 4 0A8C: write_memory 1@ size 4 value *здесь нужное значение* virtual_protect 0 0A8C: write_memory 5828231 size 4 value 1@ virtual_protect 1
0AC9: free_allocated_memory 0@
Разумеется, как же без этого. Конечно не исключен факт кривых рук с моей стороны, но пробежавшись по истории изменения клео везде протекция отключена. Ключевая цель - узнать как люди до этого узнавали координаты, через какие формулы/махинации с значениями. Я уверен что ошибка банальна, но пока не известна. Задал вопрос на форуме, откуда брал статью выше, жду реакциюПосле выделения памяти ее нужно освобождать через опкод:
Вы хоть протекцию с адресов снимаете?CLEO:0AC9: free_allocated_memory 0@
Протекцию в своем коде я выключал. Если освобождать после этого память, то игра крашнет, т.к. ты обращаешься уже не к своей памяти, поэтому ее надо делать глобальной, и при потребности менять.После выделения памяти ее нужно освобождать через опкод:
Вы хоть протекцию с адресов снимаете?CLEO:0AC9: free_allocated_memory 0@
:NONAME_358
0BE5: raknet 0@ = get_hook_param 1
if and
0@ == 200
15@ == 1
else_jump @NONAME_449
0BE5: raknet 1@ = get_hook_param 0
alloc 2@ 64
BitStream.ReadArray(1@, 2@, 64)
0C0D: struct 2@ offset 58 size 2 = 29@
BitStream.ResetWritePointer(1@)
BitStream.Write(1@, 2@, BS_TYPE_ARRAY, 64)
free 2@
Хукается пакет с ID == 200(DRIVER_SYNC)Объясните что тут происходит...CLEO::NONAME_358 0BE5: raknet 0@ = get_hook_param 1 if and 0@ == 200 15@ == 1 else_jump @NONAME_449 0BE5: raknet 1@ = get_hook_param 0 alloc 2@ 64 BitStream.ReadArray(1@, 2@, 64) 0C0D: struct 2@ offset 58 size 2 = 29@ BitStream.ResetWritePointer(1@) BitStream.Write(1@, 2@, BS_TYPE_ARRAY, 64) free 2@
Входящий, исходящий? И какое значение записываетсяХукается пакет с ID == 200(DRIVER_SYNC)
Потом считывается битстрим в структуру, и в структуре по оффсету 58(TrailerID) считывается 2 байта. И потом идет запись считанной структуры обратно в битстрим. Вроде так
Исходящий скорее всего. Из переменной 29 беретсяВходящий, исходящий? И какое значение записывается
Бро, я нашел метод! Спасибо за наводку, как только сделаю, скину сюда сурсПодозреваю что придется переводить float в hex руками
Вот сайтик есть: https://gregstoll.dyndns.org/~gregstoll/floattohex/
И потом этот hex перевести в dec, и уже dec подставлять вместо *здесь нужное значение*
Попробуй
Еще забыл уточнить 5828231 менять на адрес элемента худа
wait 2000 // нужно для инициализации памяти
:1
0A8D: 0@ = read_memory 0x58DD0F size 4 virtual_protect 0
03F0: enable_text_draw 1 //сделал для мониторинга состояния
045A: draw_text_1number 7.0 344.0 GXT 'NUMBER' number 0@
wait 0
if
0ADC: test_cheat "P"
else_jump @1
0AF0: 2@ = get_int_from_ini_file "cleo\wanted.pos.ini" section "coords" key "X"
0010: 2@ *= 32768 // Множитель - разница между значениями после перевода float в hex, затем hex в dec, в моем случае между 509 и 510
0006: 3@ = 1124073472 //Значение нулевого Х. Получено путем танцев с бубном
0A8E: 4@ = 3@ + 2@ //Прибавляем помноженное значение на нулевые коорды, получаем результат
0AC8: 1@ = allocate_memory_size 4
0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 //записываем значение в память твоим методом
0A8C: write_memory 0x58DD0F size 4 value 1@ virtual_protect 0 //получаем результат на экран
0AC9: free_allocated_memory 1@
//..................................................................................//
0AF0: 2@ = get_int_from_ini_file "cleo\wanted.pos.ini" section "coords" key "Y"
0010: 2@ *= 32768 // множитель
0006: 3@ = 1124073472 //Значение нулевого Y. Совпадает с Х. Видимо едино для структуры
0A8E: 4@ = 3@ + 2@ //добавление в память
0AC8: 1@ = allocate_memory_size 4
0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 // запись в память
0A8C: write_memory 0x58DFB3 size 4 value 1@ virtual_protect 0 //результат на экране
0AC9: free_allocated_memory 1@
jump @1