private void SelfHealBuffBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (((ViewModel)this.DataContext).SelectedBot != null && selfHealBuffBox.SelectedIndex != -1) { SelfHealRulesListBox.SelectedIndex = -1; var newNuke = new SelfHealBuffRule(((ViewModel)this.DataContext).SelectedBot.PlayerData) { Enabled = true, NukeType = (NukeType)((ViewModel)this.DataContext).SelectedBot.Engine.SelfHealBuffHandler.NukeTypeToAdd }; int index = selfHealBuffBox.SelectedIndex; int nukeId = ((MultiThreadObservableCollection <dynamic>)selfHealBuffBox.ItemsSource)[index].Id; newNuke.SelfHealBuffId = nukeId; ((ViewModel)this.DataContext).SelectedBot.Engine.SelfHealBuffHandler.SelectedRule = newNuke; } }
private void SelfHealBuffRulesListBox_Drop(object sender, DragEventArgs e) { SelfHealBuffRule droppedData = e.Data.GetData(typeof(SelfHealBuffRule)) as SelfHealBuffRule; SelfHealBuffRule target = ((ListBoxItem)(sender)).DataContext as SelfHealBuffRule; int removedIdx = SelfHealRulesListBox.Items.IndexOf(droppedData); int targetIdx = SelfHealRulesListBox.Items.IndexOf(target); if (removedIdx < targetIdx) { MainWindow.ViewModel.SelectedBot.Engine.SelfHealBuffHandler.NukesToUse.Insert(targetIdx + 1, droppedData); MainWindow.ViewModel.SelectedBot.Engine.SelfHealBuffHandler.NukesToUse.RemoveAt(removedIdx); } else { int remIdx = removedIdx + 1; if (MainWindow.ViewModel.SelectedBot.Engine.SelfHealBuffHandler.NukesToUse.Count + 1 > remIdx) { MainWindow.ViewModel.SelectedBot.Engine.SelfHealBuffHandler.NukesToUse.Insert(targetIdx, droppedData); MainWindow.ViewModel.SelectedBot.Engine.SelfHealBuffHandler.NukesToUse.RemoveAt(remIdx); } } }
public SelfHealBuffRule GetRuleForCast(bool inCombat) { if (Math.Abs(Environment.TickCount - _timeStamp) < 50) { return(_latestRule); } _timeStamp = Environment.TickCount; SelfHealBuffRule nuke = null; foreach (var nukeRule in NukesToUse) { if ((nukeRule.NukeType == NukeType.Item ? !_data.Inventory.Any(item => item.Value.ItemId == nukeRule.SelfHealBuffId) : false) || (nukeRule.NukeType == NukeType.Skill ? !_data.Skills.Any(skill => skill.Value.SkillId == nukeRule.SelfHealBuffId) : false)) { continue; } GameFigure condFigure = _data.MainHero; if (!nukeRule.Enabled) { continue; } //cond checks if (condFigure != null) { if (nukeRule.HealthPercentOver > 0 && nukeRule.HealthPercentOver > condFigure.HealthPercent) { continue; } if (nukeRule.HealthPercentBelow > 0 && nukeRule.HealthPercentBelow < condFigure.HealthPercent) { continue; } if (nukeRule.ManaPercentOver > 0 && nukeRule.ManaPercentOver > condFigure.ManaPercent) { continue; } if (nukeRule.ManaPercentBelow > 0 && nukeRule.ManaPercentBelow < condFigure.ManaPercent) { continue; } if (condFigure is MainHero && nukeRule.CombatPointsPercentOver > 0 && nukeRule.CombatPointsPercentOver > condFigure.CombatPointsPercent) { continue; } if (condFigure is MainHero && nukeRule.CombatPointsPercentBelow > 0 && nukeRule.CombatPointsPercentBelow < condFigure.CombatPointsPercent) { continue; } } condFigure = _data.MainHero.PlayerSummons.Count > 0 ? _data.MainHero.PlayerSummons.First() : null; if (condFigure != null) { if (nukeRule.PetHealthPercentOver > 0 && nukeRule.PetHealthPercentOver > condFigure.HealthPercent) { continue; } if (nukeRule.PetHealthPercentBelow > 0 && nukeRule.PetHealthPercentBelow < condFigure.HealthPercent) { continue; } if (nukeRule.PetManaPercentOver > 0 && nukeRule.PetManaPercentOver > condFigure.ManaPercent) { continue; } if (nukeRule.PetManaPercentBelow > 0 && nukeRule.PetManaPercentBelow < condFigure.ManaPercent) { continue; } } if (nukeRule.PetSummonCountBelow > 0 && _data.MainHero.PlayerSummons.Count >= nukeRule.PetSummonCountBelow) { continue; } if (Math.Abs(Environment.TickCount - nukeRule.LastUsed) < nukeRule.Interval * 1000) { continue; } if (nukeRule.HasDeathPenalty && _data.MainHero.DeathPenaltyLevel == 0) { continue; } if (nukeRule.UseIfBuffIsMissing && nukeRule.SelectedBuffsStr.Trim().Length > 0 && nukeRule.SelectedBuffsFilter.Any( buffRule => buffRule.Enable && _data.MainHero.Buffs.Any( buff => buff.Value.BuffName.Equals(buffRule.Name, StringComparison.OrdinalIgnoreCase)))) { var rule = nukeRule.SelectedBuffsFilter.FirstOrDefault( buffRule => buffRule.Enable && _data.MainHero.Buffs.Any( buff => buff.Value.BuffName.Equals(buffRule.Name, StringComparison.OrdinalIgnoreCase))); if (rule == null) { continue; } var name = rule.Name; if (nukeRule.TimerCheckActivated) { var seconds = _data.MainHero.Buffs.First( buff => buff.Value.BuffName.Equals(name, StringComparison.OrdinalIgnoreCase)) .Value.SecondsLeft; if (nukeRule.TimerComparisonTypeEnum == ComparisonType.Less && seconds > nukeRule.TimerSeconds) { continue; } else if (nukeRule.TimerComparisonTypeEnum == ComparisonType.More && seconds < nukeRule.TimerSeconds) { continue; } } if (nukeRule.SkillLevelComparisonActivated) { var level = _data.MainHero.Buffs.First( buff => buff.Value.BuffName.Equals(name, StringComparison.OrdinalIgnoreCase)) .Value.Level; if (nukeRule.SkillLevelComparisonTypeEnum == ComparisonType.Less && level > nukeRule.SkillLevelRequired) { continue; } else if (nukeRule.SkillLevelComparisonTypeEnum == ComparisonType.More && level < nukeRule.SkillLevelRequired) { continue; } else if (nukeRule.SkillLevelComparisonTypeEnum == ComparisonType.Equal && level != nukeRule.SkillLevelRequired) { continue; } } } if (nukeRule.UseIfBuffIsMissing && nukeRule.SelectedBuffsStr.Trim().Length > 0 && !nukeRule.TimerCheckActivated && !nukeRule.SkillLevelComparisonActivated && nukeRule.SelectedBuffsFilter.Any(buffRule => buffRule.Enable && _data.MainHero.Buffs.Any(buff => buff.Value.BuffName.Equals(buffRule.Name, StringComparison.OrdinalIgnoreCase)))) { continue; } if (nukeRule.UseIfBuffIsPresent && nukeRule.SelectedBuffsStr.Trim().Length > 0 && nukeRule.SelectedBuffsFilter.Any( buffRule => buffRule.Enable && _data.MainHero.Buffs.Any( buff => buff.Value.BuffName.Equals(buffRule.Name, StringComparison.OrdinalIgnoreCase)))) { var rule = nukeRule.SelectedBuffsFilter.First( buffRule => buffRule.Enable && _data.MainHero.Buffs.Any( buff => buff.Value.BuffName.Equals(buffRule.Name, StringComparison.OrdinalIgnoreCase))); var name = rule.Name; if (nukeRule.TimerCheckActivated) { var seconds = _data.MainHero.Buffs.First( buff => buff.Value.BuffName.Equals(name, StringComparison.OrdinalIgnoreCase)) .Value.SecondsLeft; if (nukeRule.TimerComparisonTypeEnum == ComparisonType.Less && seconds > nukeRule.TimerSeconds) { continue; } else if (nukeRule.TimerComparisonTypeEnum == ComparisonType.More && seconds < nukeRule.TimerSeconds) { continue; } } if (nukeRule.SkillLevelComparisonActivated) { var level = _data.MainHero.Buffs.First( buff => buff.Value.BuffName.Equals(name, StringComparison.OrdinalIgnoreCase)) .Value.Level; if (nukeRule.SkillLevelComparisonTypeEnum == ComparisonType.Less && level > nukeRule.SkillLevelRequired) { continue; } else if (nukeRule.SkillLevelComparisonTypeEnum == ComparisonType.More && level < nukeRule.SkillLevelRequired) { continue; } else if (nukeRule.SkillLevelComparisonTypeEnum == ComparisonType.Equal && level != nukeRule.SkillLevelRequired) { continue; } } } if (nukeRule.UseIfBuffIsPresent && nukeRule.SelectedBuffsStr.Trim().Length > 0 && !nukeRule.SelectedBuffsFilter.Any( buffRule => buffRule.Enable && _data.MainHero.Buffs.Any( buff => buff.Value.BuffName.Equals(buffRule.Name, StringComparison.OrdinalIgnoreCase)))) { continue; } if (nukeRule.NukeType == NukeType.Skill && !_data.Skills[nukeRule.SelfHealBuffId].CanBeUsed()) { continue; } if (!nukeRule.UseInCombat && inCombat) { continue; } if (nukeRule.NukeType == NukeType.Skill && _data.MainHero.Mana < ExportedData.SkillManaConsumption[nukeRule.SelfHealBuffId][_data.Skills[nukeRule.SelfHealBuffId].SkillLevel]) { continue; } nuke = nukeRule; break; } _latestRule = nuke; return(nuke); }
public bool Cast(SelfHealBuffRule rule) { if (rule != null) { if (rule.RequiresTarget) { if (rule.UseOnPet && _data.MainHero.PlayerSummons.Count > 0) { if (_actionsController.TargetByObjectId(_data.MainHero.PlayerSummons.First().ObjectId)) { if (rule.NukeType == NukeType.Skill) { _actionsController.UseSkill(rule.SelfHealBuffId, false, false); } else if (rule.NukeType == NukeType.Item) { _actionsController.UseItem(_data.Inventory.First(item => item.Value.ItemId == rule.SelfHealBuffId).Key, false); } rule.LastUsed = Environment.TickCount; _data.RequestBuffSkillCastStamp = Environment.TickCount; return(true); } } else { if (_actionsController.TargetByObjectId(_data.MainHero.ObjectId)) { if (rule.NukeType == NukeType.Skill) { _actionsController.UseSkill(rule.SelfHealBuffId, false, false); } else if (rule.NukeType == NukeType.Item) { _actionsController.UseItem(_data.Inventory.First(item => item.Value.ItemId == rule.SelfHealBuffId).Key, false); } rule.LastUsed = Environment.TickCount; _data.RequestBuffSkillCastStamp = Environment.TickCount; return(true); } } } else { if (rule.NukeType == NukeType.Skill) { _actionsController.UseSkill(rule.SelfHealBuffId, false, false); } else if (rule.NukeType == NukeType.Item) { _actionsController.UseItem(_data.Inventory.First(item => item.Value.ItemId == rule.SelfHealBuffId).Key, false); } rule.LastUsed = Environment.TickCount; _data.RequestBuffSkillCastStamp = Environment.TickCount; return(true); } } return(false); }