コード例 #1
0
        /// <summary>
        /// Бот просматривает инвентарь на предмет нахождения "Самоцвет зала перерождения" и пишет в чат об этом
        /// </summary>
        /// <param name="oph"></param>
        /// <param name="hwnd"></param>
        public static Boolean ReadInvent(IntPtr oph, IntPtr hwnd)
        {
            Int32 count_cells = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsInventCellsCount);

            for (Int32 iter = 0; iter < count_cells; iter++)
            {
                if (CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsItemInCellID(iter)) == 27422) // id самоцвета зала перерождения
                {
                    //отправим сообщение в чат
                    Int32[] address_window_1 = CalcMethods.CalcControlAddress(oph, "Win_Chat", "DEFAULT_Txt_Speech", 2);
                    Injects.SetText(oph, "!!Самоцвет найден!", address_window_1[2]);
                    if (address_window_1[0] != 0 && address_window_1[1] != 0)
                    {
                        Injects.GUI_Inject(address_window_1[0], address_window_1[1], oph);
                    }
                    return(true);
                }
            }
            //отправим сообщение в чат
            Int32[] address_window = CalcMethods.CalcControlAddress(oph, "Win_Chat", "DEFAULT_Txt_Speech", 2);
            Injects.SetText(oph, "!!Самоцвет не найден!", address_window[2]);
            if (address_window[0] != 0 && address_window[1] != 0)
            {
                Injects.GUI_Inject(address_window[0], address_window[1], oph);
            }
            return(false);
        }
コード例 #2
0
        static void KillBoss_1(My_Windows mw)
        {
            try
            {
                //следуем к первой точке
                SimonSayMethods.MoveTo(mw.Oph, point_1[0], point_1[1], point_1[2]);

                SimonSayMethods.Say(mw, "!!начинаю бить босса");
                //ищем босса поблизости
                Int32 bossWid = CalcMethods.MobSearch(mw.Oph, "Повелитель кругов ада");
                while (bossWid > 0)
                {
                    if (mw.ClassID == 0)
                    {
                        //здесь метод для вара
                    }
                    else
                    {
                        //здесь метод для остальных классов
                    }
                }
                Thread.Sleep(5000);
                SimonSayMethods.Say(mw, "!!закончил бить босса");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #3
0
 /// <summary>
 /// По указанному дескриптору бот юзает указанный список скиллов
 /// </summary>
 /// <param name="skill"></param>
 /// <param name="oph"></param>
 public static void UseSkillMassive(List <Skill> skill, IntPtr oph)
 {
     try
     {
         foreach (Skill s in skill)
         {
             int cd_skill = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsToCdSkill(s.Number));
             while (cd_skill > 0)
             {
                 Thread.Sleep(cd_skill);
                 cd_skill = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsToCdSkill(s.Number));
             }
             Injects.Skill_Inject(s.Id, oph);
             Thread.Sleep(1000);
             int lock_skill = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCurrentSkill);
             while (lock_skill > 0)
             {
                 Thread.Sleep(100);
                 lock_skill = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCurrentSkill);
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
コード例 #4
0
        /// <summary>
        /// Выход из пати всех ботов, первым выходит патилидер
        /// </summary>
        public static void QuitFromPartyFirstPl()
        {
            try
            {
                for (int i = 0; i < ListClients.work_collection.Count(); i++)
                {
                    if (ListClients.work_collection[i] != null)
                    {
                        //узнаем указатель на процесс
                        IntPtr oph = ListClients.work_collection[i].Oph;

                        int partyCount = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCountParty);
                        //закрываем дескриптор

                        if (partyCount > 0)
                        {
                            //если счетчик людей в пати > 0, то выходим из пати
                            ListClients.work_collection[i].PacketSend.leaveParty();
                            Thread.Sleep(300);
                        }
                    }
                }
                Thread.Sleep(1500);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #5
0
        /// <summary>
        /// бот открывает диалог с НПС
        /// </summary>
        /// <param name="mw"></param>
        /// <param name="npcName"></param>
        /// <param name="questId"></param>
        public static void TalkToNPC(My_Windows mw, String npcName, Int32 questId)
        {
            //находим wid НПСа по имени
            Int32 mob_wid = CalcMethods.MobSearch(mw.Oph, npcName);

            //если НПС нашелся, то берем у него квест и закрываем диалоговое окно
            if (mob_wid != 0)
            {
                //Выделяем НПСа
                mw.PacketSend.selectNpc(mob_wid);
                Thread.Sleep(300);

                //Открываем диалоговое окно с НПСом
                mw.PacketSend.talkToNpc(mob_wid);
                Thread.Sleep(1000);

                //Узнаем необходимые данные об окне, так как после взятия кв оно перестанет быть активным
                int[] adress_window = CalcMethods.CalcControlAddress(mw.Oph, "Win_NPC", "Btn_Back", 1);
                Thread.Sleep(300);

                //Берем кв
                mw.PacketSend.takeQuest(questId);

                //если адреса считались нормально, то закрываем диалоговое окно с НПСом
                if (adress_window[0] != 0 && adress_window[1] != 0)
                {
                    Injects.GUI_Inject(adress_window[0], adress_window[1], mw.Oph);
                }
                else
                {
                    mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 1), new FormatText("не смог закрыть окно", Brushes.Red, 14, 1));
                }
            }
        }
コード例 #6
0
        /// <summary>
        /// Все боты принимают приглашения в пати от патилидера
        /// </summary>
        public static void AcceptInviteToPartyFromPl()
        {
            try
            {
                for (int i = 1; i < ListClients.work_collection.Count(); i++)
                {
                    if (ListClients.work_collection[i] != null)
                    {
                        //узнаем указатель на процесс
                        IntPtr oph = ListClients.work_collection[i].Oph;

                        int inviteCount = CalcMethods.CalcInt32Value(oph, Offsets.InviteCount);

                        if (inviteCount > 0)
                        {
                            //узнаем ID персонажа, отправившего пати
                            int[] inviteIdPlayer = { Offsets.InviteWidPlayer };
                            int   playerId       = CalcMethods.ReadInt(oph, Offsets.InviteStruct, inviteIdPlayer);
                            //узнаем ID пати, в которую нас приглашают
                            int[] inviteIdParty = { Offsets.InviteWidParty };
                            int   partyID       = CalcMethods.ReadInt(oph, Offsets.InviteStruct, inviteIdParty);
                            //принмаем пати
                            ListClients.work_collection[i].PacketSend.acceptPartyInvite(playerId, partyID);
                            Thread.Sleep(300);
                        }
                    }
                }
                Thread.Sleep(1500);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #7
0
        public static Boolean GetCoord(IntPtr oph, float x1, float y1, float z1)
        {
            //Расчитываем нынешние коорды персонажа
            float x2 = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX);
            float y2 = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY);
            float z2 = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ);

            //Сравниваем, достиг ли персонаж цели
            return(Math.Round(x1) == Math.Round(x2) && Math.Round(y1) == Math.Round(y2) && Math.Round(z1) == Math.Round(z2));
        }
コード例 #8
0
 /// <summary>
 /// Бот пишет в чат заданный текст
 /// </summary>
 /// <param name="mw"></param>
 /// <param name="text"></param>
 public static void Say(My_Windows mw, String text)
 {
     //запишем сообщение в чат
     Int32[] address_window = CalcMethods.CalcControlAddress(mw.Oph, "Win_Chat", "DEFAULT_Txt_Speech", 2);
     Injects.SetText(mw.Oph, text, address_window[2]);
     //нажимаем кнопку отправить
     if (address_window[0] != 0 && address_window[1] != 0)
     {
         Injects.GUI_Inject(address_window[0], address_window[1], mw.Oph);
     }
 }
コード例 #9
0
        //конструктор
        public My_Windows(IntPtr handle)
        {
            this.handle = handle;
            //получаем id процесса по хендлу
            WinApi.GetWindowThreadProcessId(handle, out processID);
            //запускаем процесс и получаем его дескриптор
            oph = WinApi.OpenProcess(WinApi.ProcessAccessFlags.All, false, ProcessID);
            //создаем класс для отправки пакетов
            packetSend = new Packets(oph);
            //получаем имя персонажа для данного клиента
            name = CalcMethods.ReadString(oph, Offsets.BaseAdress, Offsets.OffsetsName);
            //узнаем wid
            wid = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsWid);
            //узнаем класс нашего персонажа
            classID = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsClassId);
            //читаем доступные скиллы-бафы
            int skillCount = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsSkillsCount);

            for (int s = 0; s < skillCount; s++)
            {
                int id = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsToIdSkill(s));
                if (skills_for_buf.Contains(id))
                {
                    if (id == 112 || id == 518 || id == 519 || id == 1980 || id == 1981 ||  //танк
                        id == 312 || id == 656 || id == 657 || id == 1984 || id == 1985 ||  //друид
                        id == 1811 || id == 1869)                                           //прист
                    {
                        changeForm = new Skill(id, s);
                        continue;
                    }
                    if (id == 1824)
                    {
                        shamansCall = new Skill(id, s);
                        continue;
                    }
                    my_skills_for_buf.Add(new Skill(id, s));
                }
            }
            //узнаем координаты
            x = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX) / 10 + 400;
            y = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY) / 10 + 550;
            z = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ) / 10;
            //выбираем картинку для нашего персонажа
            Select_Image(classID);
            //указываем состояние
            stateThread = StateEnum.stop;
            //создаем поток для окна
            this.BackgroundWorker5 = new BackgroundWorker();
            this.BackgroundWorker5.WorkerSupportsCancellation = true;
            this.BackgroundWorker5.DoWork += new DoWorkEventHandler(this.backgroundWorker5_DoWork);
        }
コード例 #10
0
        /// <summary>
        /// Шаман кидает пати, отдает пл, призывает и выходит из пати
        /// </summary>
        /// <param name="wid"></param>
        public static void PartyAndPl(int wid)
        {
            try
            {
                if (ListClients.work_collection[ListClients.work_collection.Count() - 1] != null)
                {
                    //узнаем указатель на процесс
                    IntPtr oph = ListClients.work_collection[ListClients.work_collection.Count() - 1].Oph;

                    int partyCount = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCountParty);

                    if (partyCount > 0)
                    {
                        //если счетчик людей в пати >0, то выходим из пати
                        ListClients.work_collection[ListClients.work_collection.Count() - 1].PacketSend.leaveParty();
                    }
                    Thread.Sleep(1000);
                    ListClients.work_collection[ListClients.work_collection.Count() - 1].PacketSend.inviteParty(wid);
                    int j = 0;
                    while (j < 40)
                    {
                        Thread.Sleep(500);
                        partyCount = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCountParty);
                        if (partyCount > 0)
                        {
                            //если счетчик людей в пати >0, то передаем пл, кидаем призыв и выходим из пати
                            int[] temp_mas = { 0x1c, 0x34, 0x820, 0x14, 0x0, 0xc };
                            //если пересборщик - пл, то передаем пл
                            Int32 temp_int = CalcMethods.ReadInt(oph, Offsets.BaseAdress, temp_mas);
                            if (CalcMethods.ReadInt(oph, Offsets.BaseAdress, temp_mas)
                                == ListClients.work_collection[ListClients.work_collection.Count() - 1].Wid)
                            {
                                ListClients.work_collection[ListClients.work_collection.Count() - 1].PacketSend.ChangePl(wid);
                                Thread.Sleep(1000);
                            }
                            ListClients.work_collection[ListClients.work_collection.Count() - 1].PacketSend.callShamanParty(wid);
                            Thread.Sleep(5000);
                            ListClients.work_collection[ListClients.work_collection.Count() - 1].PacketSend.leaveParty();
                            Thread.Sleep(500);
                            return;
                        }
                        j++;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #11
0
 /// <summary>
 /// Остановиться
 /// </summary>
 /// <param name="processID"></param>
 public static void Stop(IntPtr oph)
 {
     try
     {
         //Расчитываем нынешние коорды персонажа
         float x = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX);
         float y = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY);
         float z = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ);
         //узнаем состояние: 0 - земля, 1 - вода, 2 - воздух
         int walk_mode = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsWalkMode);
         //юзаем инжект
         Injects.WalkTo(oph, x, y, z, walk_mode);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
コード例 #12
0
 /// <summary>
 /// Бот движется по указанному адресу, но не более 60 секунд.
 /// </summary>
 /// <param name="oph"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="z"></param>
 public static void MoveTo(IntPtr oph, float x, float y, float z)
 {
     try
     {
         //узнаем состояние: 0 - земля, 1 - вода, 2 - воздух
         Int32 walk_mode = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsWalkMode);
         //юзаем инжект движения
         Injects.WalkTo(oph, x, y, z, walk_mode);
         //Расчитываем нынешние коорды персонажа
         float x_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX);
         float y_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY);
         float z_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ);
         //в цикле проверяем, достиг ли персонаж цели и не застрял ли он
         Int32 iter = 0;
         while (!CalcMethods.GetCoord(oph, x, y, z))
         {
             Thread.Sleep(1000);
             //если персонаж встал на месте, то подтолкнем его еще раз
             if (CalcMethods.GetCoord(oph, x_temp, y_temp, z_temp))
             {
                 Injects.WalkTo(oph, x, y, z, walk_mode);
             }
             //если персонаж двигается, то перезаписываем его координаты
             else
             {
                 x_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsX);
                 y_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsY);
                 z_temp = CalcMethods.ReadFloat(oph, Offsets.BaseAdress, Offsets.OffsetsZ);
             }
             iter++;
             //если бот бежит дольше минуты, то прекращаем бежать
             if (iter > 60)
             {
                 break;
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
コード例 #13
0
        /// <summary>
        /// Метод для чтения сообщений в чате ботами
        /// </summary>
        public void ReadChat_2()
        {
            //узнаем начало чата
            int ChS = CalcMethods.CalcInt32Value(oph, Offsets.СhatStart);
            //узнаем количество сообщений в памяти клиента
            int ChN = CalcMethods.CalcInt32Value(oph, Offsets.СhatNumber);

            //чистим массив сообщений и заполняем его null
            messages.Clear();
            messages = new List <Message>()
            {
                null, null, null, null, null
            };
            //в цикле заполняем массив сообщений последними 5ю сообщениями
            for (int i = ChN - 5, j = 0; i < ChN; i++, j++)
            {
                //id сообщения (каждое следующее имеет +1 к предыдущему)
                int messageID = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgId(ChS, i));
                //уникальный wid человека, оправившего сообщение
                int wid = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgWid(ChS, i));
                //тип сообщения: 1 - мирчат, 2 - группчат, 3 - кланчат, 4 - пм
                byte messageType = CalcMethods.CalcByteValue(oph, Offsets.OffsetsMsgType(ChS, i));
                //адрес и текст первой формы сообщения
                int    message_1_address = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgForm1(ChS, i));
                string message_1         = CalcMethods.CalcStringValue(oph, message_1_address);
                //адрес и текст второй формы сообщения
                int    message_2_address = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgForm2(ChS, i));
                string message_2         = CalcMethods.CalcStringValue(oph, message_2_address);
                //заполняем j-й элемент массива сообщений
                messages[j] = new Message(i, messageType, messageID, message_1, message_2, (uint)wid);
                //если сообщение новой и ранее не обрабатывалось, то проверяем его на наличие служебной команды
                if (messageID > ChNold)
                {
                    #region За целью
                    try
                    {
                        //реакция на команду "следовать за целью"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.To_him) != -1 &&
                            (messages[j].Type == 2 || messages[j].Type == 4) &&
                            s && temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 13, 2));
                            //проверим, является ли  отправителем сообщения пл
                            if (messages[j].Wid == ListClients.work_collection[0].Wid)
                            {
                                //проверим, находится ли пл рядом
                                bool near_player_state = CalcMethods.SearchPlayerNearby(oph, (int)messages[j].Wid);
                                if (near_player_state)
                                {
                                    //возьмем пла в ассист
                                    packet.selectNpc((int)messages[j].Wid);
                                    Thread.Sleep(300);
                                    //узнаем вид в таргете
                                    int target_wid = CalcMethods.TargetPlayerWid(oph, messages[j].Wid);
                                    //узнаем наш wid
                                    int my_wid = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsWid);
                                    //проверим, игрок ли это и находится ли он рядом
                                    bool near_player_target_state = CalcMethods.SearchPlayerNearby(oph, target_wid);
                                    if (near_player_state && target_wid != my_wid)
                                    {
                                        //возьмем таргет пла в ассист
                                        packet.selectNpc(target_wid);
                                        Thread.Sleep(300);
                                        //запишем в структуру окна wid пла
                                        int[] result = CalcMethods.CalcControlAddress(oph, "Win_QuickAction", "Follow", 1);
                                        CalcMethods.WriteProcessBytes(oph, target_wid, result[0] + Offsets.OffsetToWidWin_QuickAction);
                                        SimonSayMethods.FollowMe(result, oph);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region Стоп
                    try
                    {
                        //реакция на команду "следовать за целью"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Stop) != -1 &&
                            (messages[j].Type == 2 || messages[j].Type == 4) &&
                            s && temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 13, 2));
                            //проверим, является ли  отправителем сообщения пл
                            if (messages[j].Wid == ListClients.work_collection[0].Wid)
                            {
                                SimonSayMethods.Stop(oph);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region  ебаф
                    try
                    {
                        //реакция на команду "бафнуть"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Rebaf) != -1 &&
                            (messages[j].Type == 2 || messages[j].Type == 4) &&
                            b && temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 13, 2));
                            //проверим, является ли  отправителем сообщения пл или Щирое ))
                            if (messages[j].Wid == ListClients.work_collection[0].Wid ||
                                messages[j].Msg_2.IndexOf("&Щирое&") != -1)
                            {
                                //проверяем, находится ли в образе персонаж и выходим из образа, если это так
                                int buf_count = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsBufsCount);
                                for (int b = 0; b < buf_count; b++)
                                {
                                    int buf_id = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsIdBuf(b));
                                    if (buf_id == 75 || buf_id == 47 || buf_id == 225)
                                    {
                                        int cd_skill = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsToCdSkill(mw.ChangeForm.Number));
                                        while (cd_skill > 0)
                                        {
                                            Thread.Sleep(cd_skill);
                                            cd_skill = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsToCdSkill(mw.ChangeForm.Number));
                                        }
                                        Injects.Skill_Inject(mw.ChangeForm.Id, oph);
                                        Thread.Sleep(1000);
                                        continue;
                                    }
                                }
                                //юзаем скиллы из списка разрешенных бафов
                                SimonSayMethods.UseSkillMassive(My_skills_for_buf, oph);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    //временная переменная, чтобы не обрабатывать 1 сообщение более 1 раза
                    ChNold = messageID;
                }
            }
            //делаем true после первой итерации
            temp = true;
        }
コード例 #14
0
        /// <summary>
        /// Пересборщик (шаман) кидает всем ботам призывы по очереди, боты принимают призыв
        /// </summary>
        public static void CallShaman(Skill call_skill)
        {
            try
            {
                for (int i = 0; i < ListClients.work_collection.Count() - 1; i++)
                {
                    if (ListClients.work_collection[i] != null)
                    {
                        if (ListClients.work_collection[ListClients.work_collection.Count() - 1] != null)
                        {
                            string location = CalcMethods.ReadString(ListClients.work_collection[i].Oph,
                                                                     Offsets.BaseAdress, Offsets.OffsetsLocationName);
                            while (location.IndexOf("Телепорт в Зал Перерождения") == -1)
                            {
                                //каст призыва
                                ListClients.work_collection[ListClients.work_collection.Count() - 1].PacketSend.callShamanParty(ListClients.work_collection[i].Wid);
                                Thread.Sleep(3000);
                                //принятие призыва
                                ListClients.work_collection[i].PacketSend.acceptCallShamanParty(ListClients.work_collection[ListClients.work_collection.Count() - 1].Wid);
                                //ждем, пока персонаж не сменит локацию после тп
                                Thread.Sleep(10000);
                                location = CalcMethods.ReadString(ListClients.work_collection[i].Oph,
                                                                  Offsets.BaseAdress, Offsets.OffsetsLocationName);
                            }
                            Thread.Sleep(1000);
                            //бот берет квест на заход в нирвану (id взято отсюда http://www.pwdatabase.com/ru/quest/20790 )
                            TalkToNPC(ListClients.work_collection[i], "Страж Зала Перерождения", 20790);

                            #region старый кусок кода
                            //Int32 mob_wid = CalcMethods.MobSearch(ListClients.work_collection[i].Oph, "Страж Зала Перерождения");
                            //if (mob_wid != 0)
                            //{
                            //    //Выделяем НПСа
                            //    ListClients.work_collection[i].PacketSend.selectNpc(mob_wid);
                            //    Thread.Sleep(300);
                            //    //Открываем диалоговое окно с НПСом
                            //    ListClients.work_collection[i].PacketSend.talkToNpc(mob_wid);
                            //    Thread.Sleep(1000);
                            //    //Узнаем необходимые данные об окне, так как после взятия кв оно перестанет быть активным
                            //    int[] adress_window = CalcMethods.CalcControlAddress(ListClients.work_collection[i].Oph, "Win_NPC", "Btn_Back", 1);
                            //    Thread.Sleep(300);
                            //    //Берем кв на заход в нирвану (id взято отсюда http://www.pwdatabase.com/ru/quest/20790 )
                            //    ListClients.work_collection[i].PacketSend.takeQuest(20790);
                            //    //если адреса считались нормально, то закрываем диалоговое окно с НПСом
                            //    if (adress_window[0] != 0 && adress_window[1] != 0)
                            //        Injects.GUI_Inject(adress_window[0], adress_window[1], ListClients.work_collection[i].Oph);
                            //    else
                            //    {
                            //        ListClients.work_collection[i].Logging(new FormatText(ListClients.work_collection[i].Name, Brushes.Red, 14, 1),
                            //                                               new FormatText("не смог закрыть окно", Brushes.Red, 14, 1));
                            //    }
                            //}
                            #endregion
                        }
                        //ждем отката призыва
                        //Thread.Sleep(3000);
                        int cd_call = CalcMethods.ReadInt(ListClients.work_collection[0].Oph,
                                                          Offsets.BaseAdress, Offsets.OffsetsToCdSkill(call_skill.Number));
                        while (cd_call > 0)
                        {
                            Thread.Sleep(1000);
                            cd_call = CalcMethods.ReadInt(ListClients.work_collection[0].Oph,
                                                          Offsets.BaseAdress, Offsets.OffsetsToCdSkill(call_skill.Number));
                        }
                    }
                }
                Thread.Sleep(1500);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #15
0
        /// <summary>
        /// Пересбор пати плом
        /// </summary>
        public static void Peresbor()
        {
            try
            {
                //узнаем указатель на процесс
                IntPtr oph = ListClients.work_collection[0].Oph;

                int partyCount = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCountParty);

                //узнаем wid всех членов пати
                int[] party_struct = new int[partyCount - 1];
                for (int k = 1; k < partyCount; k++)
                {
                    party_struct[k - 1] = CalcMethods.ReadInt(oph, Offsets.BaseAdress,
                                                              new int[] { Offsets.OffsetToGameAdress,
                                                                          Offsets.OffsetToPersStruct,
                                                                          Offsets.OffsetToParty,
                                                                          0x14, k * 0x4, 0xC });
                }
                //проверка на пээльство хД
                int pl_wid = CalcMethods.ReadInt(oph, Offsets.BaseAdress,
                                                 new int[] { Offsets.OffsetToGameAdress,
                                                             Offsets.OffsetToPersStruct,
                                                             Offsets.OffsetToParty,
                                                             0x14, 0, 0xC });
                if (ListClients.work_collection[0].Wid != pl_wid)
                {
                    bool temp = true;
                    for (int k = 1; k < ListClients.work_collection.Count(); k++)
                    {
                        if (ListClients.work_collection[k] != null)
                        {
                            if (ListClients.work_collection[k].Wid == pl_wid)
                            {
                                ListClients.work_collection[k].PacketSend.ChangePl(ListClients.work_collection[0].Wid);
                                temp = false;
                                Thread.Sleep(1000);
                                for (int l = 1; l < partyCount; l++)
                                {
                                    party_struct[l - 1] = CalcMethods.ReadInt(oph, Offsets.BaseAdress,
                                                                              new int[] { Offsets.OffsetToGameAdress,
                                                                                          Offsets.OffsetToPersStruct,
                                                                                          Offsets.OffsetToParty,
                                                                                          0x14, l * 0x4, 0xC });
                                }
                                break;
                            }
                        }
                    }
                    if (temp)
                    {
                        return;
                    }

                    Thread.Sleep(1500);
                }
                //кикаем всех кроме одного
                for (int k = 0; k < party_struct.Count() - 1; k++)
                {
                    ListClients.work_collection[0].PacketSend.kickFromParty(party_struct[k]);
                    Thread.Sleep(300);
                }
                //передаем пл последнему (если отмечен чекбокс в настройках)
                if (HeadViewModel.CheckBoxSettings.ChangePl)
                {
                    ListClients.work_collection[0].PacketSend.ChangePl(party_struct[party_struct.Count() - 1]);
                    Thread.Sleep(500);
                }

                //выходим из пати
                ListClients.work_collection[0].PacketSend.leaveParty();
                Thread.Sleep(1500);

                //кидаем всем пати
                for (int k = 0; k < party_struct.Count(); k++)
                {
                    ListClients.work_collection[0].PacketSend.inviteParty(party_struct[k]);
                    Thread.Sleep(300);
                }
                Thread.Sleep(1500);

                //все боты принимают пати, если они получили приглашение
                AcceptInviteToPartyFromPl();
                Thread.Sleep(1500);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #16
0
        /// <summary>
        /// Метод для чтения сообщений в чате пересборщиком
        /// </summary>
        public void ReadChat()
        {
            //узнаем начало чата
            int ChS = CalcMethods.CalcInt32Value(oph, Offsets.СhatStart);
            //узнаем количество сообщений в памяти клиента
            int ChN = CalcMethods.CalcInt32Value(oph, Offsets.СhatNumber);

            //чистим массив сообщений и заполняем его null
            messages.Clear();
            messages = new List <Message>()
            {
                null, null, null, null, null
            };
            //в цикле заполняем массив сообщений последними 5ю сообщениями
            for (int i = ChN - 5, j = 0; i < ChN; i++, j++)
            {
                //id сообщения (каждое следующее имеет +1 к предыдущему)
                int messageID = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgId(ChS, i));
                //уникальный wid человека, оправившего сообщение
                int wid = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgWid(ChS, i));
                //тип сообщения: 1 - мирчат, 2 - группчат, 3 - кланчат, 4 - пм
                byte messageType = CalcMethods.CalcByteValue(oph, Offsets.OffsetsMsgType(ChS, i));
                //адрес и текст первой формы сообщения
                int    message_1_address = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgForm1(ChS, i));
                string message_1         = CalcMethods.CalcStringValue(oph, message_1_address);
                //адрес и текст второй формы сообщения
                int    message_2_address = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgForm2(ChS, i));
                string message_2         = CalcMethods.CalcStringValue(oph, message_2_address);
                //заполняем j-й элемент массива сообщений
                messages[j] = new Message(i, messageType, messageID, message_1, message_2, (uint)wid);
                //если сообщение новой и ранее не обрабатывалось, то проверяем его на наличие служебной команды
                if (messageID > ChNold)
                {
                    #region Пересбор в нирку
                    try
                    {
                        //реакция на команду "пересбор"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Peresbor_v_nirku) != -1 &&
                            messages[j].Type == 4 &&
                            messages[j].Wid == ListClients.work_collection[0].Wid &&
                            temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 14, 2));
                            //все боты выходят из пати (если они в пати)
                            SimonSayMethods.QuitFromParty();
                            //пересборщик кидает всем ботам пати
                            SimonSayMethods.InvitetoParty();
                            //все боты принимают пати
                            SimonSayMethods.AcceptInviteToParty();
                            //пересборщик отдает патилидера первому боту
                            SimonSayMethods.ChangePl();
                            //пересборщик кидает всем призыв по очереди и боты его принимают
                            //проверки на класс у пересборщика нет, если пересборщик по каким-то причинам
                            //не может кинуть призыв, то ничего не происходит
                            //все боты, кроме пересборщика заходят в нирвану
                            SimonSayMethods.CallShaman(mw.ShamansCall);
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region Физнирка
                    try
                    {
                        //реакция на команду "пересбор"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Fiznirka) != -1 && messages[j].Type == 4 && messages[j].Wid == ListClients.work_collection[0].Wid && temp)
                        {
                            //mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2), new FormatText(message_1, Brushes.Black, 13, 2));
                            ////все боты выходят из пати (если они в пати)
                            //SimonSayMethods.QuitFromParty();
                            ////пересборщик кидает всем ботам пати
                            //SimonSayMethods.InvitetoParty();
                            ////все боты принимают пати
                            //SimonSayMethods.AcceptInviteToParty();
                            ////пересборщик отдает патилидера первому боту
                            //SimonSayMethods.ChangePl();
                            ////пересборщик кидает всем призыв по очереди и боты его принимают
                            ////проверки на класс у пересборщика нет, если пересборщик по каким-то причинам
                            ////не может кинуть призыв, то ничего не происходит
                            ////все боты, кроме пересборщика заходят в нирвану
                            //SimonSayMethods.CallShaman(mw.ShamansCall);
                            //mw.PacketSend.leaveParty();
                            //SimonSayMethods.Rebuf(MainWindow.settings.Rebaf);
                            ////дадим время ботам на ребаф
                            //Thread.Sleep(5000);
                            ////проверяем всех ботов на наличие самоцвета и берем квест на открытие
                            //SimonSayMethods.OpenFizNirvana();
                            //убиваем первого босса
                            KillBoss.KillBossForAll(1);
                            Thread.Sleep(100);
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region Пати и пл
                    try
                    {
                        //реакция на команду "пересбор"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Party_and_pl) != -1 &&
                            messages[j].Type == 4 &&
                            temp)
                        {
                            mw.Logging(new FormatText(mw.Name + " " + message_1, Brushes.Red, 14, 2));
                            SimonSayMethods.PartyAndPl((int)messages[j].Wid);
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region За целью
                    try
                    {
                        //реакция на команду "следовать за целью"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.To_him) != -1 &&
                            (messages[j].Type == 2 || messages[j].Type == 4) &&
                            s && temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 13, 2));
                            //проверим, является ли  отправителем сообщения пл
                            if (messages[j].Wid == ListClients.work_collection[0].Wid)
                            {
                                //проверим, находится ли пл рядом
                                bool near_player_state = CalcMethods.SearchPlayerNearby(oph, (int)messages[j].Wid);
                                if (near_player_state)
                                {
                                    //возьмем пла в ассист
                                    packet.selectNpc((int)messages[j].Wid);
                                    Thread.Sleep(300);
                                    //узнаем вид в таргете
                                    int target_wid = CalcMethods.TargetPlayerWid(oph, messages[j].Wid);
                                    //узнаем наш wid
                                    int my_wid = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsWid);
                                    //проверим, игрок ли это и находится ли он рядом
                                    bool near_player_target_state = CalcMethods.SearchPlayerNearby(oph, target_wid);
                                    if (near_player_state && target_wid != my_wid)
                                    {
                                        //возьмем таргет пла в ассист
                                        packet.selectNpc(target_wid);
                                        Thread.Sleep(300);
                                        //запишем в структуру окна wid пла
                                        int[] result = CalcMethods.CalcControlAddress(oph, "Win_QuickAction", "Follow", 1);
                                        CalcMethods.WriteProcessBytes(oph, target_wid, result[0] + Offsets.OffsetToWidWin_QuickAction);
                                        SimonSayMethods.FollowMe(result, oph);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region Стоп
                    try
                    {
                        //реакция на команду "следовать за целью"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Stop) != -1 &&
                            (messages[j].Type == 2 || messages[j].Type == 4) &&
                            s && temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 13, 2));
                            //проверим, является ли  отправителем сообщения пл
                            if (messages[j].Wid == ListClients.work_collection[0].Wid)
                            {
                                SimonSayMethods.Stop(oph);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    #region  ебаф
                    try
                    {
                        //реакция на команду "бафнуть"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Rebaf) != -1 &&
                            (messages[j].Type == 2 || messages[j].Type == 4) &&
                            b && temp)
                        {
                            mw.Logging(new FormatText(mw.Name, Brushes.Red, 14, 2),
                                       new FormatText(message_1, Brushes.Black, 13, 2));
                            //проверим, является ли  отправителем сообщения пл или Щирое ))
                            if (messages[j].Wid == ListClients.work_collection[0].Wid ||
                                messages[j].Msg_2.IndexOf("&Щирое&") != -1)
                            {
                                SimonSayMethods.UseSkillMassive(My_skills_for_buf, oph);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion

                    //временная переменная, чтобы не обрабатывать 1 сообщение более 1 раза
                    ChNold = messageID;
                }
            }
            //делаем true после первой итерации
            temp = true;
        }
コード例 #17
0
        /// <summary>
        /// Метод для чтения сообщений в чате плом
        /// </summary>
        public void ReadChat_3()
        {
            //узнаем начало чата
            int ChS = CalcMethods.CalcInt32Value(oph, Offsets.СhatStart);
            //узнаем количество сообщений в памяти клиента
            int ChN = CalcMethods.CalcInt32Value(oph, Offsets.СhatNumber);

            //чистим массив сообщений и заполняем его null
            messages.Clear();
            messages = new List <Message>()
            {
                null, null, null, null, null
            };
            //в цикле заполняем массив сообщений последними 5ю сообщениями
            for (int i = ChN - 5, j = 0; i < ChN; i++, j++)
            {
                //id сообщения (каждое следующее имеет +1 к предыдущему)
                int messageID = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgId(ChS, i));
                //уникальный wid человека, оправившего сообщение
                int wid = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgWid(ChS, i));
                //тип сообщения: 1 - мирчат, 2 - группчат, 3 - кланчат, 4 - пм
                byte messageType = CalcMethods.CalcByteValue(oph, Offsets.OffsetsMsgType(ChS, i));
                //адрес и текст первой формы сообщения
                int    message_1_address = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgForm1(ChS, i));
                string message_1         = CalcMethods.CalcStringValue(oph, message_1_address);
                //адрес и текст второй формы сообщения
                int    message_2_address = CalcMethods.CalcInt32Value(oph, Offsets.OffsetsMsgForm2(ChS, i));
                string message_2         = CalcMethods.CalcStringValue(oph, message_2_address);
                //заполняем j-й элемент массива сообщений
                messages[j] = new Message(i, messageType, messageID, message_1, message_2, (uint)wid);
                //если сообщение новой и ранее не обрабатывалось, то проверяем его на наличие служебной команды
                if (messageID > ChNold)
                {
                    #region Пересбор
                    try
                    {
                        //реакция на команду "пересбор пати"
                        if (messages[j].Msg_2.IndexOf(HeadViewModel.CheckBoxSettings.Peresbor) != -1 &&
                            messages[j].Type == 2 &&
                            messages[j].Wid == 0xFFFFFFFF &&
                            temp)
                        {
                            //считаем количество людей в пати и либо собираем новую, либо пересобираем старую пати
                            int partyCount = CalcMethods.ReadInt(oph, Offsets.BaseAdress, Offsets.OffsetsCountParty);
                            if (partyCount > 0)
                            {
                                SimonSayMethods.Peresbor();
                            }
                            else
                            {
                                SimonSayMethods.QuitFromPartyFirstPl();
                                SimonSayMethods.InvitetoPartyFromPl();
                                SimonSayMethods.AcceptInviteToPartyFromPl();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        mw.Logging(new FormatText(ex.Message, Brushes.Red, 20, 1));
                    }

                    #endregion
                    //временная переменная, чтобы не обрабатывать 1 сообщение более 1 раза
                    ChNold = messageID;
                }
            }
            //делаем true после первой итерации
            temp = true;
        }