Что нового

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

Instantly

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

Belfigor

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

Instantly

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,602
Репутация
941
Омфг, люди настолько обленились, что просто заюзать поиск или же пролистать форум на пару страниц назад уже видимо считается дурным тоном. Юзай поиск с запросами например "пишем бота" или же "работа с памятью"
 
Автор
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, а если и правильно, то что с этим дальше делать?
 
Верх