Merge branch 'master' into Playerbot
This commit is contained in:
@@ -7826,7 +7826,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
// Judgement of Light
|
||||
case 20185:
|
||||
{
|
||||
if (!victim || !victim->IsAlive() || victim->HasSpellCooldown(20267))
|
||||
if (!victim || !victim->IsAlive())
|
||||
return false;
|
||||
|
||||
auto* caster = triggeredByAura->GetBase()->GetCaster();
|
||||
@@ -7836,13 +7836,12 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
// 2% of base health
|
||||
basepoints0 = int32(victim->CountPctFromMaxHealth(2));
|
||||
victim->CastCustomSpell(victim, 20267, &basepoints0, 0, 0, true, 0, triggeredByAura);
|
||||
victim->AddSpellCooldown(20267, 0, 4 * IN_MILLISECONDS);
|
||||
return true;
|
||||
}
|
||||
// Judgement of Wisdom
|
||||
case 20186:
|
||||
{
|
||||
if (!victim || !victim->IsAlive() || !victim->HasActivePowerType(POWER_MANA) || victim->HasSpellCooldown(20268))
|
||||
if (!victim || !victim->IsAlive() || !victim->HasActivePowerType(POWER_MANA))
|
||||
return false;
|
||||
|
||||
auto* caster = triggeredByAura->GetBase()->GetCaster();
|
||||
@@ -7852,7 +7851,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
// 2% of base mana
|
||||
basepoints0 = int32(CalculatePct(victim->GetCreateMana(), 2));
|
||||
victim->CastCustomSpell(victim, 20268, &basepoints0, nullptr, nullptr, true, 0, triggeredByAura);
|
||||
victim->AddSpellCooldown(20268, 0, 4 * IN_MILLISECONDS);
|
||||
return true;
|
||||
}
|
||||
// Holy Power (Redemption Armor set)
|
||||
@@ -16251,10 +16249,6 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u
|
||||
continue;
|
||||
}
|
||||
|
||||
// Triggered spells not triggering additional spells
|
||||
//bool triggered = !spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_FROM_PROCS) ?
|
||||
// (procExtra & PROC_EX_INTERNAL_TRIGGERED && !(procFlag & PROC_FLAG_DONE_TRAP_ACTIVATION)) : false;
|
||||
|
||||
bool hasTriggeredProc = false;
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
@@ -17499,11 +17493,11 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, WeaponAttackTyp
|
||||
return false;
|
||||
|
||||
// Additional checks for triggered spells (ignore trap casts)
|
||||
//if (procExtra & PROC_EX_INTERNAL_TRIGGERED && !(procFlag & PROC_FLAG_DONE_TRAP_ACTIVATION))
|
||||
//{
|
||||
// if (!spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_TRIGGERED))
|
||||
// return false;
|
||||
//}
|
||||
if (eventInfo.GetHitMask() & PROC_EX_INTERNAL_TRIGGERED && !(EventProcFlag & PROC_FLAG_DONE_TRAP_ACTIVATION))
|
||||
{
|
||||
if (!spellProto->HasAttribute(SPELL_ATTR3_CAN_PROC_FROM_PROCS))
|
||||
return false;
|
||||
}
|
||||
|
||||
// Xinef: additional check for player auras - only player spells can trigger player proc auras
|
||||
// Xinef: skip victim auras
|
||||
|
||||
@@ -4903,12 +4903,6 @@ void SpellMgr::LoadSpellInfoCorrections()
|
||||
spellInfo->AttributesEx7 |= SPELL_ATTR7_TREAT_AS_NPC_AOE;
|
||||
});
|
||||
|
||||
// Heal (Crystal Spire of Karabor)
|
||||
ApplySpellFix({ 40972 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->AttributesEx3 |= SPELL_ATTR3_SUPPRESS_CASTER_PROCS;
|
||||
});
|
||||
|
||||
// Torch (Death Knights near the Chapel)
|
||||
ApplySpellFix({ 52953 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
|
||||
@@ -1756,7 +1756,6 @@ void World::SetInitialWorldSettings()
|
||||
|
||||
LOG_INFO("server.loading", "Loading WorldStates..."); // must be loaded before battleground, outdoor PvP and conditions
|
||||
sWorldState->LoadWorldStates();
|
||||
sWorldState->Load();
|
||||
|
||||
LOG_INFO("server.loading", "Loading Conditions...");
|
||||
sConditionMgr->LoadConditions();
|
||||
@@ -1881,6 +1880,9 @@ void World::SetInitialWorldSettings()
|
||||
uint32 nextGameEvent = sGameEventMgr->StartSystem();
|
||||
_timers[WUPDATE_EVENTS].SetInterval(nextGameEvent); //depend on next event
|
||||
|
||||
LOG_INFO("server.loading", "Loading WorldState...");
|
||||
sWorldState->Load(); // must be called after loading game events
|
||||
|
||||
// Delete all characters which have been deleted X days before
|
||||
Player::DeleteOldCharacters();
|
||||
|
||||
|
||||
@@ -259,12 +259,12 @@ struct boss_kiljaeden : public BossAI
|
||||
ScheduleHealthCheckEvent(85, [&]{
|
||||
_phase = PHASE_DARKNESS;
|
||||
if (Creature* kalec = instance->GetCreature(DATA_KALECGOS_KJ))
|
||||
kalec->AI()->Talk(SAY_KALECGOS_AWAKEN, 16s);
|
||||
kalec->AI()->Talk(SAY_KALECGOS_AWAKEN, 21s);
|
||||
|
||||
if (Creature* anveena = instance->GetCreature(DATA_ANVEENA))
|
||||
anveena->AI()->Talk(SAY_ANVEENA_IMPRISONED, 22s);
|
||||
anveena->AI()->Talk(SAY_ANVEENA_IMPRISONED, 26s);
|
||||
|
||||
Talk(SAY_KJ_PHASE3, 28s);
|
||||
Talk(SAY_KJ_PHASE3, 32s);
|
||||
|
||||
scheduler.CancelAll();
|
||||
|
||||
@@ -274,7 +274,7 @@ struct boss_kiljaeden : public BossAI
|
||||
if (Creature* kalec = instance->GetCreature(DATA_KALECGOS_KJ))
|
||||
kalec->AI()->Talk(SAY_KALECGOS_READY1);
|
||||
EmpowerOrb(false);
|
||||
}, 35s);
|
||||
}, 38s);
|
||||
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
Talk(SAY_KJ_REFLECTION);
|
||||
@@ -286,11 +286,11 @@ struct boss_kiljaeden : public BossAI
|
||||
DoCastSelf(SPELL_SHADOW_SPIKE);
|
||||
});
|
||||
|
||||
ScheduleTimedEvent(3s, [&] {
|
||||
ScheduleTimedEvent(31s, [&] {
|
||||
DoCastSelf(SPELL_FLAME_DART);
|
||||
}, 10s);
|
||||
}, 20s);
|
||||
|
||||
ScheduleTimedEvent(16s, [&] {
|
||||
ScheduleTimedEvent(55s, [&] {
|
||||
Talk(EMOTE_KJ_DARKNESS);
|
||||
DoCastAOE(SPELL_DARKNESS_OF_A_THOUSAND_SOULS);
|
||||
}, 45s);
|
||||
@@ -299,12 +299,12 @@ struct boss_kiljaeden : public BossAI
|
||||
ScheduleHealthCheckEvent(55, [&] {
|
||||
_phase = PHASE_ARMAGEDDON;
|
||||
if (Creature* kalec = instance->GetCreature(DATA_KALECGOS_KJ))
|
||||
kalec->AI()->Talk(SAY_KALECGOS_LETGO, 16s);
|
||||
kalec->AI()->Talk(SAY_KALECGOS_LETGO, 18s);
|
||||
|
||||
if (Creature* anveena = instance->GetCreature(DATA_ANVEENA))
|
||||
anveena->AI()->Talk(SAY_ANVEENA_LOST, 22s);
|
||||
anveena->AI()->Talk(SAY_ANVEENA_LOST, 25s);
|
||||
|
||||
Talk(SAY_KJ_PHASE4, 28s);
|
||||
Talk(SAY_KJ_PHASE4, 32s);
|
||||
|
||||
scheduler.CancelAll();
|
||||
|
||||
@@ -312,7 +312,7 @@ struct boss_kiljaeden : public BossAI
|
||||
if (Creature* kalec = instance->GetCreature(DATA_KALECGOS_KJ))
|
||||
kalec->AI()->Talk(SAY_KALECGOS_READY2);
|
||||
EmpowerOrb(false);
|
||||
}, 35s);
|
||||
}, 38s);
|
||||
|
||||
scheduler.Schedule(1s, [this](TaskContext)
|
||||
{
|
||||
@@ -326,7 +326,11 @@ struct boss_kiljaeden : public BossAI
|
||||
ScheduleBasicAbilities();
|
||||
});
|
||||
|
||||
ScheduleTimedEvent(15s, [&] {
|
||||
ScheduleTimedEvent(28s, [&] {
|
||||
DoCastSelf(SPELL_FLAME_DART);
|
||||
}, 20s);
|
||||
|
||||
ScheduleTimedEvent(64s, [&] {
|
||||
me->RemoveAurasDueToSpell(SPELL_ARMAGEDDON_PERIODIC);
|
||||
Talk(EMOTE_KJ_DARKNESS);
|
||||
DoCastAOE(SPELL_DARKNESS_OF_A_THOUSAND_SOULS);
|
||||
@@ -362,14 +366,14 @@ struct boss_kiljaeden : public BossAI
|
||||
|
||||
if (Creature* kalec = instance->GetCreature(DATA_KALECGOS_KJ))
|
||||
{
|
||||
kalec->AI()->Talk(SAY_KALECGOS_FOCUS, 8s);
|
||||
kalec->AI()->Talk(SAY_KALECGOS_FATE, 20s + 200ms);
|
||||
kalec->AI()->Talk(SAY_KALECGOS_FOCUS, 9s);
|
||||
kalec->AI()->Talk(SAY_KALECGOS_FATE, 22s + 200ms);
|
||||
}
|
||||
|
||||
if (Creature* anveena = instance->GetCreature(DATA_ANVEENA))
|
||||
{
|
||||
anveena->AI()->Talk(SAY_ANVEENA_KALEC, 18s);
|
||||
anveena->AI()->Talk(SAY_ANVEENA_GOODBYE, 25s);
|
||||
anveena->AI()->Talk(SAY_ANVEENA_KALEC, 20s);
|
||||
anveena->AI()->Talk(SAY_ANVEENA_GOODBYE, 29s);
|
||||
}
|
||||
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
@@ -378,7 +382,7 @@ struct boss_kiljaeden : public BossAI
|
||||
anveena->RemoveAllAuras();
|
||||
anveena->DespawnOrUnsummon(3500);
|
||||
}
|
||||
}, 28s);
|
||||
}, 34s);
|
||||
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
if (Creature* anveena = instance->GetCreature(DATA_ANVEENA))
|
||||
@@ -394,7 +398,11 @@ struct boss_kiljaeden : public BossAI
|
||||
|
||||
ScheduleBasicAbilities();
|
||||
|
||||
ScheduleTimedEvent(25s, [&] {
|
||||
ScheduleTimedEvent(16s, [&] {
|
||||
DoCastSelf(SPELL_FLAME_DART);
|
||||
}, 20s);
|
||||
|
||||
ScheduleTimedEvent(15s, [&] {
|
||||
me->RemoveAurasDueToSpell(SPELL_ARMAGEDDON_PERIODIC);
|
||||
Talk(EMOTE_KJ_DARKNESS);
|
||||
DoCastAOE(SPELL_DARKNESS_OF_A_THOUSAND_SOULS);
|
||||
@@ -411,13 +419,13 @@ struct boss_kiljaeden : public BossAI
|
||||
}, 7s);
|
||||
}
|
||||
Talk(SAY_KJ_PHASE5);
|
||||
}, 30s);
|
||||
}, 36s);
|
||||
|
||||
me->m_Events.AddEventAtOffset([&] {
|
||||
if (Creature* kalec = instance->GetCreature(DATA_KALECGOS_KJ))
|
||||
kalec->AI()->Talk(SAY_KALECGOS_READY_ALL);
|
||||
EmpowerOrb(true);
|
||||
}, 61s);
|
||||
}, 48s);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -336,6 +336,22 @@ private:
|
||||
TaskScheduler scheduler;
|
||||
};
|
||||
|
||||
class spell_spell_fury_aura : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_spell_fury_aura);
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (GetUnitOwner()->ToPlayer())
|
||||
ModStackAmount(5);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectApply += AuraEffectApplyFn(spell_spell_fury_aura::OnApply, EFFECT_0, SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_instance_sunwell_plateau()
|
||||
{
|
||||
new instance_sunwell_plateau();
|
||||
@@ -345,4 +361,5 @@ void AddSC_instance_sunwell_plateau()
|
||||
RegisterSpellScriptWithArgs(spell_sunwell_teleport, "spell_teleport_to_apex_point", SPELL_TELEPORT_TO_APEX_POINT);
|
||||
RegisterSpellScriptWithArgs(spell_sunwell_teleport, "spell_teleport_to_witchs_sanctum", SPELL_TELEPORT_TO_WITCHS_SANCTUM);
|
||||
RegisterSpellScriptWithArgs(spell_sunwell_teleport, "spell_teleport_to_sunwell_plateau", SPELL_TELEPORT_TO_SUNWELL_PLATEAU);
|
||||
RegisterSpellScript(spell_spell_fury_aura);
|
||||
}
|
||||
|
||||
@@ -473,7 +473,7 @@ public:
|
||||
{
|
||||
if (spell->Id == SPELL_KODO_KOMBO_ITEM)
|
||||
{
|
||||
if (!caster->HasAnyAuras(SPELL_KODO_KOMBO_PLAYER_BUFF, SPELL_KODO_KOMBO_DESPAWN_BUFF)
|
||||
if (!(caster->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) || me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
|
||||
&& (me->GetEntry() == NPC_AGED_KODO || me->GetEntry() == NPC_DYING_KODO || me->GetEntry() == NPC_ANCIENT_KODO))
|
||||
{
|
||||
me->UpdateEntry(NPC_TAMED_KODO, nullptr, false);
|
||||
@@ -494,7 +494,7 @@ public:
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature) override
|
||||
{
|
||||
if (player->HasAllAuras(SPELL_KODO_KOMBO_PLAYER_BUFF, SPELL_KODO_KOMBO_DESPAWN_BUFF))
|
||||
if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
|
||||
{
|
||||
player->TalkedToCreature(creature->GetEntry(), ObjectGuid::Empty);
|
||||
player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF);
|
||||
|
||||
@@ -1150,6 +1150,36 @@ class spell_pal_seal_of_vengeance : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
// 1022 - Hand of Protection
|
||||
class spell_pal_hand_of_protection : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_pal_hand_of_protection);
|
||||
|
||||
SpellCastResult CheckCast()
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
|
||||
if (!caster->GetTarget() || caster->GetTarget() == caster->GetGUID())
|
||||
return SPELL_CAST_OK;
|
||||
|
||||
if (caster->HasStunAura())
|
||||
return SPELL_FAILED_STUNNED;
|
||||
|
||||
if (caster->HasConfuseAura())
|
||||
return SPELL_FAILED_CONFUSED;
|
||||
|
||||
if (caster->GetUnitFlags() & UNIT_FLAG_FLEEING)
|
||||
return SPELL_FAILED_FLEEING;
|
||||
|
||||
return SPELL_CAST_OK;
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnCheckCast += SpellCheckCastFn(spell_pal_hand_of_protection::CheckCast);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_paladin_spell_scripts()
|
||||
{
|
||||
RegisterSpellAndAuraScriptPair(spell_pal_seal_of_command, spell_pal_seal_of_command_aura);
|
||||
@@ -1178,4 +1208,5 @@ void AddSC_paladin_spell_scripts()
|
||||
RegisterSpellScript(spell_pal_righteous_defense);
|
||||
RegisterSpellScript(spell_pal_seal_of_righteousness);
|
||||
RegisterSpellScript(spell_pal_seal_of_vengeance);
|
||||
RegisterSpellScript(spell_pal_hand_of_protection);
|
||||
}
|
||||
|
||||
@@ -458,7 +458,8 @@ public:
|
||||
####*/
|
||||
enum L70ETCMusic
|
||||
{
|
||||
MUSIC_L70_ETC_MUSIC = 11803
|
||||
MUSIC_L70_ETC_MUSIC = 11803,
|
||||
MUSIC_L70_ETC_MUSIC_LOUD = 12868
|
||||
};
|
||||
|
||||
enum L70ETCMusicEvents
|
||||
@@ -486,7 +487,10 @@ public:
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_ETC_START_MUSIC:
|
||||
me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC);
|
||||
if (me->GetMapId() == MAP_BLACKROCK_DEPTHS)
|
||||
me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC_LOUD);
|
||||
else
|
||||
me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC);
|
||||
_events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600); // Every 1.6 seconds SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value)
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user