mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 18:36:31 +01:00
Core/Misc: removed most retail specialization code and restored legacy functionality for Classic
This commit is contained in:
@@ -195,9 +195,6 @@ public:
|
||||
if (playerClass != talentInfo->ClassID)
|
||||
continue;
|
||||
|
||||
if (talentInfo->SpecID && player->GetPrimarySpecialization() != ChrSpecialization(talentInfo->SpecID))
|
||||
continue;
|
||||
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(talentInfo->SpellID, DIFFICULTY_NONE);
|
||||
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo, handler->GetSession()->GetPlayer(), false))
|
||||
continue;
|
||||
|
||||
@@ -242,7 +242,7 @@ struct boss_volazj : public BossAI
|
||||
// clone
|
||||
player->CastSpell(summon, SPELL_CLONE_PLAYER, true);
|
||||
summon->GetAI()->SetData(DATA_TWISTED_VISAGE_PLAYER_CLASS, player->GetClass());
|
||||
summon->GetAI()->SetData(DATA_TWISTED_VISAGE_PLAYER_SPEC, AsUnderlyingType(player->GetPrimarySpecialization()));
|
||||
summon->GetAI()->SetData(DATA_TWISTED_VISAGE_PLAYER_SPEC, player->GetPrimaryTalentTree());
|
||||
summon->SetReactState(REACT_AGGRESSIVE);
|
||||
DoZoneInCombat(summon);
|
||||
// set phase
|
||||
@@ -417,11 +417,40 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
|
||||
void AttackStart(Unit* who) override
|
||||
{
|
||||
ChrSpecializationEntry const* chrSpecialization = sChrSpecializationStore.LookupEntry(_playerSpec);
|
||||
if (chrSpecialization && chrSpecialization->GetFlags().HasFlag(ChrSpecializationFlag::Ranged))
|
||||
ScriptedAI::AttackStartCaster(who, 25.0f);
|
||||
else
|
||||
ScriptedAI::AttackStart(who);
|
||||
switch (_playerClass)
|
||||
{
|
||||
case CLASS_SHAMAN:
|
||||
switch (_playerSpec)
|
||||
{
|
||||
case SPEC_SHAMAN_ELEMENTAL:
|
||||
case SPEC_SHAMAN_RESTORATION:
|
||||
ScriptedAI::AttackStartCaster(who, 25.0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
switch (_playerSpec)
|
||||
{
|
||||
case SPEC_DRUID_BALANCE:
|
||||
case SPEC_DRUID_RESTORATION:
|
||||
ScriptedAI::AttackStartCaster(who, 25.0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
case CLASS_HUNTER:
|
||||
case CLASS_MAGE:
|
||||
case CLASS_WARLOCK:
|
||||
ScriptedAI::AttackStartCaster(who, 25.0f);
|
||||
break;
|
||||
case CLASS_ROGUE:
|
||||
ScriptedAI::AttackStart(who);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data) override
|
||||
@@ -439,9 +468,9 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
switch (_playerClass)
|
||||
{
|
||||
case CLASS_WARRIOR:
|
||||
switch (ChrSpecialization(data))
|
||||
switch (data)
|
||||
{
|
||||
case ChrSpecialization::WarriorArms:
|
||||
case SPEC_WARRIOR_ARMS:
|
||||
_scheduler.Schedule(3s, [this](TaskContext mortalStrike)
|
||||
{
|
||||
DoCastVictim(SPELL_TWISTED_VISAGE_MORTAL_STRIKE);
|
||||
@@ -453,7 +482,7 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
});
|
||||
break;
|
||||
default:
|
||||
case ChrSpecialization::WarriorFury:
|
||||
case SPEC_WARRIOR_FURY:
|
||||
_scheduler.Schedule(2s, [this](TaskContext intercept)
|
||||
{
|
||||
if (!me->IsWithinCombatRange(me->GetVictim(), 8.0f))
|
||||
@@ -469,7 +498,7 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
bloodthirst.Repeat(3s, 5s);
|
||||
});
|
||||
break;
|
||||
case ChrSpecialization::WarriorProtection:
|
||||
case SPEC_WARRIOR_PROTECTION:
|
||||
_scheduler.Schedule(5s, [this](TaskContext thunderClap)
|
||||
{
|
||||
DoCastSelf(SPELL_TWISTED_VISAGE_THUNDER_CLAP);
|
||||
@@ -483,9 +512,9 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
}
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
switch (ChrSpecialization(data))
|
||||
switch (data)
|
||||
{
|
||||
case ChrSpecialization::PaladinProtection:
|
||||
case SPEC_PALADIN_PROTECTION:
|
||||
_scheduler.Schedule(5s, [this](TaskContext consecration)
|
||||
{
|
||||
DoCastSelf(SPELL_TWISTED_VISAGE_CONSECRATION);
|
||||
@@ -497,7 +526,7 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
});
|
||||
break;
|
||||
default:
|
||||
case ChrSpecialization::PaladinRetribution:
|
||||
case SPEC_PALADIN_RETRIBUTION:
|
||||
_scheduler.Schedule(5s, [this](TaskContext consecration)
|
||||
{
|
||||
DoCastSelf(SPELL_TWISTED_VISAGE_CONSECRATION);
|
||||
@@ -542,9 +571,9 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
});
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
switch (ChrSpecialization(data))
|
||||
switch (data)
|
||||
{
|
||||
case ChrSpecialization::PriestShadow:
|
||||
case SPEC_PRIEST_SHADOW:
|
||||
_scheduler.Schedule(5s, [this](TaskContext shadowWordPain)
|
||||
{
|
||||
DoCastVictim(SPELL_TWISTED_VISAGE_SHADOW_WORD_PAIN);
|
||||
@@ -595,10 +624,10 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
});
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
switch (ChrSpecialization(data))
|
||||
switch (data)
|
||||
{
|
||||
default:
|
||||
case ChrSpecialization::ShamanElemental:
|
||||
case SPEC_SHAMAN_ELEMENTAL:
|
||||
_scheduler.Schedule(5s, [this](TaskContext thunderstorm)
|
||||
{
|
||||
DoCastSelf(SPELL_TWISTED_VISAGE_THUNDERSTORM);
|
||||
@@ -609,14 +638,14 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
lightningBolt.Repeat(3s, 5s);
|
||||
});
|
||||
break;
|
||||
case ChrSpecialization::ShamanEnhancement:
|
||||
case SPEC_SHAMAN_ENHANCEMENT:
|
||||
_scheduler.Schedule(2s, [this](TaskContext earthShock)
|
||||
{
|
||||
DoCastVictim(SPELL_TWISTED_VISAGE_EARTH_SHOCK);
|
||||
earthShock.Repeat(3s, 5s);
|
||||
});
|
||||
break;
|
||||
case ChrSpecialization::ShamanRestoration:
|
||||
case SPEC_SHAMAN_RESTORATION:
|
||||
_scheduler.Schedule(2s, [this](TaskContext earthShield)
|
||||
{
|
||||
if (Unit* target = DoSelectLowestHpFriendly(40.f))
|
||||
@@ -662,9 +691,9 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
});
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
switch (ChrSpecialization(data))
|
||||
switch (data)
|
||||
{
|
||||
case ChrSpecialization::DruidBalance:
|
||||
case SPEC_DRUID_BALANCE:
|
||||
_scheduler.Schedule(2s, [this](TaskContext moonfire)
|
||||
{
|
||||
DoCastVictim(SPELL_TWISTED_VISAGE_MOONFIRE);
|
||||
@@ -675,8 +704,7 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
wrath.Repeat(3s, 5s);
|
||||
});
|
||||
break;
|
||||
case ChrSpecialization::DruidGuardian:
|
||||
case ChrSpecialization::DruidFeral:
|
||||
case SPEC_DRUID_FERAL:
|
||||
_scheduler.Schedule(1ms, [this](TaskContext /*catForm*/)
|
||||
{
|
||||
DoCastSelf(SPELL_TWISTED_VISAGE_CAT_FORM);
|
||||
@@ -691,7 +719,7 @@ struct npc_twisted_visage : public ScriptedAI
|
||||
});
|
||||
break;
|
||||
default:
|
||||
case ChrSpecialization::DruidRestoration:
|
||||
case SPEC_DRUID_RESTORATION:
|
||||
_scheduler.Schedule(2s, [this](TaskContext lifebloom)
|
||||
{
|
||||
if (Unit* target = DoSelectLowestHpFriendly(40.f))
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "icecrown_citadel.h"
|
||||
#include "CommonHelpers.h"
|
||||
#include "Containers.h"
|
||||
#include "DB2Stores.h"
|
||||
#include "GridNotifiers.h"
|
||||
@@ -1089,18 +1090,30 @@ class spell_sindragosa_unchained_magic : public SpellScript
|
||||
if (!player)
|
||||
continue;
|
||||
|
||||
ChrSpecializationEntry const* specialization = player->GetPrimarySpecializationEntry();
|
||||
if (!specialization)
|
||||
continue;
|
||||
|
||||
if (specialization->GetRole() == ChrSpecializationRole::Healer)
|
||||
if (Trinity::Helpers::Entity::IsPlayerHealer(player))
|
||||
{
|
||||
healers.push_back(target);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (specialization->GetFlags().HasFlag(ChrSpecializationFlag::Caster))
|
||||
casters.push_back(target);
|
||||
switch (player->GetClass())
|
||||
{
|
||||
case CLASS_PRIEST:
|
||||
case CLASS_MAGE:
|
||||
case CLASS_WARLOCK:
|
||||
casters.push_back(target);
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
if (Trinity::Helpers::Entity::GetPlayerSpecialization(player) != SPEC_SHAMAN_ENHANCEMENT)
|
||||
casters.push_back(target);
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
if (Trinity::Helpers::Entity::GetPlayerSpecialization(player) != SPEC_DRUID_FERAL)
|
||||
casters.push_back(target);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
targets.clear();
|
||||
|
||||
@@ -15,11 +15,12 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "naxxramas.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "CommonHelpers.h"
|
||||
#include "GameObject.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "MotionMaster.h"
|
||||
#include "naxxramas.h"
|
||||
#include "ObjectAccessor.h"
|
||||
#include "Player.h"
|
||||
#include "PlayerAI.h"
|
||||
@@ -183,7 +184,7 @@ class KelThuzadCharmedPlayerAI : public SimpleCharmedPlayerAI
|
||||
if (pTarget->HasBreakableByDamageCrowdControlAura())
|
||||
return false;
|
||||
// We _really_ dislike healers. So we hit them in the face. Repeatedly. Exclusively.
|
||||
return PlayerAI::IsPlayerHealer(pTarget);
|
||||
return Trinity::Helpers::Entity::IsPlayerHealer(pTarget);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -4252,119 +4252,6 @@ class spell_item_sephuzs_secret : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
enum AmalgamsSeventhSpine
|
||||
{
|
||||
SPELL_FRAGILE_ECHOES_MONK = 225281,
|
||||
SPELL_FRAGILE_ECHOES_SHAMAN = 225292,
|
||||
SPELL_FRAGILE_ECHOES_PRIEST_DISCIPLINE = 225294,
|
||||
SPELL_FRAGILE_ECHOES_PALADIN = 225297,
|
||||
SPELL_FRAGILE_ECHOES_DRUID = 225298,
|
||||
SPELL_FRAGILE_ECHOES_PRIEST_HOLY = 225366,
|
||||
SPELL_FRAGILE_ECHOES_EVOKER = 429020,
|
||||
SPELL_FRAGILE_ECHO_ENERGIZE = 215270,
|
||||
};
|
||||
|
||||
// 215266 - Fragile Echoes
|
||||
class spell_item_amalgams_seventh_spine : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo
|
||||
({
|
||||
SPELL_FRAGILE_ECHOES_MONK,
|
||||
SPELL_FRAGILE_ECHOES_SHAMAN,
|
||||
SPELL_FRAGILE_ECHOES_PRIEST_DISCIPLINE,
|
||||
SPELL_FRAGILE_ECHOES_PALADIN,
|
||||
SPELL_FRAGILE_ECHOES_DRUID,
|
||||
SPELL_FRAGILE_ECHOES_PRIEST_HOLY,
|
||||
SPELL_FRAGILE_ECHOES_EVOKER
|
||||
});
|
||||
}
|
||||
|
||||
void UpdateSpecAura(bool apply) const
|
||||
{
|
||||
Player* target = GetUnitOwner()->ToPlayer();
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
auto updateAuraIfInCorrectSpec = [&](ChrSpecialization spec, AmalgamsSeventhSpine aura)
|
||||
{
|
||||
if (!apply || target->GetPrimarySpecialization() != spec)
|
||||
target->RemoveAurasDueToSpell(aura);
|
||||
else if (!target->HasAura(aura))
|
||||
target->CastSpell(target, aura, GetEffect(EFFECT_0));
|
||||
};
|
||||
|
||||
switch (target->GetClass())
|
||||
{
|
||||
case CLASS_MONK:
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::MonkMistweaver, SPELL_FRAGILE_ECHOES_MONK);
|
||||
break;
|
||||
case CLASS_SHAMAN:
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::ShamanRestoration, SPELL_FRAGILE_ECHOES_SHAMAN);
|
||||
break;
|
||||
case CLASS_PRIEST:
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::PriestDiscipline, SPELL_FRAGILE_ECHOES_PRIEST_DISCIPLINE);
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::PriestHoly, SPELL_FRAGILE_ECHOES_PRIEST_HOLY);
|
||||
break;
|
||||
case CLASS_PALADIN:
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::PaladinHoly, SPELL_FRAGILE_ECHOES_PALADIN);
|
||||
break;
|
||||
case CLASS_DRUID:
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::DruidRestoration, SPELL_FRAGILE_ECHOES_DRUID);
|
||||
break;
|
||||
case CLASS_EVOKER:
|
||||
updateAuraIfInCorrectSpec(ChrSpecialization::EvokerPreservation, SPELL_FRAGILE_ECHOES_EVOKER);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void HandleHeartbeat() const
|
||||
{
|
||||
UpdateSpecAura(true);
|
||||
}
|
||||
|
||||
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const
|
||||
{
|
||||
UpdateSpecAura(false);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnHeartbeat += AuraHeartbeatFn(spell_item_amalgams_seventh_spine::HandleHeartbeat);
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_item_amalgams_seventh_spine::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 215267 - Fragile Echo
|
||||
class spell_item_amalgams_seventh_spine_mana_restore : public AuraScript
|
||||
{
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_FRAGILE_ECHO_ENERGIZE });
|
||||
}
|
||||
|
||||
void TriggerManaRestoration(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) const
|
||||
{
|
||||
if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_EXPIRE)
|
||||
return;
|
||||
|
||||
Unit* caster = GetCaster();
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (AuraEffect const* trinketEffect = caster->GetAuraEffect(aurEff->GetSpellEffectInfo().TriggerSpell, EFFECT_0))
|
||||
caster->CastSpell(caster, SPELL_FRAGILE_ECHO_ENERGIZE, CastSpellExtraArgs(aurEff).AddSpellMod(SPELLVALUE_BASE_POINT0, trinketEffect->GetAmount()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_item_amalgams_seventh_spine_mana_restore::TriggerManaRestoration, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
// 228445 - March of the Legion
|
||||
class spell_item_set_march_of_the_legion : public AuraScript
|
||||
{
|
||||
@@ -4787,8 +4674,6 @@ void AddSC_item_spell_scripts()
|
||||
RegisterSpellScript(spell_item_eggnog);
|
||||
|
||||
RegisterSpellScript(spell_item_sephuzs_secret);
|
||||
RegisterSpellScript(spell_item_amalgams_seventh_spine);
|
||||
RegisterSpellScript(spell_item_amalgams_seventh_spine_mana_restore);
|
||||
RegisterSpellScript(spell_item_set_march_of_the_legion);
|
||||
RegisterSpellScript(spell_item_seal_of_darkshire_nobility);
|
||||
RegisterSpellScript(spell_item_lightblood_elixir);
|
||||
|
||||
Reference in New Issue
Block a user