Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Perfect World
You last visited: Today at 00:09

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Rus. server

Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.

Reply
 
Old 11/29/2009, 17:52   #706
 
elite*gold: 0
Join Date: May 2009
Posts: 66
Received Thanks: 6
наконецто сдвинулось дело...серьезно, вот чужой код могу подправить, а вот свой написать видно мозги пропил в молодости....спасибо Dwar (как ты там иероглифы смог прочитать чтобы зарегистрироваться?), щас буду ковыряться в исходниках, задавать вопросы, даже разрешаю мне рассказать о преимуществе троичной системы исчисления над двоичной в вычислительной технике, лишь бы отвечали на вопросы....
P.S а я тута сидел - - у вьетнамских товарищей...
P.P.S. короче грустно.. посидел, поковырялся... это тоже самое что по подшипнику представить себе облик машины... куски кода.. откуда они , куда их лепить, что за переменные ? там люди (да как и здесь) не дураки, по куску кода нихрена не поймешь, ни куда его вставить , ни откуда он....
Biga73 is offline  
Old 11/29/2009, 19:08   #707
 
silkytail's Avatar
 
elite*gold: 0
Join Date: Jun 2008
Posts: 142
Received Thanks: 13
прикольна, чуваки научились отсылать пакетики ручками
silkytail is offline  
Old 11/29/2009, 19:31   #708
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
Реализовал респ в ближайший город через щелк мышой. Работало стабильно .... пока несколько окон не запустил. И вот тут траблы. Хоть отсылаю мышу в нужное окно и отсчет координат мауса перевожу относительно окна, если открыто несколько окон, мыша жмет в первом попавшемся(. Подскажите плиз, есть ли возможность без мауса и инжекта(ну не силен я в нем)...(точней вообще никак в нем) активировать Ближайший город
Делаю так:
AutoItSetOption ( "MouseCoordMode", 0 )
WinActivate ( $APP_TITLE )
WinWaitActive($APP_TITLE)
Do
MouseClick("left", IniRead("MHS-Bot-PW-Custom.ini", "AutoResp", "PosDieMouseCoordX", "100"), IniRead("MHS-Bot-PW-Custom.ini", "AutoResp", "PosDieMouseCoordY", "5") )
sleep( IniRead("MHS-Bot-PW-Custom.ini", "AutoResp", "ZaderjkaAutoRespa", "10") * 1000 )
Until PersInfo("hp") > 0
AutoItSetOption ( "MouseCoordMode", 1 )

параметры в файле - запомненные коорды мауса на кнопке
Сам авторесп реализовал как движение по точкам. Может идея кому пригодится. В настройках бота сделал ввод координат по которым двигаться - подлетажем к точке - жмем кнопу - сохраняется в ини- файл и т.д. Сам респ - кнопа ближ город, пишем в таргет 0, летим по точкам, нр, пет.. . При таком способе валхак при ресе не требуется вообще
Novohyd is offline  
Old 11/29/2009, 19:51   #709
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
; В начале программы:
Global $mTP ; Тип (9 - питомец, 7 - NPS, 6 - моб)
Global $_mTP[2] ;
Global $OFS_mTP[7] ;
$OFS_mTP[1] = 8 ;
$OFS_mTP[2] = 36 ;
$OFS_mTP[3] = 24 ;
$OFS_mTP[4] = $i * 4 ;
$OFS_mTP[5] = 4 ;
$OFS_mTP[6] = 180 ;

; В циклах "FOR $I = ...." программы:
$OFS_mTP[4] = $I
$_mTP = _MemoryPointerRead($BASE, $PROCESS, $OFS_mTP)
$mTP = $_mTP[1]

Кто помудрее подскажет, как сие покомфортабельнее изложить, например: $mTP = ...... $I*4 ..... 180
origmas is offline  
Old 11/29/2009, 19:59   #710
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
По поводу Этого Вьетнамского исходника (чи Китайского) -
Граммотно конечно, но что-то они там дистанцию до моба вычисляют по векторам, ведь лежит значение дистанции в памяти ..
=> [BA] + 8 + 36 + 24 + (i * 4) + 4 + 608
Только ее потом скорректировать = Int($_mDIS[1] / 10.0)
origmas is offline  
Old 11/29/2009, 20:27   #711
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
а китайцы придумали, выходит они круче наших -
$X = int(_MemoryREAD((_MemoryREAD(_MemoryREAD($BASE, $PROCESS) + 32, $PROCESS)) + 60, $PROCESS, "float") / 10 + 401)
это полюбому убыстряет вычисления, а значит и скорость, которой так не хватает с применением AtoIt
origmas is offline  
Old 11/29/2009, 21:58   #712
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
По здравому размышлению получается "Революция" во всей кутерме с смещениями,
думаю что так будет грамотнее - не зря нам функцию _MemoryRead придумали ..

В начале проги Бота объявляем:
(это все будет читаться один единственный раз при запуске программы.)
Global $PROCESSID = WinGetProcess("Element Client")
Global $PROCESS = _MemoryOpen($PROCESSID)
Global $BASE = 9925052
Global $PERS = _MemoryREAD(_MemoryREAD($BASE, $PROCESS) + 32, $PROCESS) ; BASE + 32 - Начало области данных Перса

Global $HP ; Жизнь Перса
.....
Global $X ; Координата X
.....


и тогда - когда нам нужно будем читать:
$HP = _MemoryREAD($PERS + 1124, $PROCESS)
....
$X = int(_MemoryREAD($PERS + 60, $PROCESS, "float") / 10 + 401)
...

Может кто не согласен, но все что написал - проверил на 100% работает

Еще удобнее будет если в начале программы указать все смещения вида -
Global $_HP = $PERS + 1124
....
Global $_X = $PERS + 60
....

Тогда строка чтения какого-то параметра персонажа будет выглядеть -
$HP = _MemoryREAD($_HP, $PROCESS)
не надо делать спец функции типа GetHP() - это только увеличит время выполнения кода

..... Может я конечно и повторяю то что известно Вам, но думаю, что для многих - наш форум может показаться еще сложнее Китайского, если мы не будем граматно и по полочкам все расставлять.
origmas is offline  
Thanks
3 Users
Old 11/29/2009, 22:24   #713
 
sumikot's Avatar
 
elite*gold: 0
Join Date: Aug 2009
Posts: 70
Received Thanks: 18
Ну вот, хоть кто то перешел на МемориРеад. Кстати, это не революция - я давал кусок на точно таком же принципе. Экономия во времени хоть и не огромная, но при переборе тех же мобов заметная.
+1

Кстати, про полочки - неплохо кому нибудь завести собственную ветку и переносить в шапку все найденные решения. Я думал это сделать, но потом себя отговорил - сейчас мне нечего делать, вот и флужу, да ботом занимаюсь, а если будет некогда - я же это все заброшу... А как сейчас, то получается, что есть многие решения - но они разбросаны среди кучи спама и не у каждого есть время и желание все прочитать.
sumikot is offline  
Old 11/29/2009, 22:42   #714
 
elite*gold: 0
Join Date: Sep 2009
Posts: 9
Received Thanks: 1
dwar, а можно на рапиде без премиума?
То, что выложено . Или кто-нибудь перезалейте.
Skand is offline  
Old 11/29/2009, 22:51   #715
 
elite*gold: 0
Join Date: May 2009
Posts: 66
Received Thanks: 6
я категорически за ! отдельные работоспособные кусочки кода, написанные грамотными людьми с подробным объяснением ! и ведь из этого можно будет реально чтото собрать ! блочек с описанием таргет+перемещение к таргету когда хп таргета в ноль превратится, перемещение отдельно, флай отдельно, активация нпс с эмуляцией действий, клац и из этих кубиков сложил что угодно! плюс стандартизация переменных вобще внесут ясность в чтение любого кода. а еще выдернуть алгоритм поиска смещений из ntKid и реализовать его под поиск ВСЕХ переменных та то я пргнозирую что все ветки форума elitepvpers.com глохнут и все резко начинают учить русский язык
Biga73 is offline  
Old 11/29/2009, 22:55   #716
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Перебор данных Мобов в памяти - это одна из самых важных тем для приближения Бота к исскуственному Интилекту (для приближения ..) Об этом не раз писалось на форуме, признаться я сам немного и для себя почерпнул информации, нк на то он и Форум. .. Хотел-бы развернуть этот процесс и алгоритм в подробном коде на AtoIt, алгоритм все-равно остается алгоритмом и он будет работать на других языках программирования - все зависит от приемов его использования. Кто не согласен или может внести поправки - очень будет хорошо .. люди разберутся .. надо нам как-то Россию-Матушку от Kитaйцeв спасать ..))

Сейчас буду готовить статью с своими рабочими примерами (100% рабочие)
origmas is offline  
Old 11/29/2009, 23:26   #717
 
elite*gold: 0
Join Date: May 2009
Posts: 66
Received Thanks: 6
та что тут говорить, у меня сон как рукой убрало, наконец то разумный человек говорит разумные вещи - главное чтоб задор не пропал. Все в ожидании !
Biga73 is offline  
Old 11/29/2009, 23:36   #718
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Реализованный мной алгоритм определения самого подходящего Монстра ..
.. Сначала Бот заводите на место боя куда вы считаете нужным .
Включаете Сканирование,
после вывода информации об окружающей обстановке
запускаете Локатор. (уже не один раз как Сканер, а в цикле работы Бота для каждой атаки ..)
Далее хотябы MHS-совская процедура Боя .. (для пробы)
; МОНСТР ---------------------------------------------------------------------------
; [BA] + 8 + 36 + 24 + (i * 4) + 4 + (i = от 0 до 796)
Global $i = 0 ; для циклов сканирования ..
Global $mTP ; Тип (9 - питомец, 7 - NPS, 6 - моб)
Global $_mTP[2] ;
Global $OFS_mTP[7] ;
$OFS_mTP[1] = 8 ;
$OFS_mTP[2] = 36 ;
$OFS_mTP[3] = 24 ;
$OFS_mTP[4] = $i * 4 ;
$OFS_mTP[5] = 4 ;
$OFS_mTP[6] = 180 ;
Global $mID ; - ID номер
Global $_mID[2] ;
Global $OFS_mID[7] ;
$OFS_mID[1] = 8 ;
$OFS_mID[2] = 36 ;
$OFS_mID[3] = 24 ;
$OFS_mID[4] = $i * 4 ;
$OFS_mID[5] = 4 ;
$OFS_mID[6] = 284 ;
Global $mLEV ; - Уровень
Global $_mLEV[2] ;
Global $OFS_mLEV[7] ;
$OFS_mLEV[1] = 8 ;
$OFS_mLEV[2] = 36 ;
$OFS_mLEV[3] = 24 ;
$OFS_mLEV[4] = $i * 4 ;
$OFS_mLEV[5] = 4 ;
$OFS_mLEV[6] = 292 ;
Global $mF ; Занятость - если > 0 - Занят, если = 0 - Свободен
Global $_mF[2] ;
Global $OFS_mF[7] ;
$OFS_mF[1] = 8 ;
$OFS_mF[2] = 36 ;
$OFS_mF[3] = 24 ;
$OFS_mF[4] = $i * 4 ;
$OFS_mF[5] = 4 ;
$OFS_mF[6] = 708 ;
Global $mDIS ; Дисстанция до моба
Global $_mDIS[2] ;
Global $OFS_mDIS[7] ;
$OFS_mDIS[1] = 8 ;
$OFS_mDIS[2] = 36 ;
$OFS_mDIS[3] = 24 ;
$OFS_mDIS[4] = $i * 4 ;
$OFS_mDIS[5] = 4 ;
$OFS_mDIS[6] = 608 ;
Global $mZ ; - Z
Global $_mZ[2] ; DWORD
Global $OFS_mZ[7] ; OFFSET
$OFS_mZ[1] = 8 ;
$OFS_mZ[2] = 36 ;
$OFS_mZ[3] = 24 ;
$OFS_mZ[4] = $i * 4 ;
$OFS_mZ[5] = 4 ;
$OFS_mZ[6] = 64 ;
;-----------------------------------------------------------------------------------
Func Scaner()
$tp6=0 ; Монстров
$tp7=0 ; NPS
$tp9=0 ; Питомцев
For $I = 768 To 0 Step -1 ; цикл от 768 до 0 по одному
$OFS_mID[4] = $I * 4 ; читаем ID
$_mID = _MemoryPointerRead($BASE, $PROCESS, $OFS_mID)
$mID = Hex($_mID[1])
If $mID Then ; если кто-то найден в локации
$OFS_mTP[4] = $I * 4 ; читаем Тип
$_mTP = _MemoryPointerRead($BASE, $PROCESS, $OFS_mTP)
$mTP = $_mTP[1]
If $mTP == 6 Then
$tp6 = $tp6+1
EndIf
If $mTP == 7 Then
$tp7 = $tp7+1
EndIf
If $mTP == 9 Then
$tp9 = $tp9+1
EndIf
EndIf
Next
GUICtrlSetData($LAB_LOC1, "Вокруг: Монстров - "& $tp6 &" NPS - "& $tp7 &" Питомцев - "& $tp9)
SoundPlay("radar.wav", 0)
$dismin = 20 ; Наименьшее расстояние до цели ; на ск. единиц координат самый дальний монстр
For $I = $Imax To $Imin Step -1 ; цикл от 768 до 0
$OFS_mID[4] = $I * 4 ; читаем ID
$_mID = _MemoryPointerRead($BASE, $PROCESS, $OFS_mID)
$mID = Hex($_mID[1])
If $mID Then ; если кто-то найден в локации
$OFS_mTP[4] = $I * 4 ; читаем Тип
$_mTP = _MemoryPointerRead($BASE, $PROCESS, $OFS_mTP)
$mTP = $_mTP[1]
If $mTP == 6 Then ; если это Монстр
$OFS_mLEV[4] = $I * 4 ; читаем Уровень
$_mLEV = _MemoryPointerRead($BASE, $PROCESS, $OFS_mLEV)
$mLEV = $_mLEV[1]
IF $mLEV < $LEV And ($LEV - $mLEV) <= 14 Then ; если Монстр ниже по уровню Перса или подходит по настройкам Бота
$OFS_mZ[4] = $I * 4 ; читаем Z - координата
$_mZ = _MemoryPointerRead($BASE, $PROCESS, $OFS_mZ, "float")
$mZ = Int($_mZ[1] / 10.0)
IF Abs($mZ - $Z) < 4 Then ; если Монстр не выше или не ниже Перса на 4 пункта по оси Z (отселектирование воздушных мобов)
$OFS_mDIS[4] = $I * 4 ; читаем Дистанция
$_mDIS = _MemoryPointerRead($BASE, $PROCESS, $OFS_mDIS, "float") ; / 10
$mDIS = Int($_mDIS[1] / 10.0)
If $mDIS < $dismin Then ; если раст. до моба < запомненного и он на земле (для варианта без ПОЛЕТА !!!)
$Imin = $I - 20 ; устанавливаем диапазон списка целей в локации +/- 20 монстров
$Imax = $I + 20 ; .. можно всместо 20 поставить $dismin а ее указать в настройках как регион действий
if $Imin < 0 Then
$Imin = 1
EndIf
if $Imax > 768 Then
$Imax = 768
EndIf
ExitLoop
EndIf
EndIf
EndIf
EndIf
EndIf
Next
GUICtrlSetData($LAB_LOC2, "Диапазон целей : "& $Imin &" - "& $Imax)
EndFunc ;-------------------------------------------------------------------------------------------
Func Locator()
; Выбор монстра в локации
Do
$dismin = 20 ; Наименьшее расстояние до цели ; на ск. единиц координат самый дальний монстр можно указать в панели настроек Бота
$FI = 0
For $I = $Imax To $Imin Step -1 ; уже мгновенный цикл в диапазоне от $Imin - $Imax из функции Scaner()
$OFS_mID[4] = $I * 4 ; читаем ID
$_mID = _MemoryPointerRead($BASE, $PROCESS, $OFS_mID)
$mID = Hex($_mID[1])
If $mID Then ; если кто-то найден в локации
$OFS_mTP[4] = $I * 4 ; читаем Тип
$_mTP = _MemoryPointerRead($BASE, $PROCESS, $OFS_mTP)
$mTP = $_mTP[1]
If $mTP == 6 Then ; если это Монстр
$OFS_mLEV[4] = $I * 4 ; читаем Уровень
$_mLEV = _MemoryPointerRead($BASE, $PROCESS, $OFS_mLEV)
$mLEV = $_mLEV[1]
IF $mLEV < $LEV And ($LEV - $mLEV) <= 14 Then ; если Монстр ниже по уровню Перса или подходит по настройкам Бота
$OFS_mZ[4] = $I * 4 ; читаем Z - координату (для того чтоб не путать цели с воздушными)
$_mZ = _MemoryPointerRead($BASE, $PROCESS, $OFS_mZ, "float")
$mZ = Int($_mZ[1] / 10.0)
IF Abs($mZ - $Z) < 4 Then ; если Монстр не выше или не ниже Перса на 4 пункта по оси Z
$OFS_mDIS[4] = $I * 4 ; читаем Дистанцияю
$_mDIS = _MemoryPointerRead($BASE, $PROCESS, $OFS_mDIS, "float") ; / 10
$mDIS = Int($_mDIS[1] / 10.0)
If $mDIS < $dismin Then ; если раст. до моба < запомненного и он на земле (для варианта без ПОЛЕТА !!!)
$dismin = $mDIS ; перезапомнить меньшее растояние
$PRIORID = $mID ; перезапомнить ID моба
$FI = $I ; запомним номер моба в цикле или его место в памяти данных
;ConsoleWrite("mTP: " & $mTP & " mID: " & $mID & " mLEV: " & $mLEV & " mPOS: " & $mX & " " & $mY & " " & $mZ & " mDIS: " & $mDIS & @CRLF)
EndIf
EndIf
EndIf
EndIf
EndIf
Next
$OFS_mF[4] = $FI * 4 ; читаем Занятость моба
$_mF = _MemoryPointerRead($BASE, $PROCESS, $OFS_mF)
$mF = $_mF[1]
Until Not $mF ; выполнять цикл пока ближайший монстр будет никем не занят (если в настройках нет галочки - Помогать др. Игрокам)
_MemoryPointerWrite($BASE, $PROCESS, $OFS_AT, "0x" & $PRIORID) ; записать ID в адрес цели
$TARGET_STATE = _MemoryPointerRead($BASE, $PROCESS, $OFS_AT) ; прочитать состояние цели
; Цель найдена и она в Прицеле - далее подпрограмма атаки с применением умений
EndFunc
origmas is offline  
Thanks
3 Users
Old 11/29/2009, 23:41   #719
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Scaner() запускать один раз перед боем, Locator после каждого убиенного ..))

Желательно листинг читать с форматированием TAB - а то на форуме все в один столбик ..
origmas is offline  
Old 11/30/2009, 00:14   #720
 
elite*gold: 0
Join Date: Nov 2009
Posts: 96
Received Thanks: 31
Может кто-нить знает как наземные и воздушные цели отличать, а то если на бугре каком буш и с петом пчелой - пет полетит вверх Фонарики мочить ..)) но там можно регулировать Z высоту ..
origmas is offline  
Reply




All times are GMT +1. The time now is 00:11.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.