|
Получение списка квестов - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
28.02.2013, 00:02
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 11.12.2009
Сообщений: 83
Популярность: -270
Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
|
Получение списка квестов
добавлю в 1 пост что удалось разузнать и по мере появления информации буду обновлять.
получение списка ВЗЯТЫХ квестов на autoIT
|
Цитата: |
|
|
|
|
|
|
|
|
Local $pid = 7416 ; PID окна PW
local $process_information = _MemoryOpen($pid)
local $baseAddress = _MemoryRead ( $REAL_BASE_ADDRESS, $process_information)
local $structurePointer = _MemoryRead ($baseAddress + $BASE_OFFSET, $process_information)
local $playerPointer = _MemoryRead($structurePointer + $PLAYER_OFFSET, $process_information)
Local $qwestArray = _MemoryRead($playerPointer + $QUEST_ARRY_OFFSET, $process_information)
Local $qwestPointer = _MemoryRead($qwestArray + 0x8, $process_information)
For $i=0 to 100
Local $qwestID = _MemoryRead($qwestPointer + ($i*0x20 + 0x8) , $process_information, "word")
IniWrite("test.ini", "test", $i, $qwestID) ;пишу полученное в файл
Next |
|
|
|
|
|
Люди, кто подскажет как пользоваться массивом квестов и выципить список доступных, полученых, и тех, что пора сдавать)?
А то весь день гуглил, форум читал, но толкового по данному вопросу ничего не нашел, попался ток один пример и тот нерабочий
Или как вариант помогите перевести с AHK на AutoIT кусок кода вырваный с геобота)
|
Цитата: |
|
|
|
|
|
|
|
|
checkQuestPresent(questId, client)
{
global
;Get the process Id from the given client title
winget, pid, PID, %client%
;Get the process handle from the given client title
If ProcessHandle%PID% =
{
ProcessHandle%PID% := DllCall("OpenProcess", "int", 2035711, "char", 1, "UInt", PID, "UInt")
logThis("ProcessHandle: " . ProcessHandle%PID%, "main")
}
functionSize := 100
;Allocate memory to store the packet to be sent, and the method to call the send packet function
If returnAddress%PID% =
{
returnAddress%PID% := DllCall("VirtualAllocEx", "Uint", ProcessHandle%PID%, "Uint", 0, "Uint", 0x4, "Uint", 0x1000, "Uint", 0x40)
logThis("returnAddress: " . returnAddress%PID%, "main")
}
If functionAddress%PID% =
{
functionAddress%PID% := DllCall("VirtualAllocEx", "Uint", ProcessHandle%PID%, "Uint", 0, "Uint", functionSize, "Uint", 0x1000, "Uint", 0x40)
logThis("functionAddress: " . functionAddress%PID%, "main")
}
revHex(revReturnAddress, returnAddress%PID%)
revHex(revQuestId, questId)
revHex(revQuestFunctionAddress, questFunctionAddress)
revHex(revBaseAddress, realBaseAddress)
revHex(revQuestFunctionOffset, questFunctionOffset)
revHex(revPlayerOffSet, playerOffSet, 2)
;60 PUSHAD
;B8 80 45 66 00 MOV EAX, 00664580
;8B 0D 7C 65 98 00 MOV ECX, DWORD PTR [98657C]
;8B 49 1C MOV ECX, DWORD PTR [ECX+1C]
;8B 49 30 MOV ECX, DWORD PTR [ECX+34]
;8B 89 DC 0D MOV ECX, DWORD PTR [ECX+DDC]
;68 DD 06 PUSH 6DD
;FF D0 CALL NEAR EAX
;A3 32 54 76 98 MOV DWORD PTR [98765432], EAX
;61 POPAD
;C3 RET
func =
func = %func%60 ;PUSHAD
func = %func%B8%revQuestFunctionAddress% ;MOV EAX, questFunction
func = %func%8B0D%revBaseAddress% ;MOV ECX, DWORD PTR [baseAddress]
func = %func%8B491C ;MOV ECX, DWORD PTR [ECX+1C]
func = %func%8B49%revPlayerOffSet% ;MOV ECX, DWORD PTR [ECX+playerOffSet]
func = %func%8B89%revQuestFunctionOffset% ;MOV ECX, DWORD PTR [ECX+questFuncOffset]
func = %func%68%revQuestId% ;PUSH questId
func = %func%FFD0 ;CALL NEAR EAX
func = %func%A3%revReturnAddress% ;MOV DWORD PTR [returnAddress], EAX
func = %func%61 ;POPAD
func = %func%C3 ;RET
MCode(checkQuestFunction, func)
DllCall("WriteProcessMemory", "UInt", ProcessHandle%PID%, "UInt", functionAddress%PID%, "Uint", &checkQuestFunction, "Uint", functionSize, "Uint *", 0)
SetFormat, IntegerFast, d
hThrd := DllCall("CreateRemoteThread", "Uint", ProcessHandle%PID%, "Uint", 0, "Uint", 0, "Uint", functionAddress%PID%, "Uint", 0, "Uint", 0, "Uint", 0)
loop
{
result := DllCall( "WaitForSingleObject", UInt,hThrd, UInt,50 )
if(result <> 258)
{
break
}
sleep 50
if(A_Index > 100)
{
break
}
}
local returnValue := readMemory(returnAddress%PID%, client)
DllCall( "CloseHandle", UInt,hThrd )
;DllCall("VirtualFreeEx", "Uint", ProcessHandle, "Uint", functionAddress, "Uint", 0, "Uint", 0x8000)
;DllCall("VirtualFreeEx", "Uint", ProcessHandle, "Uint", returnAddress, "Uint", 0, "Uint", 0x8000)
;DllCall( "CloseHandle", UInt,ProcessHandle )
return returnValue
} |
|
|
|
|
|
Последний раз редактировалось bespaniki; 01.03.2013 в 21:11.
|
|
|
28.02.2013, 15:02
|
#2
|
|
|
|
Рыцарь
|
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
|
Re: AutoIT получение списка квестов
Либо это не то, что нужно, либо я лишний раз убеждаюсь в том, что AHK это китайская грамота...
Вообще, есть тема с оффсетами, там есть некий оффсет на массив квестов (+1130), но как и с чем его едят, увы не знаю.
|
|
|
28.02.2013, 21:59
|
#3
|
|
|
|
Пехотинец
|
Регистрация: 11.12.2009
Сообщений: 83
Популярность: -270
Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
|
Re: AutoIT получение списка квестов
оффсет на массив квестов (+1130) это я видел, мне то и надо знать как с чем его едят... полагаю также как и массив с ником персонажа, только прыжки по памяти другие, которых увы не знаю(((
На АНК это работает, данный код проверяет доступность квеста, просто кто-то же должен знать как на autoIT это осуществить, потому как с АНК переводить занятие долгое...
|
|
|
28.02.2013, 22:54
|
#4
|
|
|
|
Рыцарь
|
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
|
Re: AutoIT получение списка квестов
|
|
|
01.03.2013, 00:48
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 11.12.2009
Сообщений: 83
Популярность: -270
Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
|
Re: Получение списка квестов
вот и я тоже не понял сути, хотя некоторые мысли появились что за инжект... Игрался с СЕ выискивая ID квестов и наткнулся на адрес памяти в который пишется ID квеста по которому я КЛИКНУЛ в списке полученных квестов. Сейчас СЕ считает смещения к этому адресу, правда уже насчитал более 6кк указателей, боюсь фик найду оффсет на эту ячейку
Добавлено через 49 минут
выкинуло из онлайна, искать по новой, НО в этом есть плюс. Оказывается есть 2 адреса памяти в которые пишутся ИД кликнутых квестов причем в 1(адрес) взятые и доступные, а во 2 только взятые, это уже сможет пригодиться, только найти бы оффсеты к этим адресам.
Добавлено через 54 минуты
последнее смещение +1F8
Добавлено через 10 часов 17 минут
Тааакс за ночь СЕ написал мне 700Гб данных.
ткните носом плиз в руководство как искать смещения, и в СЕ можно как нибудь указать от какого базового адреса вести поиск (чтоб сразу показывал путь от 00B8FBCC)?
Добавлено через 20 часов 22 минуты
Есть прогресс. Обновил 1 пост.
Последний раз редактировалось bespaniki; 01.03.2013 в 21:10.
Причина: Добавлено сообщение
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 04:01.
|
|