/// <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; }
/// <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; }