| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- using Server.MirDatabase;
- using Server.MirEnvir;
- namespace Server.MirObjects.Monsters
- {
- public class GlacierWarrior : MonsterObject
- {
- public virtual byte TeleportEffect { get { return 4; } }
- protected internal GlacierWarrior(MonsterInfo info)
- : base(info)
- {
- }
- public override int Attacked(HumanObject attacker, int damage, DefenceType type = DefenceType.ACAgility, bool damageWeapon = true)
- {
- int attackerDamage = base.Attacked(attacker, damage, type, damageWeapon);
- int ownDamage = GetAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC]);
- if (attackerDamage > ownDamage && Envir.Random.Next(2) == 0)
- {
- FindWeakerTarget();
- }
- return attackerDamage;
- }
- public override int Attacked(MonsterObject attacker, int damage, DefenceType type = DefenceType.ACAgility)
- {
- int attackerDamage = base.Attacked(attacker, damage, type);
- int ownDamage = GetAttackPower(Stats[Stat.MinDC], Stats[Stat.MaxDC]);
- if (attackerDamage > ownDamage && Envir.Random.Next(2) == 0)
- {
- FindWeakerTarget();
- }
- return attackerDamage;
- }
- private void FindWeakerTarget()
- {
- List<MapObject> targets = FindAllTargets(Info.ViewRange, CurrentLocation);
- if (targets.Count < 2) return;
- var newTarget = Target;
- for (int i = 0; i < targets.Count; i++)
- {
- if (targets[i].Stats[Stat.MinDC] >= Target.Stats[Stat.MinDC]) continue;
- newTarget = targets[i];
- }
- if (newTarget != Target)
- {
- Target = newTarget;
- TeleportToTarget(Target);
- }
- }
- private bool TeleportToTarget(MapObject target)
- {
- Direction = Functions.DirectionFromPoint(CurrentLocation, target.CurrentLocation);
- var reverse = Functions.ReverseDirection(Direction);
- var point = Functions.PointMove(target.CurrentLocation, reverse, 1);
- if (point != CurrentLocation)
- {
- if (Teleport(CurrentMap, point, true, TeleportEffect)) return true;
- }
- return false;
- }
- }
- }
|