//конструктор 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); }
/// <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; } }