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;
            }
        }
Esempio n. 2
0
        //Фарм
        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);
        }