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); } } } }
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); } } }
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()); } } } }
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); * }*/ } }