using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; using System.Windows.Forms; using robotManager.Helpful; using robotManager.Products; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; public class Main : wManager.Plugin.IPlugin { private bool _isLaunched; private bool _lastIsDead; private Stopwatch _lastDeadTime = new Stopwatch(); private List _dieCount = new List(); private bool _useSpiritHealer { get { return wManager.wManagerSetting.CurrentSetting.UseSpiritHealer; } set { wManager.wManagerSetting.CurrentSetting.UseSpiritHealer = value; } } private SpiritHealerWhenSettings _settings { get { if (SpiritHealerWhenSettings.CurrentSetting == null) SpiritHealerWhenSettings.Load(); return SpiritHealerWhenSettings.CurrentSetting; } } public void Initialize() { Reset(); _isLaunched = true; Logging.Write("[SpiritHealerWhen] Started."); while (_isLaunched && Products.IsStarted) { try { if (Conditions.InGameAndConnected) { if (Conditions.ProductInPause) { Reset(); } else { Update(); } } } catch (Exception e) { Logging.WriteError("[SpiritHealerWhen] while: "); } Thread.Sleep(1000); } } public void Dispose() { _isLaunched = false; Logging.Write("[SpiritHealerWhen] Stopped."); } public void Settings() { _settings.ToForm(); _settings.Save(); MessageBox.Show("[SpiritHealerWhen] Settings saved."); } void Reset() { _lastIsDead = false; _lastDeadTime.Stop(); _useSpiritHealer = false; _dieCount.RemoveAll(d => d < Others.Times - (1000 * 60 * 15)); } void Update() { if (ObjectManager.Me.IsDeadMe) { if (!_lastIsDead) { _lastDeadTime.Restart(); _dieCount.Add(Others.Times); _lastIsDead = true; } Check(); } else Reset(); } void Check() { if (_dieCount.Count(d => d > Others.Times - (1000 * 60 * 15)) > _settings.MaxDieCountIn15Minutes) { if (!_useSpiritHealer) { _useSpiritHealer = true; Logging.WriteDebug("[SpiritHealerWhen] Use spirit healer, player die " + _dieCount.Count(d => d > Others.Times - (1000 * 60 * 15)) + " times in the last 15 minutes."); } } else if (_lastDeadTime.Elapsed.Minutes >= _settings.DeathSinceMinute) { if (!_useSpiritHealer) { _useSpiritHealer = true; Logging.WriteDebug("[SpiritHealerWhen] Use spirit healer, player death since" + _lastDeadTime.Elapsed.Minutes + " minutes."); } } else _useSpiritHealer = false; } } public class SpiritHealerWhenSettings : Settings { public SpiritHealerWhenSettings() { MaxDieCountIn15Minutes = 3; DeathSinceMinute = 10; } public static SpiritHealerWhenSettings CurrentSetting { get; set; } public bool Save() { try { return Save(AdviserFilePathAndName("SpiritHealerWhen", ObjectManager.Me.Name + "." + Usefuls.RealmName)); } catch (Exception e) { Logging.WriteError("SpiritHealerWhenSettings > Save(): " + e); return false; } } public static bool Load() { try { if (File.Exists(AdviserFilePathAndName("SpiritHealerWhen", ObjectManager.Me.Name + "." + Usefuls.RealmName))) { CurrentSetting = Load(AdviserFilePathAndName("SpiritHealerWhen", ObjectManager.Me.Name + "." + Usefuls.RealmName)); return true; } } catch (Exception e) { Logging.WriteError("SpiritHealerWhenSettings > Load(): " + e); } if (CurrentSetting == null) CurrentSetting = new SpiritHealerWhenSettings(); return false; } [Setting] [Category("Settings")] [DisplayName("When death since more")] [Description("Use Spirit Healer when death since more than X minutes")] public double DeathSinceMinute { get; set; } [Setting] [Category("Settings")] [DisplayName("When die more than")] [Description("Use Spirit Healer when die more than X times in the last 15 minutes")] public int MaxDieCountIn15Minutes { get; set; } }