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);
                }
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }