Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_himeron.cpp b/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_himeron.cpp
- index b15f623..aa66323 100644
- --- a/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_himeron.cpp
- +++ b/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_himeron.cpp
- @@ -101,6 +101,7 @@ public:
- events.ScheduleEvent(EVENT_CAUSTIC_SLIME, 10000);
- events.ScheduleEvent(EVENT_MASSACRE, 31000);
- pInstance->SetData(DATA_CHIMAERON, IN_PROGRESS);
- + DoZoneInCombat();
- }
- void DamageDealt(Unit* victim, uint32 &damage, DamageEffectType damageType)
- @@ -240,9 +241,6 @@ public:
- return false;
- if (pInstance->GetData(DATA_CHIMAERON) == IN_PROGRESS || pInstance->GetData(DATA_BILE_O_TRON_800) == 1)
- return false;
- - if (pPlayer->GetGroup())
- - if (pPlayer->GetGUID() != pPlayer->GetGroup()->GetLeaderGUID())
- - return false;
- pPlayer->ADD_GOSSIP_ITEM(0, "Restrictions? What restrictions?", GOSSIP_SENDER_MAIN, 800005);
- pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
- return true;
- diff --git a/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_maloriak.cpp b/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_maloriak.cpp
- index adbc531..aad5222 100644
- --- a/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_maloriak.cpp
- +++ b/src/server/scripts/EasternKingdoms/BlackwingDescent/boss_maloriak.cpp
- @@ -48,10 +48,12 @@ enum Spells
- //2 - frost phase
- SPELL_FLASH_FREEZE = 77699,
- SPELL_BITING_CHILL = 77760,
- + SPELL_BITING_CHILL_DMG = 77763,
- //3 - execute phase
- SPELL_RELEASE_ALL_MINIONS = 77991,
- SPELL_ABSOLUTE_ZERO = 78223,
- + SPELL_ABSOLUTE_ZERO_AURA = 78201,
- SPELL_ABSOLUTE_ZERO_DMG = 78208,
- SPELL_SHATTER = 77715,
- SPELL_ACID_NOVA = 78225,
- @@ -161,6 +163,13 @@ public:
- void Reset()
- {
- //сделать в ядре для всех сложностей
- + if (SpellEntry* spell = GET_SPELL(SPELL_FLASH_FREEZE))
- + {
- + spell->EffectRadiusIndex[0] = 8; // EFFECT_RADIUS_5_YARDS;
- + spell->EffectRadiusIndex[1] = 8; // EFFECT_RADIUS_5_YARDS;
- + }
- + if (SpellEntry* spell = GET_SPELL(SPELL_BITING_CHILL_DMG))
- + spell->EffectRadiusIndex[0] = 29; // EFFECT_RADIUS_6_YARDS
- if (SpellEntry* spell = GET_SPELL(SPELL_DEBILITATING_SLIME))
- {
- spell->EffectRadiusIndex[0] = 12; // EFFECT_RADIUS_100_YARDS
- @@ -183,6 +192,11 @@ public:
- spell->EffectRadiusIndex[2] = 13; // EFFECT_RADIUS_10_YARDS
- spell->AttributesEx3 |= SPELL_ATTR3_STACK_FOR_DIFF_CASTERS; // Аура должна стакаться от разных нпц
- }
- + if (SpellEntry* spell = GET_SPELL(SPELL_ABSOLUTE_ZERO_DMG))
- + {
- + spell->EffectRadiusIndex[0] = 8; // EFFECT_RADIUS_5_YARDS;
- + spell->EffectRadiusIndex[1] = 8; // EFFECT_RADIUS_5_YARDS;
- + }
- stage = 0;
- maloriakOrientation = 0;
- if (pInstance)
- @@ -241,9 +255,9 @@ public:
- {
- events.CancelEvent(EVENT_REMEDY);
- events.CancelEvent(EVENT_ARCANE_STORM);
- - events.ScheduleEvent(EVENT_ABSOLUTE_ZERO, urand(10000, 15000));
- + events.ScheduleEvent(EVENT_ABSOLUTE_ZERO, urand(4000, 5000));
- events.ScheduleEvent(EVENT_MAGMA_JETS, 5000);
- - events.ScheduleEvent(EVENT_ACID_NOVA, urand(15000, 20000));
- + events.ScheduleEvent(EVENT_ACID_NOVA, urand(7000, 8000));
- }
- void EnterCombat(Unit* attacker)
- @@ -262,6 +276,7 @@ public:
- void JustDied(Unit* /*killer*/)
- {
- Talk(SAY_DEATH);
- + summons.DespawnAll();
- if (pInstance)
- pInstance->SetData(DATA_MALORIAK, DONE);
- }
- @@ -280,11 +295,16 @@ public:
- void SpellHit(Unit* caster, SpellEntry const* spell)
- {
- if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL))
- - if ((me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == SPELL_RELEASE_ABERRATIONS) ||
- - (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == SPELL_ARCANE_STORM))
- + if (me->GetCurrentSpell(CURRENT_GENERIC_SPELL)->m_spellInfo->Id == SPELL_RELEASE_ABERRATIONS)
- + for (uint8 i = 0; i < 3; ++i)
- + if (spell->Effect[i] == SPELL_EFFECT_INTERRUPT_CAST)
- + me->InterruptSpell(CURRENT_GENERIC_SPELL);
- +
- + if (me->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
- + if (me->GetCurrentSpell(CURRENT_CHANNELED_SPELL)->m_spellInfo->Id == SPELL_ARCANE_STORM)
- for (uint8 i = 0; i < 3; ++i)
- if (spell->Effect[i] == SPELL_EFFECT_INTERRUPT_CAST)
- - me->InterruptSpell(CURRENT_GENERIC_SPELL, false);
- + me->InterruptSpell(CURRENT_CHANNELED_SPELL);
- }
- void DamageTaken(Unit* attacker, uint32 &damage)
- @@ -447,22 +467,16 @@ public:
- case EVENT_FLASH_FREEZE:
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
- DoCast(target, SPELL_FLASH_FREEZE);
- - events.ScheduleEvent(EVENT_BITING_CHILL, 15000);
- + events.ScheduleEvent(EVENT_FLASH_FREEZE, 15000);
- break;
- case EVENT_ABSOLUTE_ZERO:
- - /*Пока нерабочий нпц, в будущем исправлю
- - Position pos;
- - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM))
- - {
- - //DoCast(target, SPELL_ABSOLUTE_ZERO); //не срабатывает, todo: починить
- - target->GetPosition(&pos);
- - me->SummonCreature(NPC_ABSOLUTE_ZERO,
- - pos.GetPositionX() + urand(1, 4),
- - pos.GetPositionY() + urand(1,4),
- - pos.GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 8000);
- - }
- + Unit* target;
- + target = SelectTarget(SELECT_TARGET_RANDOM, 1, 15.0f);
- + if (!target)
- + target = SelectTarget(SELECT_TARGET_RANDOM);
- + DoCast(target, SPELL_ABSOLUTE_ZERO);
- events.ScheduleEvent(EVENT_ABSOLUTE_ZERO, urand(20000, 30000));
- - break;*/
- + break;
- case EVENT_MAGMA_JETS:
- maloriakOrientation = me->GetOrientation();
- DoCast(me, SPELL_MAGMA_JETS);
- @@ -519,6 +533,7 @@ class npc_flash_freeze : public CreatureScript
- trappedPlayer = 0;
- player->RemoveAurasDueToSpell(SPELL_FLASH_FREEZE);
- }
- + me->DespawnOrUnsummon();
- }
- void UpdateAI(const uint32 diff)
- @@ -547,7 +562,6 @@ class npc_flash_freeze : public CreatureScript
- }
- };
- -//пока это не работает
- class npc_absolute_zero : public CreatureScript
- {
- public:
- @@ -564,24 +578,43 @@ class npc_absolute_zero : public CreatureScript
- }
- uint32 uiPauseTimer; //чтобы не срабатывало сразу при саммоне возле игрока
- + uint32 uiDespawnTimer;
- bool bCanExplode;
- void Reset()
- {
- - uiPauseTimer = 2000;
- + uiPauseTimer = 3000;
- + uiDespawnTimer = 15000;
- bCanExplode = false;
- }
- + void IsSummonedBy(Unit* owner)
- + {
- + DoCast(SPELL_ABSOLUTE_ZERO_AURA);
- + }
- +
- void UpdateAI(const uint32 diff)
- {
- - if (uiPauseTimer <= diff)
- + if ((uiPauseTimer <= diff) && !bCanExplode)
- + {
- bCanExplode = true;
- + if (Unit* target = me->SelectNearestTarget())
- + {
- + me->AddThreat(target, 100000.0f);
- + me->GetMotionMaster()->MoveFollow(target, 0.1f, 0.0f);
- + }
- + }
- else
- uiPauseTimer -= diff;
- + if (uiDespawnTimer <= diff)
- + me->DespawnOrUnsummon();
- + else
- + uiDespawnTimer -= diff;
- +
- if (Unit* target = me->SelectNearestTarget())
- {
- - if ((me->GetDistance(target) <= 3.0f) && bCanExplode)
- + if ((me->GetDistance(target) <= 4.0f) && bCanExplode)
- {
- DoCast(SPELL_ABSOLUTE_ZERO_DMG);
- me->DespawnOrUnsummon();
Advertisement
Add Comment
Please, Sign In to add comment