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..."); } }
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"); }
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))); }
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))); }
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); } } }
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); }
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(); }
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) ); }
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))); }
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(); }