|
Крашит клиент при выборе сервера - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
31.07.2017, 15:53
|
#1
|
|
|
|
Разведчик
|
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
|
Крашит клиент при выборе сервера
Всем привет. Практически дописал свой автологин. Все работает отлично: авторизуется, сохраняет токен при двухфакторной авторизации, но есть одно но...
При попытке выбрать сервер клиент крашится в светофор. Но что самое странное, так это то, что происходит это не всегда, но в большинстве случаев.
Сначала я грешным делом подумал, что достаточно будет поставить задержку, но это не помогает. Однако при пошаговом выполнении кода сервер выбирается...
Помогите, пожалуйста, не могу понять, в чем дело. Ниже код метода авторизации в клиенте.
Код:
private static async Task EntranceToGame(Int32 processId, Account user)
{
try
{
//открываем процесс для чтения и записи
IntPtr oph = WinApi.OpenProcess(WinApi.ProcessAccessFlags.All, false, processId);
//дожидаемся, пока прогрузится окно, если прошла минута, то выбрасываем исключение
Int32 tempCount = 0;
do
{
await Task.Delay(1000);
tempCount++;
if (tempCount > 60) throw new Exception("Проблемы с запуском окна.");
}
while (CalcMethods.ReadByte(oph, Offsets.BaseAdress, new Int32[] { 0x1C, 0x18, 0x08, 0x8C, 0x08, 0x90 }) != 1);
//выбираем сервер
Int32[] addresses = CalcMethods.CalcControlAddress(oph, "Win_LoginServerList", "Lst_Server", 1);
for (int i = 0; i < 13; i++)
{
if (CalcMethods.ReadString(oph, addresses[2] + 0x168, new int[] { i * 0x800, 0 }).Contains(user.Server))
{
if (CalcMethods.CalcByteValue(oph, addresses[2] + 0x13c) != i)
CalcMethods.WriteProcessBytes(oph, i, addresses[2] + 0x13c);
await Task.Delay(3000);
//вот в этом месте клиент крашится.
Injects.GUI_Inject(addresses[0], addresses[1], oph);
break;
}
}
//ждем коннекта и нажимаем "ОК" на всплывающем информационном окне
addresses = CalcMethods.CalcControlAddress(oph, "Win_PwdHint", "Btn_Confirm", 1);
tempCount = 0;
do
{
await Task.Delay(1000);
tempCount++;
if (tempCount > 60) throw new Exception("Проблемы с коннектом к серверу.");
}
while (CalcMethods.CalcByteValue(oph, addresses[0] + 0x90) != 1);
Injects.GUI_Inject(addresses[0], addresses[1], oph);
//выбираем персонажа
String tempName = String.Empty;
for (Int32 i = 1; i <= 8; i++)
{
addresses = CalcMethods.CalcControlAddress(oph, "Win_Select", "Txt_Name" + i.ToString(), 2);
tempName = CalcMethods.ReadString(oph, addresses[2] + 0xB8, new int[] { 0 });
if (CalcMethods.ReadString(oph, addresses[2] + 0xB8, new int[] { 0 }).Contains(user.Nickname))
{
addresses = CalcMethods.CalcControlAddress(oph, "Win_Select", "Rdo_Char" + i.ToString(), 2);
Injects.GUI_Inject(addresses[0], addresses[1], oph);
}
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
Последний раз редактировалось KLAIDY; 31.07.2017 в 15:57.
|
|
|
02.08.2017, 12:08
|
#2
|
|
|
|
Разведчик
|
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
|
Re: Крашит клиент при выборе сервера
В общем так и не разобрался, что это за светофор такой, поэтому решил просто посылать в окно нажатие мышки.
Код:
addresses = CalcMethods.CalcControlAddress(oph, "Win_LoginServerListButton", "Btn_Choose", 1);
WinApi.SendMessage(hwnd, 0x201, 0x1, (IntPtr)(((CalcMethods.CalcInt32Value(oph, addresses[0] + 0x9C) + CalcMethods.CalcInt32Value(oph, addresses[2] + 0x90) + 2) << 16)
| (CalcMethods.CalcInt32Value(oph, addresses[0] + 0x98) + CalcMethods.CalcInt32Value(oph, addresses[2] + 0x88) + 2) & 0xffff));
WinApi.SendMessage(hwnd, 0x202, 0x1, (IntPtr)(((CalcMethods.CalcInt32Value(oph, addresses[0] + 0x9C) + CalcMethods.CalcInt32Value(oph, addresses[2] + 0x90) + 2) << 16)
| (CalcMethods.CalcInt32Value(oph, addresses[0] + 0x98) + CalcMethods.CalcInt32Value(oph, addresses[2] + 0x88) + 2) & 0xffff));
А сам заход в игру делать передачей нажатия энтера.
Код:
WinApi.SendMessage(hwnd, WinApi.WM_SETFOCUS, 0, IntPtr.Zero);
WinApi.PostMessage(hwnd, WinApi.WM_KEYDOWN, 13, 0);
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 04:57.
|
|