示例#1
0
        static public bool CanAttack(Unit A, Unit Victim)
        {
            /*if (A.IsCreature() && B.IsCreature())
             *  return false;*/

            if (A == null || Victim == null)
            {
                return(false);
            }

            if (A.IsDisposed || Victim.IsDisposed)
            {
                return(false);
            }

            if (A == Victim)
            {
                return(false);
            }

            if (A.IsDead || Victim.IsDead)
            {
                return(false);
            }

            if (!IsEnemy(A, Victim))
            {
                return(false);
            }

            if (!A.IsInWorld() || !Victim.IsInWorld())
            {
                return(false);
            }

            if (!A.IsVisible || A.IsInvinsible)
            {
                return(false);
            }

            if (!Victim.IsVisible || Victim.IsInvinsible)
            {
                return(false);
            }

            if (A.IsPlayer() && Victim.IsPlayer())
            {
                if (!Victim.CbtInterface.IsPvp)
                {
                    return(false);
                }
            }

            return(true);
        }
示例#2
0
        public Unit GetNextTarget()
        {
            Unit Me     = GetUnit();
            Unit Target = null;

            if (!Me.IsPlayer())
            {
                AggroInfo Info = GetMaxAggroHate(true);
                if (Info == null)
                {
                    Info = GetMaxAggroHate(false);
                }

                if (Info != null)
                {
                    Target = _Owner.Region.GetObject(Info.Oid) as Unit;
                }
            }
            else
            {
                Target = GetTarget(GameData.TargetTypes.TARGETTYPES_TARGET_ENEMY);
            }

            if (Target == null)
            {
                return(null);
            }

            if (!Target.IsInWorld())
            {
                return(null);
            }

            if (Target.IsDead)
            {
                if (AI.State == AiState.FIGHTING)
                {
                    OnTargetDie(Target);
                }

                return(null);
            }

            return(Target);
        }
        public Unit GetNextTarget()
        {
            Unit Me     = GetUnit();
            Unit Target = null;

            if (!Me.IsPlayer())
            {
                AggroInfo Info = GetMaxAggroHate();
                if (Info != null)
                {
                    Target = Obj.Region.GetObject(Info.Oid) as Unit;
                }
            }
            else
            {
                if (CurrentTarget.Type != GameData.TargetTypes.TARGETTYPES_TARGET_ALLY)
                {
                    Target = CurrentTarget.Target;
                }
            }

            if (Target == null)
            {
                return(null);
            }

            if (!Target.IsInWorld())
            {
                return(null);
            }

            if (Target.IsDead)
            {
                if (State == AiState.FIGHTING)
                {
                    OnTargetDie(Target);
                }

                return(null);
            }

            return(Target);
        }
        public virtual Unit GetNextTarget()
        {
            while (Aggros.Count > 0)
            {
                AggroInfo info = GetMaxAggroHate();

                Unit target = _unit.Region.GetObject(info.Oid) as Unit;

                if (target == null || target.IsDead || !target.IsInWorld() || info.Hatred == 0)
                {
                    Aggros.Remove(info.Oid);
                    continue;
                }

                return(target);
            }

            return(null);
        }
        static public bool CanAttack(Unit A, Unit B)
        {
            if (A.IsDead || B.IsDead)
            {
                return(false);
            }

            if (A == B)
            {
                return(false);
            }

            if (!IsEnemy(A, B))
            {
                return(false);
            }

            if (!A.IsInWorld() || !B.IsInWorld())
            {
                return(false);
            }

            return(true);
        }
示例#6
0
        public static bool CanAttack(Unit A, Unit B)
        {
            if (A.IsDead || B.IsDead)
                return false;

            if (A == B)
                return false;

            if (!IsEnemy(A, B))
                return false;

            if (!A.IsInWorld() || !B.IsInWorld())
                return false;

            return true;
        }
示例#7
0
        static public bool CanAttack(Unit A, Unit Victim)
        {
            /*if (A.IsCreature() && B.IsCreature())
             *  return false;*/


            ///// GM: MOBS DONT ATTACK GM FIX \\\\\
            Player Plr = Victim.GetPlayer();

            if (Plr != null && Plr.GmLevel > 0)
            {
                return(false);
            }

            /////////////////////////////////


            if (A == null || Victim == null)
            {
                return(false);
            }

            if (A.IsDisposed || Victim.IsDisposed)
            {
                return(false);
            }

            if (A == Victim)
            {
                return(false);
            }

            if (A.IsDead || Victim.IsDead)
            {
                return(false);
            }

            if (!IsEnemy(A, Victim))
            {
                return(false);
            }

            if (!A.IsInWorld() || !Victim.IsInWorld())
            {
                return(false);
            }

            if (!A.IsVisible || A.IsInvinsible)
            {
                return(false);
            }

            if (!Victim.IsVisible || Victim.IsInvinsible)
            {
                return(false);
            }

            if (A.IsPlayer() && Victim.IsPlayer())
            {
                if (!Victim.CbtInterface.IsPvp)
                {
                    return(false);
                }
            }

            return(true);
        }
        public static bool CanAttack(Unit attacker, Unit victim)
        {
            if (attacker == null || victim == null)
            {
                return(false);
            }

            if (victim is GameObject && victim.GetGameObject().IsAttackable == 0)
            {
                return(false);
            }

            if (victim is GameObject && (victim.Realm == Realms.REALMS_REALM_NEUTRAL || victim.Realm == attacker.Realm))
            {
                return(false);
            }

            if (victim is GameObject && attacker is Creature && !(attacker is Pet) && !(attacker is Siege))
            {
                return(false);
            }

            if (attacker.IsDisposed || victim.IsDisposed)
            {
                return(false);
            }

            if (attacker == victim)
            {
                return(false);
            }

            if (attacker.IsDead || victim.IsDead)
            {
                return(false);
            }

            if (!IsEnemy(attacker, victim))
            {
                return(false);
            }

            if (!attacker.IsInWorld() || !victim.IsInWorld())
            {
                return(false);
            }

            if (!attacker.IsVisible || attacker.IsInvulnerable)
            {
                return(false);
            }

            if (!victim.IsVisible || victim.IsInvulnerable)
            {
                return(false);
            }

            Player player = victim as Player;

            return(player == null || attacker.CbtInterface.CanAttackPlayer(player));
        }
示例#9
0
        static public bool CanAttack(Unit A, Unit Victim)
        {
            /*if (A.IsCreature() && B.IsCreature())
                return false;*/

            if (A == null || Victim == null)
                return false;

            if (A.IsDisposed || Victim.IsDisposed)
                return false;

            if (A == Victim)
                return false;

            if (A.IsDead || Victim.IsDead)
                return false;

            if (!IsEnemy(A, Victim))
                return false;

            if (!A.IsInWorld() || !Victim.IsInWorld())
                return false;

            if (!A.IsVisible || A.IsInvinsible)
                return false;

            if (!Victim.IsVisible || Victim.IsInvinsible)
                return false;

            if (A.IsPlayer() && Victim.IsPlayer())
            {
                if (!Victim.CbtInterface.IsPvp)
                    return false;
            }

            return true;
        }