Jump to content
TrinityCore

Rudnikov

Plebs
  • Posts

    1
  • Joined

  • Last visited

Posts posted by Rudnikov

  1. #include "ScriptMgr.h"
    1 #include "ScriptedCreature.h"
    2 #include "maw_of_souls.h"
       
    3 enum Spells {
    4 // Helya Spells
    5 SPELL_HELYA_TORRENT_SIEGE = 197805,
    6 SPELL_HELYA_TORRENT_BREACH = 198495,
    7 SPELL_HELYA_WING_BUFFET = 198520,
    8 SPELL_HELYA_CORRUPTED = 227223,
    9 SPELL_HELYA_SUBMERGED = 196947,
    10 SPELL_HELYA_BARRAGE = 202088,
       
    11 // Destructor Tentacle Spells
    12 SPELL_DESTRUCTOR_SMASH = 196534,
    13 SPELL_DESTRUCTOR_RUPTURE = 185539,
       
    14 // Grasping Tentacle Spells
       
       
    15 // Piercing Tentacle Spells
    16 SPELL_PIERCING_TENTACLE = 197117,
    17 };
       
    18 enum CreaturesIds {
    19 NPC_DESTRUCTOR_TENTACLE = 99801, // Level 112
    20 NPC_GRASPING_TENTACLE = 100360, // Level 111
    21 NPC_PIERCING_TENTACLE = 100188, // Level 112
    22 };
       
    23 enum Auras {
    24 AURA_HELYA_TAINT = 197262
    25 };
       
    26 enum Yells {
    27 YELL_PRE_ENCOUNTER = 0,
    28 YELL_ENTER_COMBAT = 1,
    29 YELL_TAINT = 2,
    30 YELL_TENTACLE = 3,
    31 YELL_CORRUPTED = 4,
    32 YELL_KILL = 5,
    33 YELL_WIPE = 6,
    34 YELL_KILLED = 7
    35 };
       
    36 enum Events {
    37 EVENT_TAINT = 1,
    38 EVENT_BARRAGE = 2
    39 };
       
    40 enum Phases {
    41 PHASE_SIEGE = 0,
    42 PHASE_SUBMERGE = 1,
    43 PHASE_BREACH = 2
    44 };
       
       
    45 class boss_helya_maw : public CreatureScript {
    46 public:
    47 boss_helya_maw() : CreatureScript("boss_helya_maw") {}
       
    48 struct boss_helya_mawAI : public BossAI {
    49 boss_helya_mawAI(Creature* creature) : BossAI(creature, DATA_HELYA_MAW) {
    50 Initialize();
    51 SetCombatMovement(false);
    52 }
       
    53 void Initialize() {
    54 DifficultyModifier();
    55 Phase = PHASE_SIEGE;
    56 if(isHeroic || isMythic) {
    57 events.ScheduleEvent(EVENT_TAINT, 1 * IN_MILLISECONDS, PHASE_SIEGE);
    58 events.ScheduleEvent(EVENT_BARRAGE, 42 * IN_MILLISECONDS, PHASE_SIEGE);
    59 }
    60 }
       
    61 void Reset() override {
    62 _Reset();
    63 Initialize();
    64 //summons.DespawnAll();
    65 }
       
    66 void DifficultyModifier() {
    67 Difficulty instanceDifficulty = instance->instance->GetDifficultyID();
    68 uint64 myHealth = me->GetHealth();
    69 double healthModifier;
    70 double damageModifier;
       
    71 if(instanceDifficulty == DIFFICULTY_NORMAL) {
    72 healthModifier = 1.0;
    73 damageModifier = 1.0;
    74 } else if(instanceDifficulty == DIFFICULTY_HEROIC) {
    75 healthModifier = 1.29687495317; // HealthModifier 36.99
    76 damageModifier = 1.30167051743;
    77 isHeroic = true;
    78 } else if(instanceDifficulty == DIFFICULTY_MYTHIC) {
    79 healthModifier = 1.62109363383; // HealthModifier 46.25
    80 damageModifier = 1.82000519133;
    81 isMythic = true;
    82 } else {
    83 healthModifier = 20;
    84 damageModifier = 20;
    85 }
    86 uint64 difficultyAdjustedHealth = static_cast<unsigned long long>(myHealth * healthModifier);
    87 me->SetMaxHealth(difficultyAdjustedHealth);
    88 me->SetHealth(difficultyAdjustedHealth);
    89 me->SetModifierValue(UNIT_MOD_DAMAGE_MAINHAND, BASE_VALUE, static_cast<float>(damageModifier));
    90 }
       
    91 void EnterCombat(Unit* victim) override {
    92 BossAI::EnterCombat(victim);
    93 instance->SetBossState(DATA_HELYA_MAW, IN_PROGRESS);
    94 Talk(YELL_ENTER_COMBAT);
    95 DoZoneInCombat();
    96 }
       
    97 void JustDied(Unit* /*killer*/) override {
    98 _JustDied();
    99 Talk(YELL_KILLED);
    100 //summons.DespawnAll();
    101 instance->SetBossState(DATA_HELYA_MAW, DONE);
    102 }
       
    103 void EnterEvadeMode(EvadeReason /*why*/) override {
    104 instance->SetBossState(DATA_HELYA_MAW, FAIL);
    105 //summons.DespawnAll();
    106 me->CombatStop();
    107 me->DespawnOrUnsummon();
    108 me->SetCorpseDelay(5);
    109 me->SetRespawnDelay(10);
    110 me->RemoveAllAuras();
    111 events.Reset();
    112 Initialize();
    113 }
       
    114 void KilledUnit(Unit* victim) override {
    115 if(victim->GetTypeId() == TYPEID_PLAYER)
    116 Talk(YELL_KILL);
    117 }
       
    118 void JustSummoned(Creature* summoned) override {
       
    119 }
       
    120 void EnterNextPhase() {
       
    121 }
       
    122 void UpdateAI(uint32 diff) override {
       
    123 if(Phase < PHASE_BREACH) {
       
       
    124 } else {
       
    125 if(!UpdateVictim())
    126 return;
    127 }
       
    128 events.Update(diff);
       
    129 while(uint32 eventID = events.ExecuteEvent()) {
    130 switch(eventID) {
    131 case EVENT_TAINT:
    132 if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) {
    133 if(!target->HasAura(AURA_HELYA_TAINT)) {
    134 DoCast(target, AURA_HELYA_TAINT, false);
    135 }
    136 }
    137 break;
       
    138 case EVENT_BARRAGE:
    139 if(Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) {
    140 DoCast(target, SPELL_HELYA_BARRAGE);
    141 }
    142 break;
    143 }
    144 }
       
    145 DoMeleeAttackIfReady();
    146 }
       
    147 private:
    148 uint8 Phase;
    149 //SummonList summons;
    150 bool isSubmerged;
    151 bool isHeroic = false;
    152 bool isMythic = false;
    153 };
       
    154 private:
    155 CreatureAI* GetAI(Creature* creature) const override {
    156 return GetMawOfSoulsAI<boss_helya_mawAI>(creature);
    157 }
    158 };
       
    159 // NPC 99801
    160 class npc_helya_maw_destructor_tentacle : public CreatureScript {
    161 public:
    162 npc_helya_maw_destructor_tentacle() : CreatureScript("npc_helya_maw_destructor_tentacle") { }
       
    163 struct npc_helya_maw_destructor_tentacleAI : public ScriptedAI {
       
    164 npc_helya_maw_destructor_tentacleAI(Creature* creature) : ScriptedAI(creature) {
    165 instance = creature->GetInstanceScript();
    166 SetCombatMovement(false);
    167 Initialize();
    168 }
       
    169 void Initialize() {
    170 DoCastVictim(SPELL_DESTRUCTOR_RUPTURE);
    171 }
       
    172 void EnterCombat(Unit* who) override {
       
    173 }
       
    174 void JustDied(Unit* /*killer*/) {
    175 if(Creature* helya = ObjectAccessor::GetCreature((*me), instance->GetGuidData(DATA_HELYA_MAW))) {
    176 helya->AI()->Talk(YELL_TENTACLE);
    177 uint64 damagePerTentacle = helya->GetMaxHealth() * 0.0333;
    178 uint64 newHealth = helya->GetHealth() - damagePerTentacle;
    179 helya->SetHealth(newHealth);
    180 }
    181 }
       
    182 void UpdateAI(uint32 diff) override {
       
    183 if(!UpdateVictim())
    184 return;
       
    185 if(presenseCheck <= diff) {
    186 if (!playerInRange) {
    187 DoCastAOE(SPELL_DESTRUCTOR_SMASH);
    188 }
    189 presenseCheck = 5 * IN_MILLISECONDS;
    190 } else presenseCheck -= diff;
       
    191 if(ruptureEvery <= diff) {
    192 if(playerInRange) {
    193 DoCastVictim(SPELL_DESTRUCTOR_RUPTURE);
    194 ruptureEvery = 14 * IN_MILLISECONDS;
    195 } else {
    196 ruptureEvery = 1 * IN_MILLISECONDS;
    197 }
    198 } else ruptureEvery -= diff;
       
    199 DoMeleeAttackIfReady();
      }
       
    200 void MoveInLineOfSight(Unit* who) override {
    201 playerInRange = (who->GetTypeId() == TYPEID_PLAYER && me->GetDistance2d(who) < 3.0f) ? true : false;
    202 }
       
    203 private:
    204 InstanceScript* instance;
    205 uint32 ruptureEvery = 14 * IN_MILLISECONDS;
    206 uint32 presenseCheck = 5 * IN_MILLISECONDS;
    207 bool playerInRange = false;
    208 };
       
    209 CreatureAI* GetAI(Creature* creature) const override {
    210 return GetMawOfSoulsAI<npc_helya_maw_destructor_tentacleAI>(creature);
    211 }
    212 };
       
    213 void AddSC_boss_helya_maw() {
    214 new boss_helya_maw();
    215 new npc_helya_maw_destructor_tentacle();
     
       

     

×
×
  • Create New...