private void CheckWeDie() { if (Host.IsAlive() && !Host.Me.IsDeadGhost) { return; } if (!Host.MainForm.On) { return; } try { Host.log("Умер " + Host.IsAlive() + " " + Host.Me.IsDeadGhost); //1735.48, -363.99, 9.50 данж 2 220.64, -303.54, 18.53 данж 1 foreach (var myObstacleDic in Host.DicObstaclePic) { Host.RemoveObstacle(myObstacleDic.Value.Id); } Host.DicObstaclePic.Clear(); Host.MyDelBigObstacle(true); if (!Host.Me.IsDeadGhost) { if (Host.CommonModule.AttackPlayer) { EventDeathPlayer = true; if (!Host.Me.IsAlive && Host.AutoQuests.BestMultizone != null) { if (Host.AutoQuests.DictionaryDeadMultiZone.ContainsKey(Host.AutoQuests.BestMultizone.Id)) { Host.AutoQuests.DictionaryDeadMultiZone[Host.AutoQuests.BestMultizone.Id]++; } } } else { EventDeath = true; } } Host.FarmModule.BestMob = null; Host.FarmModule.BestProp = null; FarmState = FarmState.Disabled; Host.CancelMoveTo(); if (!Host.IsAlive()) { Thread.Sleep(3000); } if (!Host.Me.IsDeadGhost) { if (Host.CommonModule.AttackPlayer) { DeadCountInPvp++; } else { DeadCount++; } Host.CommonModule.AttackPlayer = false; if (Host.MapID == 189 && Host.CharacterSettings.PikPocket) { if (Host.Me.Distance(220.64, -303.54, 18.53) < 500) { IsWing1 = false; } else { IsWing1 = true; } } if (!Host.ReturnToRevivalBasePoint()) { Host.log("IsAlive: " + Host.IsAlive(Host.Me) + " Воскрешение не удачно " + Host.GetLastError(), LogLvl.Error); return; } else { Thread.Sleep(1000); while (Host.GameState != EGameState.Ingame) { Thread.Sleep(1000); } while (!Host.CheckCanUseGameActions()) { Thread.Sleep(1000); } } } if (Host.MapID == 1760 || Host.MapID == 1904) { Thread.Sleep(30000); // host.FarmModule.farmState = FarmState.AttackOnlyAgro; return; } Host.CommonModule.ResumeMove(); Host.log("Ищу свой труп " + Host.ReviveCorpseInfo.IsValid + " " + Host.ReviveCorpseInfo.Location + " " + Host.ReviveCorpseInfo.MapId); if (Host.ReviveCorpseInfo.Location == Vector3F.Zero) { Host.log("Не нашел труп", LogLvl.Error); return; } var begin = DateTime.Now; var end = DeathTime; var rez = begin - end; Host.log("Последняя смерть " + rez.TotalMinutes); var min = 3; if (Host.CharacterSettings.Mode == Mode.Questing || Host.CharacterSettings.Mode == Mode.QuestingClassic) { min = 1; } if (Host.CharacterSettings.PikPocket) { if (Host.MyIsNeedSell()) { MyReviveWithNpc(); return; } min = 1; } if (Host.CharacterSettings.Mode == Mode.QuestingClassic) { if (Host.MyIsNeedRepair()) { MyReviveWithNpc(); return; } } if (rez.TotalMinutes < min) { MyReviveWithNpc(); return; } else { Host.log("Бегу к трупу"); if (Host.MapID != Host.ReviveCorpseInfo.MapId) { if (!Host.CommonModule.MoveTo(Host.ReviveCorpseInfo.Location, 0)) { return; } if (Host.ReviveCorpseInfo.MapId == 429) { if (!Host.CommonModule.MoveTo(-3735.73, 934.64, 161.01, 0)) { return; } } if (Host.ReviveCorpseInfo.MapId == 189) { if (IsWing1) { if (!Host.CommonModule.MoveTo(2866.74, -821.74, 160.33, 0) ) // 2884.65, -836.56, 160.33 данж 2 { return; } var scriptName = AppDomain.CurrentDomain.BaseDirectory + "Plugins\\Script\\wing1.xml"; Host.log("Применяю скрипт: " + scriptName, LogLvl.Ok); var reader = new XmlSerializer(typeof(DungeonSetting)); using (var fs = File.Open(scriptName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { Host.DungeonSettings = (DungeonSetting)reader.Deserialize(fs); } } else { if (!Host.CommonModule.MoveTo(2884.65, -836.56, 160.33, 0)) // данж 2 { return; } var scriptName = AppDomain.CurrentDomain.BaseDirectory + "Plugins\\Script\\wing2.xml"; Host.log("Применяю скрипт: " + scriptName, LogLvl.Ok); var reader = new XmlSerializer(typeof(DungeonSetting)); using (var fs = File.Open(scriptName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)) { Host.DungeonSettings = (DungeonSetting)reader.Deserialize(fs); } } } Thread.Sleep(1000); Host.MyMoveForvard(2000); return; } else { if (!Host.CommonModule.MoveTo(Host.ReviveCorpseInfo.Location, 35)) { return; } Thread.Sleep(3000); while (true) { Thread.Sleep(1000); if (!Host.MainForm.On) { return; } var res = true; foreach (var entity in Host.GetEntities <Player>()) { if (entity.Team == Host.Me.Team) { continue; } Host.log("Враг " + entity.Name + " " + Host.Me.Distance(entity), LogLvl.Error); res = false; } if (!res) { Host.log("Не воскрешаюсь, рядом враг "); } break; } var zone = new RoundZone(Host.ReviveCorpseInfo.Location.X, Host.ReviveCorpseInfo.Location.Y, 38); var timer = new Stopwatch(); timer.Start(); var distres = 35; while (true) { if (!Host.MainForm.On) { return; } Thread.Sleep(10); if (timer.ElapsedMilliseconds > 60000) { break; } if (distres > 10) { distres--; } var findNewPoint = false; foreach (var entity in Host.GetEntities <Unit>()) { if (!entity.IsAlive) { continue; } if (Host.Me.Distance(entity) > distres) { continue; } if (entity.Level < 4) { continue; } var zRange = Math.Abs(Host.Me.Location.Z - entity.Location.Z); if (zRange > 5) { continue; } findNewPoint = true; } if (findNewPoint) { var randPoint = zone.GetRandomPoint(); var randLoc = new Vector3F(randPoint.X, randPoint.Y, Host.GetNavMeshHeight(new Vector3F(randPoint.X, randPoint.Y, Host.Me.Location.Z))); if (!Host.CommonModule.CheckPathForLoc(Host.Me.Location, randLoc)) { randLoc = Vector3F.Zero; } else { foreach (var entity in Host.GetEntities <Unit>()) { if (!entity.IsAlive) { continue; } if (randLoc.Distance(entity.Location) > distres) { continue; } if (entity.Level < 4) { continue; } var zRange = Math.Abs(Host.Me.Location.Z - entity.Location.Z); if (zRange > 5) { continue; } randLoc = Vector3F.Zero; } } if (randLoc != Vector3F.Zero) { Host.log("Нашел точку бегу в нее " + distres); Host.CommonModule.MoveTo(randLoc, 1); } else { Host.log("Не нашел точку, ищу новую"); } } else { break; } } if (!Host.ReviveWithCorpse()) { Host.log("Воскрешение возле трупа не успешно возвращаюсь на кладбище" + Host.GetLastError(), LogLvl.Error); Thread.Sleep(10000); MyReviveWithNpc(); } } } DeathTime = DateTime.Now; Thread.Sleep(2000); /* FarmState = FarmState.Disabled; * if (host.CharacterSettings.Mode == EMode.Questing) * FarmState = FarmState.AttackOnlyAgro;*/ } catch (ThreadAbortException) { } catch (Exception e) { Host.log(e.ToString()); } finally { if (!Host.Me.IsDeadGhost && Host.IsAlive()) { FarmState = FarmState.AttackOnlyAgro; } Host.NeedWaitAfterCombat = false; } }
//Фарм public void MonsterHuntClassic(Quest quest, Zone zone, List <uint> farmMobIds, int objectiveindex, Host host, double z) { var badRadius = 0; foreach (var farmMobId in farmMobIds) { host.log("Мобы для квеста " + farmMobId); var factionIds = new List <uint>(); switch (quest.Id) { case 826: break; case 837: break; case 784: break; case 789: break; default: { /* foreach (var myNpcLoc in host.MyNpcLocss.NpcLocs) * { * if (farmMobId == myNpcLoc.Id) * { * factionIds.Add(myNpcLoc.FactionId); * break; * } * }*/ } break; } host.FarmModule.FactionIds = factionIds; } host.FarmModule.SetFarmMobs(zone, farmMobIds); while (!host.AutoQuests.IsQuestCompliteClassic(quest.Id, objectiveindex) && host.FarmModule.ReadyToActions && host.FarmModule.FarmState == FarmState.FarmMobs) { Thread.Sleep(100); if (host.MyIsNeedSell()) { break; } if (host.MyIsNeedRepair()) { break; } if (host.MyIsNeedBuy()) { break; } if (host.FarmModule.BestMob == null && !host.MyIsNeedRegen()) { badRadius++; } else { badRadius = 0; } if (badRadius > 50) { if (zone.ZoneType == EZoneType.Circle) { if ((zone as RoundZone).Radius < 50) { continue; } } var loc = Vector3F.Zero; foreach (var myNpcLoc in host.MyNpcLocss.NpcLocs) { if (!farmMobIds.Contains(myNpcLoc.Id)) { continue; } foreach (var vector3F in myNpcLoc.ListLoc.OrderBy(i => host.Me.Distance2D(i))) { if (host.Me.Distance2D(vector3F) < 50) { continue; } if (!zone.PointInZone(vector3F.X, vector3F.Y)) { continue; } var bad = false; foreach (var badVector3F in BadVector3Fs) { if (vector3F.Distance(badVector3F) < 50) { bad = true; } } if (bad) { continue; } if (!host.CommonModule.CheckPathForLoc(host.Me.Location, vector3F)) { continue; } loc = vector3F; } } if (loc != Vector3F.Zero) { host.log("Не могу найти Monster 1, подбегаю к " + host.Me.Distance(loc) + " " + loc); if (host.CommonModule.MoveTo(loc, 20)) { BadVector3Fs.Add(loc); } continue; } var findPoint = zone.GetRandomPoint(); // ReSharper disable once CompareOfFloatsByEqualityOperator if (z == 0) { z = host.Me.Location.Z; } var path = host.GetSmoothPath(host.Me.Location, new Vector3F(findPoint.X, findPoint.Y, z)); if (path.Path.Count > 100) { continue; } if (!host.CommonModule.CheckPathForLoc(host.Me.Location, new Vector3F(findPoint.X, findPoint.Y, z))) { continue; } var vectorPoint = new Vector3F(findPoint.X, findPoint.Y, z); host.log("Не могу найти Monster 2, подбегаю в центр зоны " + host.Me.Distance(vectorPoint) + " " + vectorPoint); host.CommonModule.MoveTo(vectorPoint, 20); } } host.FarmModule.StopFarm(); Thread.Sleep(1000); if (host.CharacterSettings.Mode != Mode.QuestingClassic) { return; } if (host.FarmModule.FarmState == FarmState.Disabled) { return; } if (quest.Id == 835 || quest.Id == 1525 || quest.Id == 257 || quest.Id == 258 || quest.Id == 2499) { return; } var sw = new Stopwatch(); sw.Start(); if (zone.ZoneType != EZoneType.Circle) { return; } host.MainForm.SetQuestIdText("Grind 20 min"); zone = new RoundZone((zone as RoundZone).X, (zone as RoundZone).Y, 200); host.FarmModule.SetFarmMobs(zone, new List <uint>()); while (sw.ElapsedMilliseconds < 1200000 && host.FarmModule.ReadyToActions && host.FarmModule.FarmState == FarmState.FarmMobs) { Thread.Sleep(100); if (host.MyIsNeedSell()) { break; } if (host.MyIsNeedRepair()) { break; } if (host.MyIsNeedBuy()) { break; } if (host.FarmModule.BestMob == null && !host.MyIsNeedRegen()) { badRadius++; } else { badRadius = 0; } host.MainForm.SetQuestStateText(sw.Elapsed.Minutes + ":" + sw.Elapsed.Seconds); if (badRadius > 50) { if (zone.ZoneType == EZoneType.Circle) { if ((zone as RoundZone).Radius < 50) { continue; } } var loc = Vector3F.Zero; foreach (var myNpcLoc in host.MyNpcLocss.NpcLocs) { if (!farmMobIds.Contains(myNpcLoc.Id)) { continue; } foreach (var vector3F in myNpcLoc.ListLoc.OrderBy(i => host.Me.Distance2D(i))) { if (host.Me.Distance2D(vector3F) < 50) { continue; } if (!zone.PointInZone(vector3F.X, vector3F.Y)) { continue; } if (!host.CommonModule.CheckPathForLoc(host.Me.Location, vector3F)) { continue; } var bad = false; foreach (var badVector3F in BadVector3Fs) { if (vector3F.Distance(badVector3F) < 50) { bad = true; } } if (bad) { continue; } loc = vector3F; } } if (loc != Vector3F.Zero) { host.log("Не могу найти Monster 1, подбегаю к " + host.Me.Distance(loc) + " " + loc); if (host.CommonModule.MoveTo(loc, 20)) { BadVector3Fs.Add(loc); } continue; } var findPoint = zone.GetRandomPoint(); // ReSharper disable once CompareOfFloatsByEqualityOperator if (z == 0) { z = host.Me.Location.Z; } var path = host.GetSmoothPath(host.Me.Location, new Vector3F(findPoint.X, findPoint.Y, z)); if (path.Path.Count > 100) { continue; } if (!host.CommonModule.CheckPathForLoc(host.Me.Location, new Vector3F(findPoint.X, findPoint.Y, z))) { continue; } var vectorPoint = new Vector3F(findPoint.X, findPoint.Y, z); host.log("Не могу найти Monster 2, подбегаю в центр зоны " + host.Me.Distance(vectorPoint) + " " + vectorPoint); host.CommonModule.MoveTo(vectorPoint, 20); } } host.FarmModule.StopFarm(); Thread.Sleep(1000); }