Пример #1
0
        void AggroAllPlayers(Creature temp)
        {
            var PlList = temp.GetMap().GetPlayers();

            if (PlList.Empty())
            {
                return;
            }

            foreach (var player in PlList)
            {
                if (player)
                {
                    if (player.IsGameMaster())
                    {
                        continue;
                    }

                    if (player.IsAlive())
                    {
                        temp.RemoveUnitFlag(UnitFlags.NonAttackable | UnitFlags.ImmuneToPc);
                        temp.SetReactState(ReactStates.Aggressive);
                        temp.SetInCombatWith(player);
                        player.SetInCombatWith(temp);
                        temp.AddThreat(player, 0.0f);
                    }
                }
            }
        }
Пример #2
0
            void AggroAllPlayers(Creature temp)
            {
                var PlList = me.GetMap().GetPlayers();

                if (PlList.Empty())
                {
                    return;
                }

                foreach (var player in PlList)
                {
                    if (player.IsGameMaster())
                    {
                        continue;
                    }

                    if (player.IsAlive())
                    {
                        temp.SetHomePosition(me.GetPositionX(), me.GetPositionY(), me.GetPositionZ(), me.GetOrientation());
                        temp.RemoveFlag(UnitFields.Flags, UnitFlags.NonAttackable);
                        temp.SetReactState(ReactStates.Aggressive);
                        temp.SetInCombatWith(player);
                        player.SetInCombatWith(temp);
                        temp.AddThreat(player, 0.0f);
                    }
                }
            }
Пример #3
0
 void HandleScriptEffect(uint effIndex)
 {
     if (GetCaster())
     {
         Creature ick = GetCaster().ToCreature();
         if (ick)
         {
             Unit target = ick.GetAI().SelectTarget(SelectAggroTarget.Random, 0, 200.0f, true);
             if (target)
             {
                 ick.GetAI().Talk(TextIds.SayIckChase1, target);
                 ick.AddAura(GetSpellInfo().Id, target);
                 ick.GetAI <boss_ick>().SetTempThreat(ick.GetThreatManager().getThreat(target));
                 ick.AddThreat(target, GetEffectValue());
                 target.AddThreat(ick, GetEffectValue());
             }
         }
     }
 }
Пример #4
0
        public void DoZoneInCombat(Creature creature = null, float maxRangeToNearestTarget = 250.0f)
        {
            if (!creature)
            {
                creature = me;
            }

            if (!creature.CanHaveThreatList())
            {
                return;
            }

            Map map = creature.GetMap();

            if (!map.IsDungeon())                                  //use IsDungeon instead of Instanceable, in case Battlegrounds will be instantiated
            {
                Log.outError(LogFilter.Server, "DoZoneInCombat call for map that isn't an instance (creature entry = {0})", creature.IsTypeId(TypeId.Unit) ? creature.ToCreature().GetEntry() : 0);
                return;
            }

            if (!creature.HasReactState(ReactStates.Passive) && creature.GetVictim() == null)
            {
                Unit nearTarget = creature.SelectNearestTarget(maxRangeToNearestTarget);
                if (nearTarget != null)
                {
                    creature.GetAI().AttackStart(nearTarget);
                }
                else if (creature.IsSummon())
                {
                    Unit summoner = creature.ToTempSummon().GetSummoner();
                    if (summoner != null)
                    {
                        Unit target = summoner.GetAttackerForHelper();
                        if (target == null && summoner.CanHaveThreatList() && !summoner.GetThreatManager().IsThreatListEmpty())
                        {
                            target = summoner.GetThreatManager().GetHostilTarget();
                        }
                        if (target != null && (creature.IsFriendlyTo(summoner) || creature.IsHostileTo(target)))
                        {
                            creature.GetAI().AttackStart(target);
                        }
                    }
                }
            }

            // Intended duplicated check, the code above this should select a victim
            // If it can't find a suitable attack target then we should error out.
            if (!creature.HasReactState(ReactStates.Passive) && creature.GetVictim() == null)
            {
                Log.outError(LogFilter.Server, "DoZoneInCombat called for creature that has empty threat list (creature entry = {0})", creature.GetEntry());
                return;
            }

            var playerList = map.GetPlayers();

            if (playerList.Empty())
            {
                return;
            }

            foreach (var player in playerList)
            {
                if (player.IsGameMaster())
                {
                    continue;
                }

                if (player.IsAlive())
                {
                    creature.SetInCombatWith(player);
                    player.SetInCombatWith(creature);
                    creature.AddThreat(player, 0.0f);
                }

                /* Causes certain things to never leave the threat list (Priest Lightwell, etc):
                 * foreach (var unit in player.m_Controlled)
                 * {
                 *  me.SetInCombatWith(unit);
                 *  unit.SetInCombatWith(me);
                 *  me.AddThreat(unit, 0.0f);
                 * }*/
            }
        }