Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Получение списка квестов

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 28.02.2013, 00:02   #1
 Пехотинец
Аватар для bespaniki
 
bespaniki неизвестен в этих краяхbespaniki неизвестен в этих краяхbespaniki неизвестен в этих краях
Регистрация: 11.12.2009
Сообщений: 83
Популярность: -270
Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
Отправить сообщение для bespaniki с помощью Skype™
 
По умолчанию Получение списка квестов

добавлю в 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
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: AutoIT получение списка квестов

Цитата:
Сообщение от bespanikiПосмотреть сообщение
перевести с AHK

Либо это не то, что нужно, либо я лишний раз убеждаюсь в том, что AHK это китайская грамота...

Вообще, есть тема с оффсетами, там есть некий оффсет на массив квестов (+1130), но как и с чем его едят, увы не знаю.
  Ответить с цитированием
Старый 28.02.2013, 21:59   #3
 Пехотинец
Аватар для bespaniki
 
bespaniki неизвестен в этих краяхbespaniki неизвестен в этих краяхbespaniki неизвестен в этих краях
Регистрация: 11.12.2009
Сообщений: 83
Популярность: -270
Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
Отправить сообщение для bespaniki с помощью Skype™
 
По умолчанию Re: AutoIT получение списка квестов

оффсет на массив квестов (+1130) это я видел, мне то и надо знать как с чем его едят... полагаю также как и массив с ником персонажа, только прыжки по памяти другие, которых увы не знаю(((
На АНК это работает, данный код проверяет доступность квеста, просто кто-то же должен знать как на autoIT это осуществить, потому как с АНК переводить занятие долгое...
  Ответить с цитированием
Старый 28.02.2013, 22:54   #4
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: AutoIT получение списка квестов

Цитата:
Сообщение от bespanikiПосмотреть сообщение
как на autoIT это осуществить

Не стоит быть на столько категоричным, перевод с любого другого нормального языка на AutoIt возможен, просто нужен человек, который объяснит как это работает, а желательно покажет на примере. Лично я в представленном AutoHotkey коде не вижу сути происходящего, делается некий непонятный инжект, если это не так, то я смотрю на весьма странный код и вижу фигу что ли. Весьма сомневаюсь, что кто-то из раздела или даже форума, сможет помочь тебе в плане перевода с AHK.

Поправлю ка я название темы...
  Ответить с цитированием
Старый 01.03.2013, 00:48   #5
 Пехотинец
Аватар для bespaniki
 
bespaniki неизвестен в этих краяхbespaniki неизвестен в этих краяхbespaniki неизвестен в этих краях
Регистрация: 11.12.2009
Сообщений: 83
Популярность: -270
Сказал(а) спасибо: 7
Поблагодарили 26 раз(а) в 9 сообщениях
Отправить сообщение для bespaniki с помощью Skype™
 
По умолчанию Re: Получение списка квестов

вот и я тоже не понял сути, хотя некоторые мысли появились что за инжект... Игрался с СЕ выискивая ID квестов и наткнулся на адрес памяти в который пишется ID квеста по которому я КЛИКНУЛ в списке полученных квестов. Сейчас СЕ считает смещения к этому адресу, правда уже насчитал более 6кк указателей, боюсь фик найду оффсет на эту ячейку

Добавлено через 49 минут
выкинуло из онлайна, искать по новой, НО в этом есть плюс. Оказывается есть 2 адреса памяти в которые пишутся ИД кликнутых квестов причем в 1(адрес) взятые и доступные, а во 2 только взятые, это уже сможет пригодиться, только найти бы оффсеты к этим адресам.

Добавлено через 54 минуты
последнее смещение +1F8

Добавлено через 10 часов 17 минут
Тааакс за ночь СЕ написал мне 700Гб данных.
ткните носом плиз в руководство как искать смещения, и в СЕ можно как нибудь указать от какого базового адреса вести поиск (чтоб сразу показывал путь от 00B8FBCC)?

Добавлено через 20 часов 22 минуты
Есть прогресс. Обновил 1 пост.

Последний раз редактировалось bespaniki; 01.03.2013 в 21:10. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Руководство] Генераторы RCON паролей + получение списка серверов + HLBrute v1.1 AdamThomas(x_x) Прочий софт для Counter-Strike 14 12.12.2013 15:20
[Помогите!] Проблема с получением списка мобов phoenixusa Общение разработчиков 2 17.05.2012 20:05
Получения списка играющих друзей. Tosik-Fall Общение и обсуждение (Тюряга ВК) 7 18.02.2012 08:11

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 04:01.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net