Exemplo n.º 1
0
        public bool ObtainKI()
        {
            Combat.LoadBlacklist(fface.Player.Zone);
            Combat.LoadCoords(fface.Player.Zone);
            Combat.LoadHotspots(fface.Player.Zone);
            List <Hotspot> hotspots     = Combat.GetHotspots();
            List <Node>    path         = new List <Node>();
            int            hotspotIndex = 0;

            List <Monster> targets = new List <Monster>();

            targets.Add(roeTargetMonster);
            targets.Add(new Monster()
            {
                HitBox       = 4.5,
                MonsterName  = "Korrigan",
                TimeSpecific = false
            });


            while (!HasKeyItem() && _ambuscade)
            {
NoPath:
                if (HasKeyItem())
                {
                    goto done;
                }

                hotspotIndex = (hotspotIndex + 1) % hotspots.Count;
                float destx = hotspots[hotspotIndex].Waypoint.X;
                float destz = hotspots[hotspotIndex].Waypoint.Z;


NewPath:
                path = Combat.GetPath(destx, destz);

                if (path == null)
                {
                    goto NoPath;
                }

                float targetx;
                float targetz;

                while (path.Any() && !HasKeyItem() && _ambuscade)
                {
                    foreach (Monster m in targets)
                    {
                        _targetId = Combat.FindTarget(50, m.MonsterName);

                        if (_targetId > 0 && !HasKeyItem())
                        {
                            fface.Navigator.Reset();
                            Fight(_targetId, Combat.Mode.Meshing);
                            _targetId = 0;
                            goto NewPath;
                        }
                    }

                    fface.Navigator.HeadingTolerance  = 1;
                    fface.Navigator.DistanceTolerance = 0.7;
                    targetx = path[0].X;
                    targetz = path[0].Z;
                    path.RemoveAt(0);
                    fface.Navigator.Goto(() => targetx, () => targetz, path.Any());
                }
                fface.Navigator.Reset();
                Thread.Sleep(1);
            }
done:
            fface.Navigator.Reset();
            return(true);
        }
Exemplo n.º 2
0
        public void DoTask()
        {
            while (_ambuscade)
            {
                // Wait for all palyers to start.
                while (!_proceed && _ambuscade)
                {
                    Thread.Sleep(100);
                }
                _proceed = false;
                Thread.Sleep(1000);

                if (!job.Tracking())
                {
                    job.TrackBuffs(true);
                }

                if (_KeyCapped && _initialKeyItem)
                {
                    _proceed = true;
                    goto SkipRoEFarming;
                }

                // Travel to Home Point then RoE Zone.
                client.Send("RELAY TASK 1 0");
                DoRoute(_route2);
                NavigateToZone(_hpMenuItemString, 41);


                // Wait for all players to arrive at the RoE Zone.
                while (!_proceed && _ambuscade)
                {
                    Thread.Sleep(100);
                }
                _proceed = false;

                // Farm Key Item, then ReturnHome()
                //DoRoute(_route3, true);
                client.Send("RELAY TASK 5 0"); // -- obtain KI
                ObtainKI();
                fface.Navigator.Reset();
                Thread.Sleep(4000);
                client.Send("RELAY TASK 6 0"); // -- tell players to stop farming KI


                while (!_proceed && _ambuscade)
                {
                    Thread.Sleep(100);
                }
                _proceed = false;

                Thread.Sleep(3500); // allow time to disengage

                // Tell clients to return home!
                client.Send("RELAY TASK 2 0");
                ReturnHome();

                // Wait for everyone to return home.
                while (!_proceed && _ambuscade)
                {
                    Thread.Sleep(100);
                }

SkipRoEFarming:

                // Run to the book, and enter legion.
                DoRoute(_route1);
                DoEntry();

                // Wait until I'm in legion to proceed.
                while (fface.Player.Zone != Zone.Maquette_Abdhaljs_Legion && _ambuscade)
                {
                    Thread.Sleep(100);
                }

                // Once in Legion, wait for everything to load.
                Thread.Sleep(15000);

                // Add trusts to the party.
                if (fface.Party.Party0Count < 6 && _ambuscade)
                {
                    SummonTrusts();
                }

                // Look for a target
                List <TargetInfo> targs = Combat.FindTarget(ambuscadeTargetMonster.MonsterName);
                while (!targs.Any() && _ambuscade)
                {
                    targs = Combat.FindTarget(ambuscadeTargetMonster.MonsterName);
                    Thread.Sleep(1);
                }

                if (targs.Any() && _ambuscade)
                {
                    // Fight le target.
                    Fight(targs[0].Id, Combat.Mode.None);
                }

                _hasKeyItem     = false;
                _KeyCapped      = false;
                _initialKeyItem = false;

                while (fface.Player.Zone != Zone.Mhaura && _ambuscade)
                {
                    Thread.Sleep(100);
                }

                // After fighting the target, loop back to the start.
                Thread.Sleep(15000);
            }
        }
Exemplo n.º 3
0
        public void NetworkTask(AmbuscadeTaskType task, int parameter = 0)
        {
            if (!_ambuscade)
            {
                return;
            }

            if (!job.Tracking())
            {
                job.TrackBuffs(true);
            }

            switch (task)
            {
            case AmbuscadeTaskType.GotoMonsterZone:
            {
                WriteLog($"[TASK] >> PERFORMING ({task}) ...");
                DoRoute(_route2);
                NavigateToZone(_hpMenuItemString, 41);
                client.Send("DOCK_ROE");
                WriteLog($"[REPLY] >> TASK COMPLETED ({task})");
                break;
            }

            case AmbuscadeTaskType.ReturnHome:
            {
                WriteLog($"[TASK] >> PERFORMING ({task}) ...");
                ReturnHome();
                client.Send("DOCK_MHAURA");
                WriteLog($"[REPLY] >> TASK COMPLETED ({task})");
                break;
            }

            case AmbuscadeTaskType.Fight:
            {
                WriteLog($"[TASK] >> PERFORMING ({task}) ...");
                if (fface.Player.Zone == Zone.Maquette_Abdhaljs_Legion)
                {
                    _hasKeyItem     = false;
                    _initialKeyItem = false;
                    _KeyCapped      = false;
                }
                Fight(parameter, Combat.Mode.None);
                WriteLog($"[REPLY] >> TASK COMPLETED ({task})");
                break;
            }

            case AmbuscadeTaskType.CancelEngage:
            {
                WriteLog($"[TASK] >> PERFORMING ({task}) ...");
                Combat.Interrupt();
                WriteLog($"[REPLY] >> TASK COMPLETED ({task})");
                break;
            }

            case AmbuscadeTaskType.ObtainKI:
            {
                WriteLog($"[TASK] >> PERFORMING ({task}) ...");
                ObtainKI();
                client.Send("DOCK_KI");
                WriteLog($"[REPLY] >> TASK COMPLETED ({task}) (Everyone has a KI!)");

                break;
            }

            case AmbuscadeTaskType.CappedKI:
            {
                WriteLog($"[TASK] >> PERFORMING ({task}) ...");
                _KeyCapped = true;
                if (Combat.InCombat)
                {
                    WriteLog("[TASK INFO] I'm in Combat, and attempting to stop Combat!");
                    Combat.Interrupt();
                }
                else
                {
                    WriteLog("[TASK INFO] I'm not currently in combat! .. Waiting for CappedKI to Complete");
                }
                if (!job.Engages() && Combat.InCombat)
                {
                    WriteLog("[TASK INFO INNER] Attempting to Interrupt Combat...");
                    Combat.Interrupt();
                }
                WriteLog($"[REPLY] >> TASK COMPLETED ({task})");
                break;
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(task), task, null);
            }
            WriteLog("[TASK] >> IDLE. Waiting for a new task...");
            _inTask = false;
        }