Combat/Threat rewrite - prep & refactor
Port From (https://github.com/TrinityCore/TrinityCore/commit/8be23fcbbdf26e8169defd761e61765f301bebe0)
This commit is contained in:
@@ -102,7 +102,7 @@ namespace Scripts.EasternKingdoms.Karazhan.Curator
|
||||
switch (eventId)
|
||||
{
|
||||
case EventIds.HatefulBolt:
|
||||
Unit target = SelectTarget(SelectAggroTarget.TopAggro, 1);
|
||||
Unit target = SelectTarget(SelectAggroTarget.MaxThreat, 1);
|
||||
if (target != null)
|
||||
DoCast(target, SpellIds.HatefulBolt);
|
||||
_events.Repeat(TimeSpan.FromSeconds(7), TimeSpan.FromSeconds(15));
|
||||
|
||||
@@ -278,16 +278,9 @@ namespace Scripts.EasternKingdoms.Karazhan.Moroes
|
||||
|
||||
if (Blind_Timer <= diff)
|
||||
{
|
||||
List<Unit> targets = SelectTargetList(5, SelectAggroTarget.Random, me.GetCombatReach() * 5, true);
|
||||
foreach (var i in targets)
|
||||
{
|
||||
|
||||
if (!me.IsWithinMeleeRange(i))
|
||||
{
|
||||
DoCast(i, SpellIds.Blind);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Unit target = SelectTarget(SelectAggroTarget.MinDistance, 0, 0.0f, true, false);
|
||||
if (target != null)
|
||||
DoCast(target, SpellIds.Blind);
|
||||
Blind_Timer = 40000;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -765,11 +765,11 @@ namespace Scripts.EasternKingdoms.Karazhan.OperaEvent
|
||||
{
|
||||
Talk(RedRidingHood.SayWolfHood);
|
||||
DoCast(target, RedRidingHood.SpellLittleRedRidingHood, true);
|
||||
TempThreat = DoGetThreat(target);
|
||||
TempThreat = GetThreat(target);
|
||||
if (TempThreat != 0.0f)
|
||||
DoModifyThreatPercent(target, -100);
|
||||
ModifyThreatByPercent(target, -100);
|
||||
HoodGUID = target.GetGUID();
|
||||
me.AddThreat(target, 1000000.0f);
|
||||
AddThreat(target, 1000000.0f);
|
||||
ChaseTimer = 20000;
|
||||
IsChasing = true;
|
||||
}
|
||||
@@ -781,9 +781,9 @@ namespace Scripts.EasternKingdoms.Karazhan.OperaEvent
|
||||
if (target)
|
||||
{
|
||||
HoodGUID.Clear();
|
||||
if (DoGetThreat(target) != 0f)
|
||||
DoModifyThreatPercent(target, -100);
|
||||
me.AddThreat(target, TempThreat);
|
||||
if (GetThreat(target) != 0f)
|
||||
ModifyThreatByPercent(target, -100);
|
||||
AddThreat(target, TempThreat);
|
||||
TempThreat = 0;
|
||||
}
|
||||
|
||||
@@ -1023,7 +1023,7 @@ namespace Scripts.EasternKingdoms.Karazhan.OperaEvent
|
||||
Romulo.GetMotionMaster().Clear();
|
||||
Romulo.SetDeathState(DeathState.JustDied);
|
||||
Romulo.CombatStop(true);
|
||||
Romulo.DeleteThreatList();
|
||||
Romulo.GetThreatManager().ClearAllThreat();
|
||||
Romulo.SetDynamicFlags(UnitDynFlags.Lootable);
|
||||
}
|
||||
|
||||
@@ -1261,7 +1261,7 @@ namespace Scripts.EasternKingdoms.Karazhan.OperaEvent
|
||||
Julianne.GetMotionMaster().Clear();
|
||||
Julianne.SetDeathState(DeathState.JustDied);
|
||||
Julianne.CombatStop(true);
|
||||
Julianne.DeleteThreatList();
|
||||
Julianne.GetThreatManager().ClearAllThreat();
|
||||
Julianne.SetDynamicFlags(UnitDynFlags.Lootable);
|
||||
}
|
||||
return;
|
||||
@@ -1290,7 +1290,7 @@ namespace Scripts.EasternKingdoms.Karazhan.OperaEvent
|
||||
Creature Julianne = (ObjectAccessor.GetCreature(me, JulianneGUID));
|
||||
if (Julianne && Julianne.GetVictim())
|
||||
{
|
||||
me.AddThreat(Julianne.GetVictim(), 1.0f);
|
||||
AddThreat(Julianne.GetVictim(), 1.0f);
|
||||
AttackStart(Julianne.GetVictim());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,7 +170,7 @@ namespace Scripts.Northrend.AzjolNerub.Ahnkahet.JedogaShadowseeker
|
||||
else
|
||||
{
|
||||
who.SetInCombatWith(me);
|
||||
me.AddThreat(who, 0.0f);
|
||||
AddThreat(who, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,8 +175,8 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
{
|
||||
if (player && !player.IsGameMaster() && me.IsInRange(player, 8.0f, 25.0f, false))
|
||||
{
|
||||
DoResetThreat();
|
||||
me.AddThreat(player, 1.0f);
|
||||
ResetThreatList();
|
||||
me.GetThreatManager().AddThreat(player, 1.0f);
|
||||
DoCast(player, TrialOfChampionSpells.CHARGE);
|
||||
break;
|
||||
}
|
||||
@@ -324,7 +324,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
temp.SetReactState(ReactStates.Aggressive);
|
||||
temp.SetInCombatWith(player);
|
||||
player.SetInCombatWith(temp);
|
||||
temp.AddThreat(player, 0.0f);
|
||||
temp.GetThreatManager().AddThreat(player, 0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -386,8 +386,8 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
{
|
||||
if (player && !player.IsGameMaster() && me.IsInRange(player, 8.0f, 25.0f, false))
|
||||
{
|
||||
DoResetThreat();
|
||||
me.AddThreat(player, 5.0f);
|
||||
ResetThreatList();
|
||||
me.GetThreatManager().AddThreat(player, 5.0f);
|
||||
DoCast(player, TrialOfChampionSpells.INTERCEPT);
|
||||
break;
|
||||
}
|
||||
@@ -549,7 +549,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
_scheduler.Schedule(TimeSpan.FromSeconds(12), task =>
|
||||
{
|
||||
ObjectGuid uiTargetGUID = ObjectGuid.Empty;
|
||||
Unit target = SelectTarget(SelectAggroTarget.Farthest, 0, 30.0f);
|
||||
Unit target = SelectTarget(SelectAggroTarget.MaxDistance, 0, 30.0f);
|
||||
if (target)
|
||||
{
|
||||
uiTargetGUID = target.GetGUID();
|
||||
|
||||
@@ -448,7 +448,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheChampion
|
||||
temp.SetReactState(ReactStates.Aggressive);
|
||||
temp.SetInCombatWith(player);
|
||||
player.SetInCombatWith(temp);
|
||||
temp.AddThreat(player, 0.0f);
|
||||
AddThreat(player, 0.0f, temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,7 +155,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
return;
|
||||
case Jaraxxus.EventFelLightning:
|
||||
{
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 0, 0.0f, true, -Jaraxxus.SpellLordHittin);
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 0, 0.0f, true, true, -Jaraxxus.SpellLordHittin);
|
||||
if (target)
|
||||
DoCast(target, Jaraxxus.SpellFelLighting);
|
||||
_events.ScheduleEvent(Jaraxxus.EventFelLightning, RandomHelper.URand(10 * Time.InMilliseconds, 15 * Time.InMilliseconds));
|
||||
@@ -163,7 +163,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
}
|
||||
case Jaraxxus.EventIncinerateFlesh:
|
||||
{
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, -Jaraxxus.SpellLordHittin);
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, true, -Jaraxxus.SpellLordHittin);
|
||||
if (target)
|
||||
{
|
||||
Talk(Jaraxxus.EmoteIncinerate, target);
|
||||
@@ -179,7 +179,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
return;
|
||||
case Jaraxxus.EventLegionFlame:
|
||||
{
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, -Jaraxxus.SpellLordHittin);
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, true, -Jaraxxus.SpellLordHittin);
|
||||
if (target)
|
||||
{
|
||||
Talk(Jaraxxus.EmoteLegionFlame, target);
|
||||
|
||||
@@ -1174,8 +1174,7 @@ namespace Scripts.Northrend.CrusadersColiseum.TrialOfTheCrusader
|
||||
{
|
||||
//1-shot Fizzlebang
|
||||
temp.CastSpell(me, 67888, false);
|
||||
me.SetInCombatWith(temp);
|
||||
temp.AddThreat(me, 1000.0f);
|
||||
AddThreat(me, 1000.0f, temp);
|
||||
temp.GetAI().AttackStart(me);
|
||||
}
|
||||
_instance.SetData(DataTypes.Event, 1160);
|
||||
|
||||
@@ -174,8 +174,8 @@ namespace Scripts.Northrend.FrozenHalls.PitOfSaron.BossKrickAndIck
|
||||
|
||||
public void _ResetThreat(Unit target)
|
||||
{
|
||||
DoModifyThreatPercent(target, -100);
|
||||
me.AddThreat(target, _tempThreat);
|
||||
ModifyThreatByPercent(target, -100);
|
||||
AddThreat(target, _tempThreat);
|
||||
}
|
||||
|
||||
public override void UpdateAI(uint diff)
|
||||
@@ -617,8 +617,8 @@ namespace Scripts.Northrend.FrozenHalls.PitOfSaron.BossKrickAndIck
|
||||
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());
|
||||
ick.GetThreatManager().AddThreat(target, GetEffectValue(), GetSpellInfo(), true, true);
|
||||
target.GetThreatManager().AddThreat(ick, GetEffectValue(), GetSpellInfo(), true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -587,7 +587,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
if (!me.IsAlive() || !me.IsInCombat())
|
||||
return;
|
||||
|
||||
me.DeleteThreatList();
|
||||
me.GetThreatManager().ClearAllThreat();
|
||||
me.CombatStop(true);
|
||||
me.GetMotionMaster().MoveTargetedHome();
|
||||
}
|
||||
@@ -733,11 +733,10 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
foreach (var stalker in creatures)
|
||||
{
|
||||
stalker.RemoveAllAuras();
|
||||
stalker.DeleteThreatList();
|
||||
stalker.GetThreatManager().ClearAllThreat();
|
||||
stalker.CombatStop(true);
|
||||
}
|
||||
|
||||
|
||||
uint explosionSpell = isVictory ? GunshipSpells.ExplosionVictory : GunshipSpells.ExplosionWipe;
|
||||
creatures.Clear();
|
||||
me.GetCreatureListWithEntryInGrid(creatures, CreatureIds.GunshipHull, 200.0f);
|
||||
@@ -872,7 +871,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
if (!me.IsAlive())
|
||||
return;
|
||||
|
||||
me.DeleteThreatList();
|
||||
me.GetThreatManager().ClearAllThreat();
|
||||
me.CombatStop(true);
|
||||
me.GetMotionMaster().MoveTargetedHome();
|
||||
|
||||
@@ -1132,7 +1131,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
if (!me.IsAlive())
|
||||
return;
|
||||
|
||||
me.DeleteThreatList();
|
||||
me.GetThreatManager().ClearAllThreat();
|
||||
me.CombatStop(true);
|
||||
me.GetMotionMaster().MoveTargetedHome();
|
||||
|
||||
@@ -1442,7 +1441,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
{
|
||||
players.Sort(new ObjectDistanceOrderPred(me));
|
||||
foreach (var pl in players)
|
||||
me.AddThreat(pl, 1.0f);
|
||||
AddThreat(pl, 1.0f);
|
||||
|
||||
AttackStart(players.First());
|
||||
}
|
||||
|
||||
@@ -646,7 +646,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
Talk(Texts.SaySvalnaAggro);
|
||||
break;
|
||||
case EventTypes.ImpalingSpear:
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, -(int)InstanceSpells.ImpalingSpear);
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, true, -(int)InstanceSpells.ImpalingSpear);
|
||||
if (target)
|
||||
{
|
||||
DoCast(me, InstanceSpells.AetherShield);
|
||||
|
||||
@@ -1509,7 +1509,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
if (warden)
|
||||
{
|
||||
terenas.GetAI().AttackStart(warden);
|
||||
warden.AddThreat(terenas, 300000.0f);
|
||||
warden.GetThreatManager().AddThreat(terenas, 300000.0f);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -313,7 +313,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
Talk(TextIds.SayDominateMind);
|
||||
for (byte i = 0; i < _dominateMindCount; i++)
|
||||
{
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, -(int)SpellIds.DominateMind);
|
||||
Unit target = SelectTarget(SelectAggroTarget.Random, 1, 0.0f, true, false, -(int)SpellIds.DominateMind);
|
||||
if (target != null)
|
||||
DoCast(target, SpellIds.DominateMind);
|
||||
}
|
||||
@@ -423,7 +423,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
Talk(TextIds.SayPhase2);
|
||||
Talk(TextIds.EmotePhase2);
|
||||
DoStartMovement(me.GetVictim());
|
||||
DoResetThreat();
|
||||
ResetThreatList();
|
||||
|
||||
damage -= (uint)me.GetPower(PowerType.Mana);
|
||||
me.SetPower(PowerType.Mana, 0);
|
||||
|
||||
@@ -470,8 +470,8 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
void SelectTarget(List<WorldObject> targets)
|
||||
{
|
||||
targets.Clear();
|
||||
// select any unit but not the tank (by owners threatlist)
|
||||
Unit target = GetCaster().GetAI().SelectTarget(SelectAggroTarget.Random, 1, -GetCaster().GetCombatReach(), true, -(int)Spells.Impaled);
|
||||
// select any unit but not the tank
|
||||
Unit target = GetCaster().GetAI().SelectTarget(SelectAggroTarget.Random, 1, -GetCaster().GetCombatReach(), true, false, -(int)Spells.Impaled);
|
||||
if (!target)
|
||||
target = GetCaster().GetAI().SelectTarget(SelectAggroTarget.Random, 0, 0.0f, true); // or the tank if its solo
|
||||
if (!target)
|
||||
@@ -565,7 +565,7 @@ namespace Scripts.Northrend.IcecrownCitadel
|
||||
CreatureAI marrowgarAI = marrowgar.GetAI();
|
||||
byte boneSpikeCount = (byte)(Convert.ToBoolean((int)GetCaster().GetMap().GetDifficultyID() & 1) ? 3 : 1);
|
||||
|
||||
List<Unit> targets = marrowgarAI.SelectTargetList(new BoneSpikeTargetSelector(marrowgarAI), boneSpikeCount, SelectAggroTarget.Random);
|
||||
List<Unit> targets = marrowgarAI.SelectTargetList(boneSpikeCount, SelectAggroTarget.Random, 1, new BoneSpikeTargetSelector(marrowgarAI));
|
||||
if (targets.Empty())
|
||||
return;
|
||||
|
||||
|
||||
@@ -1352,10 +1352,10 @@ namespace Scripts.Northrend.Ulduar
|
||||
|
||||
if (me.HasUnitState(UnitState.Root))
|
||||
{
|
||||
Unit newTarget = SelectTarget(SelectAggroTarget.Nearest, 0, 30.0f, true);
|
||||
Unit newTarget = SelectTarget(SelectAggroTarget.MinDistance, 0, 30.0f, true);
|
||||
if (newTarget)
|
||||
{
|
||||
me.DeleteThreatList();
|
||||
me.GetThreatManager().ClearAllThreat();
|
||||
AttackStart(newTarget);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace Scripts.Outlands
|
||||
me.SetFaction(Aeranas.FactionFriendly);
|
||||
me.AddNpcFlag(NPCFlags.QuestGiver);
|
||||
me.RemoveAllAuras();
|
||||
me.DeleteThreatList();
|
||||
me.GetThreatManager().ClearAllThreat();
|
||||
me.CombatStop(true);
|
||||
Talk(Aeranas.SayFree);
|
||||
return;
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace Scripts.Pets.Priest
|
||||
if (!me.IsAlive())
|
||||
return;
|
||||
|
||||
me.DeleteThreatList();
|
||||
me.GetThreatManager().ClearAllThreat();
|
||||
me.CombatStop(true);
|
||||
me.ResetPlayerDamageReq();
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ namespace Scripts.World.BossEmeraldDragons
|
||||
|
||||
_scheduler.Update(diff);
|
||||
|
||||
Unit target = SelectTarget(SelectAggroTarget.TopAggro, 0, -50.0f, true);
|
||||
Unit target = SelectTarget(SelectAggroTarget.MaxThreat, 0, -50.0f, true);
|
||||
if (target)
|
||||
DoCast(target, Spells.SummonPlayer);
|
||||
|
||||
|
||||
@@ -1559,7 +1559,7 @@ namespace Scripts.World.NpcSpecial
|
||||
|
||||
public override void DamageTaken(Unit doneBy, ref uint damage)
|
||||
{
|
||||
me.AddThreat(doneBy, damage); // just to create threat reference
|
||||
AddThreat(doneBy, damage); // just to create threat reference
|
||||
_damageTimes[doneBy.GetGUID()] = Time.UnixTime;
|
||||
damage = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user