Jump to content
  • [Raid Boss] Razorgore the untamed


    silent
    • Status: Completed
      Main Category: Script (Eluna / SD3)
      Sub-Category: sd2
      Version: 0.20 Milestone: 20 Priority: Normal
      Implemented Version: 0.20

    [Raid Boss] Razorgore the untamed

    Razorgore the untamed @ 1% hp instantly kills the raid group


    /**
    * ScriptDev2 is an extension for mangos providing enhanced features for
    * area triggers, creatures, game objects, instances, items, and spells beyond
    * the default database scripting in mangos.
    *
    * Copyright (C) 2006-2013 ScriptDev2
    *
    * This program is free software; you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation; either version 2 of the License, or
    * (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    * GNU General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    *
    * World of Warcraft, and all World of Warcraft or Warcraft art, images,
    * and lore are copyrighted by Blizzard Entertainment, Inc.
    */

    /**
    * ScriptData
    * SDName: Boss_Razorgore
    * SD%Complete: 95
    * SDComment: Timers may be improved.
    * SDCategory: Blackwing Lair
    * EndScriptData
    */

    #include "precompiled.h"
    #include "blackwing_lair.h"

    enum
    {
    SAY_EGGS_BROKEN_1 = -1469022,
    SAY_EGGS_BROKEN_2 = -1469023,
    SAY_EGGS_BROKEN_3 = -1469024,
    SAY_DEATH = -1469025,

    SPELL_POSSESS = 23014, // visual effect and increase the damage taken
    SPELL_DESTROY_EGG = 19873,
    SPELL_EXPLODE_ORB = 20037, // used if attacked without destroying the eggs - triggers 20038

    SPELL_CLEAVE = 19632,
    SPELL_WARSTOMP = 24375,
    SPELL_FIREBALL_VOLLEY = 22425,
    SPELL_CONFLAGRATION = 23023,
    };

    struct boss_razorgoreAI : public ScriptedAI
    {
    boss_razorgoreAI(Creature* pCreature) : ScriptedAI(pCreature)
    {
    m_pInstance = (instance_blackwing_lair*)pCreature->GetInstanceData();
    Reset();
    }

    instance_blackwing_lair* m_pInstance;

    uint32 m_uiIntroVisualTimer;
    uint32 m_uiCleaveTimer;
    uint32 m_uiWarStompTimer;
    uint32 m_uiFireballVolleyTimer;
    uint32 m_uiConflagrationTimer;

    bool m_bEggsExploded;

    void Reset() override
    {
    m_uiIntroVisualTimer = 5000;
    m_bEggsExploded = false;

    m_uiCleaveTimer = urand(4000, 8000);
    m_uiWarStompTimer = 30000;
    m_uiConflagrationTimer = urand(10000, 15000);
    m_uiFireballVolleyTimer = urand(15000, 20000);
    }

    void JustDied(Unit* /*pKiller*/) override
    {
    if (m_pInstance)
    {
    // Don't set instance data unless all eggs are destroyed
    if (m_pInstance->GetData(TYPE_RAZORGORE) != SPECIAL)
    {
    return;
    }

    m_pInstance->SetData(TYPE_RAZORGORE, DONE);
    }

    DoScriptText(SAY_DEATH, m_creature);
    }

    void DamageTaken(Unit* /*pDoneBy*/, uint32& uiDamage) override
    {
    if (uiDamage GetHealth())
    {
    return;
    }

    if (!m_pInstance)
    {
    return;
    }

    // Don't allow any accident
    if (m_bEggsExploded)
    {
    uiDamage = 0;
    return;
    }

    // Boss explodes everything and resets - this happens if not all eggs are destroyed
    if (m_pInstance->GetData(TYPE_RAZORGORE) == IN_PROGRESS)
    {
    uiDamage = 0;
    m_bEggsExploded = true;
    m_pInstance->SetData(TYPE_RAZORGORE, FAIL);
    DoCastSpellIfCan(m_creature, SPELL_EXPLODE_ORB, CAST_TRIGGERED);
    m_creature->ForcedDespawn();
    }
    }

    void JustReachedHome() override
    {
    if (m_pInstance)
    {
    m_pInstance->SetData(TYPE_RAZORGORE, FAIL);
    }
    }

    void JustSummoned(Creature* pSummoned) override
    {
    // Defenders should attack the players and the boss
    pSummoned->SetInCombatWithZone();
    pSummoned->AI()->AttackStart(m_creature);
    }

    void UpdateAI(const uint32 uiDiff) override
    {
    if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
    {
    // Set visual only on OOC timer
    if (m_uiIntroVisualTimer)
    {
    if (m_uiIntroVisualTimer {
    if (!m_pInstance)
    {
    script_error_log("Instance Blackwing Lair: ERROR Failed to load instance data for this instace.");
    return;
    }

    if (Creature* pOrbTrigger = m_pInstance->GetSingleCreatureFromStorage(NPC_BLACKWING_ORB_TRIGGER))
    {
    pOrbTrigger->CastSpell(m_creature, SPELL_POSSESS, false);
    }
    m_uiIntroVisualTimer = 0;
    }
    else
    {
    m_uiIntroVisualTimer -= uiDiff;
    }
    }

    return;
    }

    // Cleave
    if (m_uiCleaveTimer {
    if (DoCastSpellIfCan(m_creature->getVictim(), SPELL_CLEAVE) == CAST_OK)
    {
    m_uiCleaveTimer = urand(4000, 8000);
    }
    }
    else
    { m_uiCleaveTimer -= uiDiff; }

    // War Stomp
    if (m_uiWarStompTimer {
    if (DoCastSpellIfCan(m_creature, SPELL_WARSTOMP) == CAST_OK)
    {
    m_uiWarStompTimer = 30000;
    }
    }
    else
    { m_uiWarStompTimer -= uiDiff; }

    // Fireball Volley
    if (m_uiFireballVolleyTimer {
    if (DoCastSpellIfCan(m_creature, SPELL_FIREBALL_VOLLEY) == CAST_OK)
    {
    m_uiFireballVolleyTimer = urand(15000, 20000);
    }
    }
    else
    { m_uiFireballVolleyTimer -= uiDiff; }

    // Conflagration
    if (m_uiConflagrationTimer {
    if (DoCastSpellIfCan(m_creature, SPELL_CONFLAGRATION) == CAST_OK)
    {
    m_uiConflagrationTimer = urand(15000, 25000);
    }
    }
    else
    { m_uiConflagrationTimer -= uiDiff; }

    /* This is obsolete code, not working anymore, keep as reference, should be handled in core though
    * // Aura Check. If the gamer is affected by confliguration we attack a random gamer.
    * if (m_creature->getVictim()->HasAura(SPELL_CONFLAGRATION, EFFECT_INDEX_0))
    * {
    * if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 1))
    * m_creature->TauntApply(pTarget);
    * }
    */

    DoMeleeAttackIfReady();
    }
    };

    CreatureAI* GetAI_boss_razorgore(Creature* pCreature)
    {
    return new boss_razorgoreAI(pCreature);
    }

    bool EffectDummyGameObj_go_black_dragon_egg(Unit* pCaster, uint32 uiSpellId, SpellEffectIndex uiEffIndex, GameObject* pGOTarget, ObjectGuid /*originalCasterGuid*/)
    {
    if (uiSpellId == SPELL_DESTROY_EGG && uiEffIndex == EFFECT_INDEX_1)
    {
    if (!pGOTarget->isSpawned())
    {
    return true;
    }

    if (ScriptedInstance* pInstance = (ScriptedInstance*)pGOTarget->GetInstanceData())
    {
    if (urand(0, 1))
    {
    switch (urand(0, 2))
    {
    case 0:
    DoScriptText(SAY_EGGS_BROKEN_1, pCaster);
    break;
    case 1:
    DoScriptText(SAY_EGGS_BROKEN_2, pCaster);
    break;
    case 2:
    DoScriptText(SAY_EGGS_BROKEN_3, pCaster);
    break;
    }
    }

    // Store the eggs which are destroyed, in order to count them for the second phase
    pInstance->SetData64(DATA_DRAGON_EGG, pGOTarget->GetObjectGuid());
    }

    return true;
    }

    return false;
    }

    void AddSC_boss_razorgore()
    {
    Script* pNewScript;

    pNewScript = new Script;
    pNewScript->Name = "boss_razorgore";
    pNewScript->GetAI = &GetAI_boss_razorgore;
    pNewScript->RegisterSelf();

    pNewScript = new Script;
    pNewScript->Name = "go_black_dragon_egg";
    pNewScript->pEffectDummyGO = &EffectDummyGameObj_go_black_dragon_egg;
    pNewScript->RegisterSelf();
    }


    User Feedback

    Recommended Comments

    // Boss explodes everything and resets - this happens if not all eggs are destroyed
    if (m_pInstance->GetData(TYPE_RAZORGORE) == IN_PROGRESS)
    {
    uiDamage = 0;
    m_bEggsExploded = true;
    m_pInstance->SetData(TYPE_RAZORGORE, FAIL);
    DoCastSpellIfCan(m_creature, SPELL_EXPLODE_ORB, CAST_TRIGGERED);
    m_creature->ForcedDespawn();
    }
    }


    i guess this is what is causing the players to be wiped and die,

    false alarm.

    Link to comment
    Share on other sites

    [quote=silent]// Boss explodes everything and resets - this happens if not all eggs are destroyed
    if (m_pInstance->GetData(TYPE_RAZORGORE) == IN_PROGRESS)
    {
    uiDamage = 0;
    m_bEggsExploded = true;
    m_pInstance->SetData(TYPE_RAZORGORE, FAIL);
    DoCastSpellIfCan(m_creature, SPELL_EXPLODE_ORB, CAST_TRIGGERED);
    m_creature->ForcedDespawn();
    }
    }


    i guess this is what is causing the players to be wiped and die,

    false alarm.[/quote]

    No problem :) It's always good to see people taking the time to query and report things :D

    I checked over the scripts and all looks good, just as you yourself realised :)

    Link to comment
    Share on other sites



    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use