Pelf

sister svalna (1)

Aug 6th, 2011
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.59 KB | None | 0 0
  1. diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
  2. index 6ffe614..d34caef 100644
  3. --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
  4. +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
  5. @@ -128,6 +128,7 @@ enum Spells
  6.      SPELL_UNDEATH                   = 70089,
  7.      SPELL_IMPALING_SPEAR            = 71443,
  8.      SPELL_AETHER_SHIELD             = 71463,
  9. +   SPELL_DIVINE_SURGE              = 71465,
  10.      SPELL_HURL_SPEAR                = 71466,
  11.  
  12.      // Captain Arnath
  13. @@ -733,12 +734,16 @@ class boss_sister_svalna : public CreatureScript
  14.              void Reset()
  15.              {
  16.                  _Reset();
  17. -                me->SetReactState(REACT_DEFENSIVE);
  18. +               me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
  19. +               me->RemoveAurasDueToSpell(SPELL_DIVINE_SURGE);
  20. +               _impaledguid = 0;
  21.                  _isEventInProgress = false;
  22.              }
  23.  
  24.              void JustDied(Unit* /*killer*/)
  25.              {
  26. +               if (_impaledguid)
  27. +                   RemoveSpike();
  28.                  _JustDied();
  29.                  Talk(SAY_SVALNA_DEATH);
  30.  
  31. @@ -763,8 +768,7 @@ class boss_sister_svalna : public CreatureScript
  32.                      crok->AI()->Talk(SAY_CROK_COMBAT_SVALNA);
  33.                  me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
  34.                  events.ScheduleEvent(EVENT_SVALNA_COMBAT, 9000);
  35. -                events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(40000, 50000));
  36. -                events.ScheduleEvent(EVENT_AETHER_SHIELD, urand(100000, 110000));
  37. +                events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(20000, 30000));
  38.              }
  39.  
  40.              void KilledUnit(Unit* victim)
  41. @@ -772,6 +776,8 @@ class boss_sister_svalna : public CreatureScript
  42.                  switch (victim->GetTypeId())
  43.                  {
  44.                      case TYPEID_PLAYER:
  45. +                       if (victim->GetGUID() == _impaledguid)
  46. +                           _impaledguid = 0;
  47.                          Talk(SAY_SVALNA_KILL);
  48.                          break;
  49.                      case TYPEID_UNIT:
  50. @@ -795,6 +801,7 @@ class boss_sister_svalna : public CreatureScript
  51.              void JustReachedHome()
  52.              {
  53.                  _JustReachedHome();
  54. +               me->RemoveAurasDueToSpell(SPELL_DIVINE_SURGE);
  55.                  me->SetReactState(REACT_PASSIVE);
  56.              }
  57.  
  58. @@ -835,6 +842,18 @@ class boss_sister_svalna : public CreatureScript
  59.                  }
  60.              }
  61.  
  62. +           void RemoveSpike()
  63. +           {
  64. +               if (!_impaledguid)
  65. +                   return;
  66. +               if (Player* _impaled = sObjectMgr->GetPlayer(_impaledguid))
  67. +               {
  68. +                   _impaled->RemoveAurasDueToSpell(VEHICLE_SPELL_RIDE_HARDCODED);
  69. +                   _impaled->RemoveAurasDueToSpell(SPELL_IMPALING_SPEAR);
  70. +                   _impaledguid = 0;
  71. +               }
  72. +           }
  73. +
  74.              void SpellHitTarget(Unit* target, SpellEntry const* spell)
  75.              {
  76.                  switch (spell->Id)
  77. @@ -854,8 +873,9 @@ class boss_sister_svalna : public CreatureScript
  78.                          {
  79.                              Talk(EMOTE_SVALNA_IMPALE, target->GetGUID());
  80.                              summon->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNK1 | 0x4000);
  81. -                            summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false);
  82. -                        }
  83. +                           summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false);
  84. +                           _impaledguid = target->GetGUID();
  85. +                       }
  86.                          break;
  87.                      default:
  88.                          break;
  89. @@ -872,6 +892,9 @@ class boss_sister_svalna : public CreatureScript
  90.                  if (me->HasUnitState(UNIT_STAT_CASTING))
  91.                      return;
  92.  
  93. +               if (!GetClosestCreatureWithEntry(me, NPC_IMPALING_SPEAR, 50000.0f))
  94. +                   RemoveSpike();
  95. +
  96.                  while (uint32 eventId = events.ExecuteEvent())
  97.                  {
  98.                      switch (eventId)
  99. @@ -886,13 +909,27 @@ class boss_sister_svalna : public CreatureScript
  100.                          case EVENT_SVALNA_COMBAT:
  101.                              me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_1);
  102.                              me->SetReactState(REACT_DEFENSIVE);
  103. +                           DoCast(me, SPELL_DIVINE_SURGE, true);
  104.                              Talk(SAY_SVALNA_AGGRO);
  105.                              break;
  106.                          case EVENT_IMPALING_SPEAR:
  107. +                           if (_impaledguid)
  108. +                               break;
  109.                              if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 0.0f, true, -SPELL_IMPALING_SPEAR))
  110. -                                DoCast(target, SPELL_IMPALING_SPEAR);
  111. -                            events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(20000, 25000));
  112. -                            break;
  113. +                           {
  114. +                               if (Creature* _oldspike = GetClosestCreatureWithEntry(me, NPC_IMPALING_SPEAR, 50000.0f))
  115. +                               {
  116. +                                   _oldspike->DespawnOrUnsummon();
  117. +                                   RemoveSpike();
  118. +                               }
  119. +                               DoCast(target, SPELL_IMPALING_SPEAR);
  120. +                               events.ScheduleEvent(EVENT_AETHER_SHIELD, 5000);
  121. +                           }
  122. +                            events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(40000, 50000));
  123. +                           break;
  124. +                       case EVENT_AETHER_SHIELD:
  125. +                           DoCast(me, SPELL_AETHER_SHIELD, true);
  126. +                           break;
  127.                          default:
  128.                              break;
  129.                      }
  130. @@ -902,6 +939,7 @@ class boss_sister_svalna : public CreatureScript
  131.              }
  132.  
  133.          private:
  134. +           uint64 _impaledguid;
  135.              bool _isEventInProgress;
  136.          };
Advertisement
Add Comment
Please, Sign In to add comment