예제 #1
0
 public CreatureCastingSet()
 {
     _interval = 15;
     _targetPriority = CreatureTargetPriority.HighThreat;
     _healthPercentage = 0;
     _random = true;
 }
예제 #2
0
 public CreatureCastable()
 {
     _targetPriority   = CreatureTargetPriority.None;
     _healthPercentage = -1;
     _useOnce          = false;
     _interval         = 15;
 }
예제 #3
0
 public CreatureCastable(int interval, CreatureTargetPriority priority, string value) : this()
 {
     Interval       = interval;
     TargetPriority = priority;
     Value          = value;
 }
예제 #4
0
    public List <Creature> GetTargets(CreatureTargetPriority priority)
    {
        var         ret = new List <Creature>();
        ThreatEntry entry;

        switch (priority)
        {
        case CreatureTargetPriority.HighThreat:
            ret.Add(Game.World.WorldData.GetWorldObject <Creature>(ThreatTableByThreat.First().Value));
            break;

        case CreatureTargetPriority.LowThreat:
            ret.Add(Game.World.WorldData.GetWorldObject <Creature>(ThreatTableByThreat.First().Value));
            break;

        case CreatureTargetPriority.Attacker:
            entry = ThreatTableByThreat.Keys.OrderByDescending(x => x.SecondsSinceLastMelee)
                    .FirstOrDefault();
            if (entry != null)
            {
                ret.Add(entry.TargetObject);
            }
            break;

        case CreatureTargetPriority.AttackingCaster:
            entry = ThreatTableByThreat.Keys.Where(x => x.IsCaster).OrderByDescending(x => x.SecondsSinceLastNonHealCast)
                    .FirstOrDefault();
            if (entry != null)
            {
                ret.Add(entry.TargetObject);
            }
            break;

        case CreatureTargetPriority.AttackingGroup:
            entry = ThreatTableByThreat.Keys.OrderByDescending(x => x.SecondsSinceLastMelee)
                    .FirstOrDefault();
            if (entry != null)
            {
                ret.Add(entry.TargetObject);
            }
            break;

        case CreatureTargetPriority.AttackingHealer:
            entry = ThreatTableByThreat.Keys.Where(x => x.IsHealer).OrderByDescending(x => x.SecondsSinceLastHeal)
                    .FirstOrDefault();
            if (entry != null)
            {
                ret.Add(entry.TargetObject);
            }
            break;

        case CreatureTargetPriority.AllAllies:
            ret.AddRange(OwnerObject.Map.EntityTree.GetObjects(OwnerObject.GetViewport()).OfType <Monster>().Select(x => x as Creature).ToList());
            break;

        case CreatureTargetPriority.RandomAlly:
            ret.Add(OwnerObject.Map.EntityTree.GetObjects(OwnerObject.GetViewport()).OfType <Monster>().Select(x => x as Creature).PickRandom());
            break;

        case CreatureTargetPriority.RandomAttacker:
            ret.Add(Game.World.WorldData.GetWorldObject <Creature>(ThreatTableByCreature.PickRandom().Key));
            break;

        case CreatureTargetPriority.Self:
            ret.Add(OwnerObject);
            break;

        default:
            break;
        }

        return(ret);
    }