Что нового

[Perfect World] Проблема в написании бота с использованием PWGTM и PWmp.

Glock

Новичок
Сообщения
4
Репутация
0
Сделал скрипт который тыкает мышей в окно клиента PW, и юзает горячие клавиши в сторонних программах, таких как PWGTM и PWmp (флайхак и валлхак)
Собственно проблема в неудобности использования сразу нескольких программ.
Хочу написать скрипт который их объединит, но исходников их нету, увы. Также столкнулся с проблемой таргета на НПС - не смог разобраться как работать с памятью. Мышкой кликает нормально, но если угол обзора изменить, то промахивается. необходимые оффсеты и базовые адреса предоставлю.
Код:
Opt("SendKeyDownDelay",1000) 
Opt("MouseClickDelay",1000)
WinActivate ("Element Client","") ;Активация окна PW
	While 1=1
		MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
		Sleep (1000)
		MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
		Sleep (2000)
		Send ("{NUMPAD6}")     ; Использую валлхак, перемещаемся ко второму НПС
		Sleep (4000)
		MouseClick ("left", 572, 420, 2) ;Клик на НПС, открытие диалога
		Sleep (1000)
		MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
		Sleep (1000)
		MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
		Sleep (4000)
		$var1 = PixelGetColor( 252, 517)
		If $var1 = 12505747 Then           ; проверка цвета в сообщении о получниие итема
			MouseClick ("right", 1028, 843) ; юзать итем
			Sleep (4000)
			$i = 1
			While $i <= 20
				Send ("{NUMPAD7}") ; валлхак, поднимаемся на нужную высоту
				Sleep (500)
				$i = $i + 1
			WEnd
			Send ("{F11}") ; используем флайхак
			Sleep (2000)
			MouseClick ("left", 652, 488) ;задаем направление полета
			MouseClick ("left", 652, 488) ;задаем направление полета
			Sleep (95000) ; ожидание пока долетит
			Send ("{s}") ; остановить полет
			Sleep (2000)
			Send ("{F11}") ; отключить флайхак
			Sleep (2000)
			Send ("{w}") ;упасть на потолок
			Sleep (2000)
			Send ("{NUMPAD9}") ;провалиться сквозь потолок
			Sleep (2000)
			Send ("{w}") 
			Sleep (2000)
			Send ("{w down}") ;добежать до НПС
			Sleep (2000)
			Send ("{w up}")
			MouseClick ("left", 665, 428, 2) ;Клик на НПС, открытие диалога
			Sleep (3000)
		Else
			MouseClick ("right", 1028, 843)  ; юзать итем
			Sleep (4000)
			$k = 1
			While $k <= 16
				Send ("{NUMPAD6}") ;использую валлхак, проходим через стену
				Sleep (500)
				$k = $k + 1
			Wend
			Send ("{a down}") ; перемещаемся к НПС
			Sleep (2800)
			Send ("{a up}")	
			MouseClick ("left", 1017, 504, 2) ;Клик на НПС, открытие диалога
			Sleep (3000)
			MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
			Sleep (1000)
			MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
			Sleep (1000)
			MouseClick ("left", 1026, 298) ; Клик на строчку с диалогом
			Sleep (6000)
			$var2 = PixelGetColor( 252, 517) ;проверка сообщения
			If $var2 = 12505747 Then
				MouseClick ("right", 1028, 843) ; юзать итем
				Sleep (4000)
				Send ("{NUMPAD2}")     ; перемещаемся к НПС
				Sleep (500)
				Send ("{NUMPAD2}")
				Sleep (500)
				Send ("{NUMPAD2}")
				Sleep (500)
				Send ("{NUMPAD2}")
				Sleep (500)
				Send ("{NUMPAD4}")
				Sleep (500)
				Send ("{NUMPAD4}")
				Sleep (500)
				Send ("{NUMPAD4}")
				Sleep (500)
				Send ("{NUMPAD4}")
				Sleep (500)
				Send ("{NUMPAD4}")
				Sleep (500)
				MouseClick ("left", 572, 420, 2)  ;Клик на НПС, открытие диалога
			Else
				MouseClick ("right", 1028, 843) ; юзать итем
				Sleep (4000)
				$i = 1
				While $i <= 20
					Send ("{NUMPAD7}")  ; валлхак, поднимаемся на нужную высоту

					Sleep (500)
					$i = $i + 1
				WEnd
				Send ("{F11}") ; используем флайхак
				Sleep (2000)
				MouseClick ("left", 652, 488) ;задаем направление полета
				MouseClick ("left", 652, 488)
				Sleep (92000) ;ожидание полета
				Send ("{s}")
				Sleep (1000) 
				Send ("{F11}") ; флайофф
				Sleep (1000)
				Send ("{w}")
				Sleep (1000)
				Send ("{NUMPAD9}")
				Sleep (2000)
				Send ("{w}")
				Sleep (4000)
			EndIf
		EndIf
	Wend
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
Re: [Автоматизация] Универсальный геобот, помощь в написании.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"[Автоматизация] Универсальный геобот, помощь в написании." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
Re: [Автоматизация] Проблема использования сторонних программ.

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"[Автоматизация] Проблема использования сторонних программ." - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.








Тема должна именоваться в соответствии не только с глобальными правилами, но и правилами раздела в котором вы ее пишите.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
Re: [Автоматизация] Проблема в написании бота для PW, с использованием PWGTM и PWmp.

http://autoit-script.ru/index.php/topic,6125.0.html
Я уже капсом название темы написал, там даже примеры приведены, не должно быть в скобках указано "Автоматизация" ибо тут весь раздел этому посвящен, в скобках должно быть указано полное оригинальное название игры!!!!




Добавлено:
Сообщение автоматически объединено:

А после правильно оформленных скобок можно написать вот это: Проблема в написании бота с использованием PWGTM и PWmp.
Тогда все будет чотко и кошерно. Даже я ни разу не играв в PW постараюсь как-нибудь помочь, хотя и не факт что смогу.
 
Автор
G

Glock

Новичок
Сообщения
4
Репутация
0
На жуке меня послали курить мануалы по инжекту, но увы в автоите с инжектом, как и с чтением памяти не разобрался... Куда копать?
Как я понял, необходимо реализовать следующие действия:
1. Подключиться к памяти игры
2. Считать необходимое значение (например, наличие НПС в области или положение перса в игре)
3. Отправить команду на выполнение действий с НПС или на перемещение.

Если использовать инжект непосредственно в память, то есть риск вылета игры. Можно ли делая проверку через память, отсылать действия без инжекта?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 596
Репутация
938
Возможно и можно, зависит от того проверяет ли игра что ей пишут в память. Например в той же Iris Online можно было в память записать угол поворота камеры и она бы повернулась в игре. Кстати в теме про Iris Online ты можешь посмотреть как там работают с памятью.
 

SUN-CHA

Новичок
Сообщения
8
Репутация
2
На жуке меня послали курить мануалы по инжекту
Правильно послали. Гугли на PW Development Framework, там всё что тебе нужно.

но исходников их нету, увы
Плохо ищешь. Исходников полно. Тебе на сайт немчуры. (elitepvpers)

з.ы.
По изучай исходники бота MHS.

з.ы.з.ы.

Для инжектов лучше подходит дэлфи и С++, но если терпения и времени нет - можно и на автоите. Изучай API и DLL
 
Автор
G

Glock

Новичок
Сообщения
4
Репутация
0
Покурил исходник MHS. Написан классно, хоть я половины не понял.
Код красивый, жаль комменты на английском с коим я не дружу.
Вообщем, если позволите, я буду тут писать реализацию, а вы меня поправите надеюсь, если не туда сверну.

Для начала определимся с переменными, какие потребуются для написанания, пусть они изначально станут глобальные(не уверен, насколько правильно).
Код:
Global $PosCharX, $PosCharY, $PosCharZ ; координаты чара в пространстве


Координаты чара должны считываться из памяти. Надо объявить переменные для адресов.
Код:
Global $AddrPosCharX, $AddrPosCharY, $AddrPosCharZ ; адреса для координат


Добавим переменные для указания боту с чем иметь дело.
Код:
Global $AppTitle, $AppProcessID ;имя приложения и номер процесса


Также нам нужно указать оффсет и базовый адрес.
Код:
Global $Offset, $BaseAddr ; Оффсет и базовый адрес


Следующие переменные будут указывать на нпс.
Код:
Global $npcID, $ItemID ;айди нпс, айди итема.
 

SUN-CHA

Новичок
Сообщения
8
Репутация
2
Хм, ну ты такими темпами будешь очень долго идти.
Я не зря тебя послал гуглить на PW Development Framework - там все базовые функции как то: автопуть, таргетинг, работа с инвентарём, уже давно описаны и причём с русскими комментами.
MHS используют как платформу для бота, так как писать всё с нуля - бессмысленно.

Ты извини, но мне кажется что ты рановато кинулся на написание бота. Я ни коем образом не хочу отвадить тебя от программирования на автоите. Если ты хочешь изучить язык - изучай примеры, решай задачи. Это ужасно нудно и не интересно, но только освоив их ты сможешь приступить к серьёзному программированию. Я так же как и ты кидался на более менее серьёзные проекты и не найдя поддержки забивал на программинг, каждый раз приходя к тому, что нужно набивать руку на более простых задачах.

Это всё моё ИМХО, я буду рад, если у тебя всё получится сразу и без гемора!

з.ы.
кстати в моде outgame боты :evil:
 
Автор
G

Glock

Новичок
Сообщения
4
Репутация
0
4SUN-CHA
Если я тебя правильно понял, то все что есть на PW Development Framework, используется с помощью Microsoft Visual C#, с которым я в принципе не знаком :(.

Подскажи, можно ли реализовать это как-то другим способом?
Нужда в следующем:
подняться в определенной точке через потолок, пролететь флаем, спуститься, взять квест, проверить какой итем получил, заюзать итем, и повторить снова.

Если есть какие-нибудь соображения на этот счет, буду благодарен.
Тыканье мышой наиболее простой способ, и неудобный, приходится координаты переписывать постоянно.
 
Верх