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

Вопросы по чату

-

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

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

Ответ
 
Опции темы
Старый 27.02.2017, 11:06   #1
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
 
По умолчанию Вопросы по чату

Привет, ребята!
Недавно начал изучать чат в пв и столкнулся с некоторыми вопросами.
Написал вот такой класс-шаблон для работы с чатом:
Код:
class ChatReader
    {
        IntPtr handle;
        int ChNold;
        List<Message> messages;

        int ChatStart = 0x00F06768;
        int ChatNumber = 0x00F06774;

        public ChatReader(IntPtr handle)
        {
            this.handle = handle;
            messages = new List<Message>();
        }

        public void ReadChat()
        {
            int processID;
            //получаем id процесса по хендлу
            WinApi.GetWindowThreadProcessId(handle, out processID);
            //запускаем процесс и получаем его дескриптор
            IntPtr oph = WinApi.OpenProcess(WinApi.ProcessAccessFlags.All, false, processID);
            //начало чата
            int ChS = CalcMethods.CalcInt32Value(oph, ChatStart);
            //количество сообщений в памяти клиента
            int ChN = CalcMethods.CalcInt32Value(oph, ChatNumber);
            for (int i = 0; i< ChN; i++)
            {
                //id сообщения
                int messageID = CalcMethods.CalcInt32Value(oph, (ChS + (i * 0x24)) + 0x14);
                //тип сообщения
                int messageType = CalcMethods.CalcInt32Value(oph, (ChS + (i * 0x24)) + 0x4);
                //первая форма сообщения
                int message_1_address = CalcMethods.CalcInt32Value(oph, (ChS + (i * 0x24)) + 0xc);
                string message_1 = CalcMethods.CalcStringValue(oph, message_1_address);
                //вторая форма сообщения
                int message_2_address = CalcMethods.CalcInt32Value(oph, (ChS + (i * 0x24)) + 0x8);
                string message_2 = CalcMethods.CalcStringValue(oph, message_2_address);
                if (messageID > ChNold)
                {
                    //если сообщение новое, то добавляем в коллекцию и выводим инфу в лог
                    messages.Add(new Message(i, messageType, messageID, message_1, message_2));
                    CalcMethods.Logging("++++++++++++++");
                    CalcMethods.Logging(messageType.ToString());
                    CalcMethods.Logging(messageID.ToString());
                    CalcMethods.Logging(message_1);
                    CalcMethods.Logging(message_2);
                    ChNold = messageID;
                }               
            }

            WinApi.CloseHandle(oph);
        }
    }
Так вот, как я понял, messageType обычно 1 - мирчат, 2 - группчат, 3 - кч и т.д.
Но у меня помимо этих типов может считаться что-то типа 11468801 (это в int). И у сообщений одного типа могут быть разные messageType. В чем проблема, подскажите, пожалуйста? Или может это норма и сообщения все по-другому сортируют?

И есть еще один глупый вопрос: можно ли по чату узнать wid персонажа, отправившего сообщение?
  Ответить с цитированием
Старый 28.02.2017, 16:18   #2
 Разведчик
Аватар для Smerch
 
Smerch скоро будет известенSmerch скоро будет известенSmerch скоро будет известенSmerch скоро будет известен
Регистрация: 14.07.2009
Сообщений: 11
Популярность: 306
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 6 сообщениях
 
По умолчанию Re: Вопросы по чату

Если перейти по адресу ChatStruct, то там хранится до 200 дескрипторов сообщений. Каждый дескриптор имеет следующую структуру:
Код:
  ChatStruct=record
    uk1         : DWORD;
    TypeChat    : Byte;
    SmileSet    : Byte;
    uk2           : Byte;
    uk3           : Byte;
    Addr          : DWORD;
    uk4           : DWORD;
    ItemID      : DWORD;
    ID            : DWORD;
    uk5           : DWORD;
    uk6           : DWORD;
    WID          : DWORD;
  end;
По адресу Addr находится само сообщение + различная информация о типе сообщения, наличие смайлов, нике и другая.
WID же можно взять сразу из дескриптора, если тебе нужно выделить сообщения того персонажа, к которому подключен бот, то его WID всегда равен 0xFFFFFFFF
  Ответить с цитированием
Старый 28.02.2017, 19:29   #3
 Разведчик
Аватар для KLAIDY
 
KLAIDY никому не известный тип
Регистрация: 11.10.2010
Сообщений: 13
Популярность: 10
Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
 
По умолчанию Re: Вопросы по чату

Цитата:
Сообщение от SmerchПосмотреть сообщение
По адресу Addr находится само сообщение + различная информация о типе сообщения, наличие смайлов, нике и другая.
WID же можно взять сразу из дескриптора, если тебе нужно выделить сообщения того персонажа, к которому подключен бот, то его WID всегда равен 0xFFFFFFFF

Спасибо большое, я оказывается тип сообщения считывал в 4 байта вместо 1.
А последние 4 байта дескриптора - это как раз wid персонажа, отославшего сообщение, как я понял?
  Ответить с цитированием
Старый 28.02.2017, 20:10   #4
 Разведчик
Аватар для Smerch
 
Smerch скоро будет известенSmerch скоро будет известенSmerch скоро будет известенSmerch скоро будет известен
Регистрация: 14.07.2009
Сообщений: 11
Популярность: 306
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 6 сообщениях
 
По умолчанию Re: Вопросы по чату

Цитата:
Сообщение от KLAIDYПосмотреть сообщение
Спасибо большое, я оказывается тип сообщения считывал в 4 байта вместо 1.
А последние 4 байта дескриптора - это как раз wid персонажа, отославшего сообщение, как я понял?

Да, и как я написал выше, свои сообщения имеют wid = 0xFFFFFFFF
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Вопросы от почты Six Six Six Вопросы, просьбы, обсуждение 1 22.02.2014 15:26
[Помогите!] вопросы. CyberNEŦik Вопросы и ответы, обсуждения 4 25.09.2012 22:01
Все вопросы по F-cf mod VeelZevuL Общение и обсуждение CrossFire 27 22.08.2011 18:59
ВОПРОСЫ олененок Общение и обсуждение (Тюряга ВК) 9 23.12.2010 13:12

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

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

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