Exemple #1
0
    private void OnGUI()
    {
        if (Application.isPlaying)
        {
            if (GUILayout.Button("Clear all"))
            {
                CombatMessageManager.Clear();
            }
            filter = EditorGUILayout.IntSlider("filter", filter, 0, 10);

            scroll = EditorGUILayout.BeginScrollView(scroll);
            for (int i = 0; i < CombatMessageManager.items.Count; i++)
            {
                int code = CombatMessageManager.items[i].code;
                if (code >= filter)
                {
                    style.normal.textColor = colors[code % colors.Length];
                    EditorGUILayout.LabelField("[" + code + "]" + CombatMessageManager.items[i].msg, style);
                }
            }
            EditorGUILayout.EndScrollView();
        }
        else
        {
            EditorGUILayout.LabelField("Press play...");
        }
    }
Exemple #2
0
        public void Initialize()
        {
            Logger.WriteInfo("Initializing ...");
            ViewModels.BaseSettings.Instance.RoutineSelectedInUi = RotationManager.CurrentRotation.ToString();
            DispelManager.Reset();
            InterruptsAndStunsManager.Reset();
            //TankBusterManager.ResetHealers();
            //TankBusterManager.ResetTanks();
            TreeRoot.OnStart += OnStart;
            TreeRoot.OnStop  += OnStop;
            CurrentZone       = WorldManager.ZoneId;
            CurrentJob        = Core.Me.CurrentJob;

            HookBehaviors();

            Application.Current.Dispatcher.Invoke(delegate
            {
                _form         = new SettingsWindow();
                _form.Closed += (sender, args) =>
                {
                    _form = null;
                };
            });

            TogglesManager.LoadTogglesForCurrentJob();
            CombatMessageManager.RegisterMessageStrategiesForClass(Core.Me.CurrentJob);
            Logger.WriteInfo("Initialized");
        }
Exemple #3
0
        public static void RegisterCombatMessages()
        {
            //Highest priority: Don't show anything if we're not in combat
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(100,
                                          "",
                                          () => !Core.Me.InCombat));

            //Second priority (tie): Bootshine
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "Bootshine: Get behind Enemy",
                                          () => Core.Me.HasAura(Auras.OpoOpoForm) && Core.Me.HasAura(Auras.LeadenFist) && !Core.Me.HasAura(Auras.PerfectBalance)));

            //Second priority (tie): TwinSnakes
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "TwinSnakes: Side of Enemy",
                                          () => Core.Me.HasAura(Auras.RaptorForm) && !Core.Me.HasAura(Auras.TwinSnakes, true, MonkSettings.Instance.TwinSnakesRefresh * 1100) && !Core.Me.HasAura(Auras.PerfectBalance)));

            //Second priority (tie): TrueStrike
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "TrueStrike: Get behind Enemy",
                                          () => Core.Me.HasAura(Auras.RaptorForm) && Core.Me.HasAura(Auras.TwinSnakes, true, MonkSettings.Instance.TwinSnakesRefresh * 1000) && !Core.Me.HasAura(Auras.PerfectBalance)));

            //Second priority (tie): DragonKick
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "DragonKick: Side of Enemy",
                                          () => Core.Me.HasAura(Auras.OpoOpoForm) && !Core.Me.HasAura(Auras.LeadenFist, true, MonkSettings.Instance.DragonKickRefresh * 1000) && !Core.Me.HasAura(Auras.PerfectBalance)));
        }
Exemple #4
0
        public static void RegisterCombatMessages()
        {
            //Highest priority: Don't show anything if we're not in combat
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(100,
                                          "",
                                          () => !Core.Me.InCombat || !Core.Me.HasTarget));

            //Second priority: Don't show anything if positional requirements are Nulled
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "",
                                          () => DragoonSettings.Instance.HidePositionalMessage || Core.Me.HasAura(Auras.TrueNorth) || DragoonSettings.Instance.EnemyIsOmni));

            //Third priority : Positional
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Chaotic Spring => BEHIND !!",
                                          "/Magitek;component/Resources/Images/General/ArrowDownHighlighted.png",
                                          () => !Core.Me.CurrentTarget.IsBehind && ActionManager.LastSpell == Spells.Disembowel));

            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Wheeling Thrust => BEHIND !!",
                                          "/Magitek;component/Resources/Images/General/ArrowDownHighlighted.png",
                                          () => !Core.Me.CurrentTarget.IsBehind && Core.Me.HasAura(Auras.EnhancedWheelingThrust)));

            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Fang & Claw => SIDE !!!",
                                          "/Magitek;component/Resources/Images/General/ArrowSidesHighlighted.png",
                                          () => !Core.Me.CurrentTarget.IsFlanking && Core.Me.HasAura(Auras.SharperFangandClaw)));
        }
Exemple #5
0
 private void OnCollision(Transform other)
 {
     if (other.transform.GetComponent <Fighter>())
     {
         Fighter f = other.transform.GetComponent <Fighter>();
         CombatMessageManager.AddMessage("Bullet collision with fighter." + transform.name + " - " + f.name, 0);
         if (f.data.stats.alliance != stats.alliance)
         {
             CombatMessageManager.AddMessage("Bullet collision with enemy fighter." + transform.name + " - " + f.name, 1);
             GameManager.Instance.fighterBehaviour.ApplyDmg(stats.damage, f);
             Destroy(gameObject);
         }
     }
     if (other.transform.GetComponent <StationModule>())
     {
         StationModule f = other.transform.GetComponent <StationModule>();
         CombatMessageManager.AddMessage("Bullet collision with station." + transform.name + " - " + f.name, 0);
         if (f.stats.alliance != stats.alliance)
         {
             CombatMessageManager.AddMessage("Bullet collision with enemy station." + transform.name + " - " + f.name, 1);
             GameManager.Instance.fighterBehaviour.ApplyDmg(stats.damage, f);
             Destroy(gameObject);
         }
     }
 }
Exemple #6
0
        public static void RegisterCombatMessages(StateMachine <RdmStateIds> stateMachine)
        {
            Func <bool> bossPresenceOk = () => !RedMageSettings.Instance.MeleeComboBossesOnly || Combat.Enemies.Any(e => e.IsBoss());
            Func <bool> InMeleeCombo   = () => mComboStates.Contains(RdmStateMachine.StateMachine.CurrentState);

            //Highest priority: Don't show anything if we're not in combat
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(100,
                                          "",
                                          () => !Core.Me.InCombat));

            //Second priority: Melee combo is ready
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "Combo Ready!",
                                          () => stateMachine.CurrentState == RdmStateIds.ReadyForCombo &&
                                          SmUtil.SyncedLevel >= Spells.Redoublement.LevelAcquired &&
                                          bossPresenceOk()));

            //Third priority (tie): Melee combo will be ready soon (full combo, no manafication)
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Combo Soon",
                                          () => WithinManaOf(11, 50) &&
                                          SmUtil.SyncedLevel >= Spells.Redoublement.LevelAcquired &&
                                          !InMeleeCombo() &&
                                          bossPresenceOk()));

            //Third priority (tie): Melee combo will be ready soon (full combo, manafication)
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Combo Soon",
                                          () => !WithinManaOf(0, RedMageSettings.Instance.ManaficationMaximumBlackAndWhiteMana) &&
                                          ((WithinManaOf(0, RedMageSettings.Instance.ManaficationMinimumBlackAndWhiteMana) &&
                                            Spells.Manafication.Cooldown.TotalMilliseconds <= 1000) ||
                                           (WithinManaOf(11, RedMageSettings.Instance.ManaficationMinimumBlackAndWhiteMana) &&
                                            !WithinManaOf(0, RedMageSettings.Instance.ManaficationMinimumBlackAndWhiteMana) &&
                                            Spells.Manafication.Cooldown.TotalMilliseconds <= 5000)) &&
                                          ManaficationEnabled &&
                                          Spells.Manafication.Cooldown.TotalMilliseconds == 0 &&
                                          !InMeleeCombo() &&
                                          bossPresenceOk()));

            //Third priority (tie): Melee combo will be ready soon (no redoublement)
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Combo Soon",
                                          () => WithinManaOf(11, 35) &&
                                          SmUtil.SyncedLevel < Spells.Redoublement.LevelAcquired &&
                                          SmUtil.SyncedLevel >= Spells.Zwerchhau.LevelAcquired &&
                                          !InMeleeCombo() &&
                                          bossPresenceOk()));
        }
    void ApplyDmg(int dmg, UnitStats stats, GameObject source, IDestructible destructibleSource)
    {
        if (dmg == 0 || stats == null)
        {
            return;
        }
        int nextShield = Mathf.Clamp(stats.shields - dmg, 0, stats.shields);
        int nextHp     = stats.health - Mathf.CeilToInt((Mathf.Clamp(dmg - stats.shields, 0, dmg)) * (1f - stats.armor));

        CombatMessageManager.AddMessage("DMG: " + dmg + " armor(hp):" + (100 - stats.armor * 100) +
                                        string.Format("Set shields on {0} {1} -> {2}", source.name, stats.shields, nextShield) +
                                        "Set hp on " + source.name + " " + stats.health + " -> " + nextHp, 10);
        stats.SetShields(nextShield, source);
        stats.SetHp(nextHp, source, destructibleSource);
    }
Exemple #8
0
        public void OnStart(BotBase bot)
        {
            // Reset Zoom Limit based on ZoomHack Setting
            ZoomHack.Toggle();

            Logic.OpenerLogic.InOpener = false;
            Logic.OpenerLogic.OpenerQueue.Clear();
            Logic.SpellQueueLogic.SpellQueue.Clear();

            // Apply the gambits we have
            GambitsViewModel.Instance.ApplyGambits();
            OpenersViewModel.Instance.ApplyOpeners();
            OverlayManager.StartMainOverlay();
            OverlayManager.StartCombatMessageOverlay();
            CombatMessageManager.RegisterMessageStrategiesForClass(Core.Me.CurrentJob);
            HookBehaviors();
        }
Exemple #9
0
        public static void RegisterCombatMessages()
        {
            //Highest priority: Don't show anything if we're not in combat
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(100,
                                          "",
                                          () => !Core.Me.InCombat || !Core.Me.HasTarget)
                );

            //Second priority: Don't show anything if positional requirements are Nulled
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "",
                                          () => ReaperSettings.Instance.HidePositionalMessage || Core.Me.HasAura(Auras.TrueNorth) || ReaperSettings.Instance.EnemyIsOmni || Core.Me.HasAura(Auras.Enshrouded))
                );

            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Gibbet => SIDE !!!",
                                          "/Magitek;component/Resources/Images/General/ArrowSidesHighlighted.png",
                                          () => ReaperSettings.Instance.UseGibbet && Core.Me.HasAura(Auras.SoulReaver) && !Core.Me.HasAura(Auras.EnhancedGibbet) && !Core.Me.HasAura(Auras.EnhancedGallows) && Spells.TrueNorth.Charges < 1 && !Core.Me.CurrentTarget.IsFlanking)
                );

            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Gallows => BEHIND !!!",
                                          "/Magitek;component/Resources/Images/General/ArrowDownHighlighted.png",
                                          () => ReaperSettings.Instance.UseGallows && Core.Me.HasAura(Auras.SoulReaver) && !Core.Me.HasAura(Auras.EnhancedGibbet) && !Core.Me.HasAura(Auras.EnhancedGallows) && Spells.TrueNorth.Charges < 1 && !Core.Me.CurrentTarget.IsBehind)
                );

            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(310,
                                          "Gibbet => SIDE !!!",
                                          "/Magitek;component/Resources/Images/General/ArrowSidesHighlighted.png",
                                          () => ReaperSettings.Instance.UseGibbet && Core.Me.HasAura(Auras.EnhancedGibbet) && !Core.Me.HasAura(Auras.EnhancedGallows) &&
                                          (Core.Me.HasAura(Auras.SoulReaver) || ActionResourceManager.Reaper.SoulGauge >= 40) && Spells.TrueNorth.Charges < 1 && !Core.Me.CurrentTarget.IsFlanking)
                );

            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(310,
                                          "Gallows => BEHIND !!!",
                                          "/Magitek;component/Resources/Images/General/ArrowDownHighlighted.png",
                                          () => ReaperSettings.Instance.UseGallows && Core.Me.HasAura(Auras.EnhancedGallows) && !Core.Me.HasAura(Auras.EnhancedGibbet) &&
                                          (Core.Me.HasAura(Auras.SoulReaver) || ActionResourceManager.Reaper.SoulGauge >= 40) && Spells.TrueNorth.Charges < 1 && !Core.Me.CurrentTarget.IsBehind)
                );
        }
Exemple #10
0
        public static void RegisterCombatMessages()
        {
            //Highest priority: Don't show anything if we're not in combat
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(100,
                                          "",
                                          () => !Core.Me.InCombat));

            //Second priority: Don't show anything if positional requirements are Nulled
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(200,
                                          "",
                                          () => MonkSettings.Instance.HidePositionalToastsWithTn && Core.Me.HasAura(Auras.TrueNorth) || Core.Me.HasAura(Auras.RiddleOfEarth)));

            //Third priority (tie): Bootshine
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "Bootshine: Get behind Enemy",
                                          () => Core.Me.HasAura(Auras.OpoOpoForm) && Core.Me.HasAura(Auras.LeadenFist)));

            //Third priority (tie): TwinSnakes
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "TwinSnakes: Side of Enemy",
                                          () => Core.Me.HasAura(Auras.RaptorForm) && !Core.Me.HasAura(Auras.TwinSnakes, true, MonkSettings.Instance.TwinSnakesRefresh * 1100)));

            //Third priority (tie): TrueStrike
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "TrueStrike: Get behind Enemy",
                                          () => Core.Me.HasAura(Auras.RaptorForm) && Core.Me.HasAura(Auras.TwinSnakes, true, MonkSettings.Instance.TwinSnakesRefresh * 1000)));

            //Third priority (tie): SnapPunch
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "SnapPunch: Side of Enemy",
                                          () => Core.Me.HasAura(Auras.CoeurlForm) && Core.Me.CurrentTarget.HasAura(Auras.Demolish, true, MonkSettings.Instance.DemolishRefresh * 1000)));

            //Third priority (tie): DragonKick
            CombatMessageManager.RegisterMessageStrategy(
                new CombatMessageStrategy(300,
                                          "DragonKick: Side of Enemy",
                                          () => Core.Me.HasAura(Auras.OpoOpoForm) && !Core.Me.HasAura(Auras.LeadenFist, true, MonkSettings.Instance.DragonKickRefresh * 1000)));
        }
Exemple #11
0
        public void Pulse()
        {
            #region Job switching because events aren't reliable apparently
            if (CurrentJob != Core.Me.CurrentJob)
            {
                // Set our current job
                CurrentJob = Core.Me.CurrentJob;
                Logger.WriteInfo("Job Changed");

                // Run the shit we need to
                Application.Current.Dispatcher.Invoke(delegate
                {
                    GambitsViewModel.Instance.ApplyGambits();
                    OpenersViewModel.Instance.ApplyOpeners();
                    TogglesManager.LoadTogglesForCurrentJob();
                });

                HookBehaviors();
                DispelManager.Reset();
                InterruptsAndStunsManager.Reset();
                CombatMessageManager.RegisterMessageStrategiesForClass(Core.Me.CurrentJob);
                //TankBusterManager.ResetHealers();
                //TankBusterManager.ResetTanks();
            }
            #endregion

            #region Zone switching because events aren't reliable apparently

            if (WorldManager.ZoneId != CurrentZone)
            {
                // Set the current zone
                CurrentZone = WorldManager.ZoneId;

                // Run the shit we need to
                GambitsViewModel.Instance.ApplyGambits();
                OpenersViewModel.Instance.ApplyOpeners();
            }

            #endregion

            Tracking.Update();
            Combat.AdjustCombatTime();
            Combat.AdjustDutyTime();

            Debug.Instance.InCombatTime          = (long)Combat.CombatTime.Elapsed.TotalSeconds;
            Debug.Instance.OutOfCombatTime       = (int)Combat.OutOfCombatTime.Elapsed.TotalSeconds;
            Debug.Instance.InCombatMovingTime    = (int)Combat.MovingInCombatTime.Elapsed.TotalSeconds;
            Debug.Instance.NotMovingInCombatTime = (int)Combat.NotMovingInCombatTime.Elapsed.TotalSeconds;
            Debug.Instance.DutyTime      = (long)Combat.DutyTime.Elapsed.TotalSeconds;
            Debug.Instance.DutyState     = Duty.State();
            Debug.Instance.CastingGambit = Casting.CastingGambit;

            if (BaseSettings.Instance.DebugHealingLists)
            {
                Debug.Instance.CastableWithin10 = new ObservableCollection <GameObject>(Group.CastableAlliesWithin10);
                Debug.Instance.CastableWithin15 = new ObservableCollection <GameObject>(Group.CastableAlliesWithin15);
                Debug.Instance.CastableWithin30 = new ObservableCollection <GameObject>(Group.CastableAlliesWithin30);
            }

            if (Core.Me.InCombat)
            {
                Debug.Instance.InCombatTimeLeft = Combat.CombatTotalTimeLeft;
                //Debug.Instance.Enmity = new AsyncObservableCollection<Enmity>(EnmityManager.EnmityList);
            }

            if (Core.Me.HasTarget)
            {
                if (BaseSettings.Instance.DebugEnemyInfo)
                {
                    Debug.Instance.IsBoss = XivDataHelper.BossDictionary.ContainsKey(Core.Me.CurrentTarget.NpcId) ? "True" : "False";
                    Debug.Instance.TargetCombatTimeLeft = Core.Me.CurrentTarget.CombatTimeLeft();
                }
            }

            if (DateTime.Now < _pulseLimiter)
            {
                return;
            }
            _pulseLimiter = DateTime.Now.AddSeconds(1);

            if (DateTime.Now > _saveFormTime)
            {
                Dispelling.Instance.Save();
                InterruptsAndStuns.Instance.Save();
                BaseSettings.Instance.Save();
                //TankBusters.Instance.Save();
                TogglesViewModel.Instance.SaveToggles();

                #region Save Settings For All Routines

                Task.Run(SaveJobSettings);

                #endregion

                _saveFormTime = DateTime.Now.AddSeconds(60);
            }

            CombatMessageManager.UpdateDisplayedMessage();
        }