Что нового

[Мышь, клавиатура] Бот Perfect world нужна помощь

Instantly

Новичок
Сообщения
6
Репутация
0
Мне нужна помощь, надо написать скрипт, который олавливает значение хп в игре, и если оно равно нулю, делает несколько кликов игре, но проблема в том, что я соовсем не щарю в auto it можете помочь со скриптом? :-[
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 597
Репутация
938
Конечно, читай форум, тут все написано
 
Автор
I

Instantly

Новичок
Сообщения
6
Репутация
0
как сделать клик мышью я разобрался, а вот как сделать чтобы он влез в значение и работал только когда оно нулю равно?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 597
Репутация
938
Омфг, люди настолько обленились, что просто заюзать поиск или же пролистать форум на пару страниц назад уже видимо считается дурным тоном. Юзай поиск с запросами например "пишем бота" или же "работа с памятью"
 
Автор
I

Instantly

Новичок
Сообщения
6
Репутация
0
после некоторых разбирательств, у меня получился такой код
Код:
#include <nomadmemory.au3>
#include <GUIConstantsEx.au3>
#Include <Timers.au3>

 $AllodsProcessName = "Perfect World"

$ProcessID = WinGetProcess($AllodsProcessName,"")
SetPrivilege("SeDebugPrivilege", 1)
If $ProcessID = -1 Then
    MsgBox(4096, "ERROR", "Failed to detect MMO A1 running.")
    Exit
EndIf


$DllInformation = _MemoryOpen($ProcessID)
        If @Error Then
            MsgBox(4096, "ERROR", "Failed to open memory.")
            Exit
        EndIf


$BotVersion = "0.04"
Global  $GUITitle = "Search HP test" & $BotVersion
Global  $win_main, $mem_label1, $mem_label2 ,$mem_label1_1, $mem_label2_1

$i = "1"
TestGUI()

Func TestGUI()
    $win_main = GUICreate($GUITitle, 200, 200, -1, -1)

    $mem_label2_1 = GUICtrlCreateLabel('HP:', 15, 25, 150, 20)
    $mem_label2 = GUICtrlCreateLabel('11', 40, 25, 150, 20)



    GUISetState(@SW_SHOW)

    _Timer_SetTimer($win_main, 500, '_Update_mem')

    While 1
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    GUIDelete()
EndFunc

Func _Update_mem($hWnd, $Msg, $iIDTimer, $dwTime)
_CurrentHP()

GUICtrlSetData($mem_label2, StringFormat($HPdec))
EndFunc

Func _CurrentHP()
    $CurrentHP = (_MemoryRead(0x0A598ACC, $DllInformation, 'ptr'))
    If @Error Then
        MsgBox(4096, "ERROR", "Failed to read memory.")
        Exit
    EndIf
    Global $HPdec = dec(StringTrimLeft($CurrentHP, 2))
EndFunc

И в итоге получилось отследить значение моего текущего хп, но после перезапуска клиента значение поменялось на 0, а адрес памяти изменился с 0A598ACC на 0844620, подскажите что с этим делать, не искать же каждый раз адрес памяти в ручную :wacko:
 
Автор
I

Instantly

Новичок
Сообщения
6
Репутация
0
Блин, я нубас жесткий походу, делал по гайду, но ничего не вышло :':smile:
Итак, сначала нужно найти адрес интересующей величины
7D8B1B4
Теперь нужно поставить брейкпоинт на этот адрес
4524e6: mov [esi+0x46c], ecx
Вычтем из адреса интересующего нас значения, который мы нашли в самом начале
7d8ad48
A, затем переведём его в десятеричную систему счисления
131640648
И будем искать....
Возможно, мы найдём несколько адресов, содержащий такое число, но совсем не факт, что все эти адреса - адреса указателей.
Для этого придётся перезагрузить игру, затем вновь найти интересующее значение, из его адреса вычесть
A, перевести в десятеричную систему счисления, и отсеивать.

Еще раз ищем значение
8222074
Вычитаем
8221с08
переводим
136453128
отсеиваем
0450E350
для проверки перезапустим и прибавим к этому значению 46с, если покажет значение хп,
то найдено правильно
450e7bc
проверяем....
В итоге он такого значения даже не нашел, т.е я не знаю правильно ли я провел действия по вычислению brekpointa, а если и правильно, то что с этим дальше делать?
 
Верх