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

Крашит клиент при выборе сервера

-

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

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

Ответ
 
Опции темы
Старый 31.07.2017, 15:53   #1
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 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
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 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);
  Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажи в выборе сервера :) mr.effect1k Общение и обсуждение Aion 1 24.11.2015 00:51
[Помогите!] Вылетает при выборе общего сервера( fuck228 Общение и обсуждение, архив Point Blank 5 05.01.2012 09:36
ошибка при выборе сервера Strider84 Rising Force Online 27 09.11.2008 21:29

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

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

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