diff options
168 files changed, 1266 insertions, 3071 deletions
diff --git a/sql/updates/4081_world.sql b/sql/updates/4081_world.sql new file mode 100644 index 00000000000..4eb5898681a --- /dev/null +++ b/sql/updates/4081_world.sql @@ -0,0 +1,15 @@ +DELETE FROM `spell_pet_auras` WHERE `spell` IN(56314, 56315, 56316, 56317, 56318); +INSERT INTO `spell_pet_auras` VALUES +(56314,0,57447), +(56315,0,57482), +(56316,0,57453), +(56317,0,57457), +(56318,0,57458); + +DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN(57447, 57482, 57453, 57457, 57458); +INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES +(57447,57485,2,'Kindred Spirits'), +(57482,57484,2,'Kindred Spirits'), +(57453,57483,2,'Kindred Spirits'), +(57457,57482,2,'Kindred Spirits'), +(57458,57475,2,'Kindred Spirits');
\ No newline at end of file diff --git a/sql/world.sql b/sql/world.sql index 9915e83dc2a..5af5d424e8d 100644 --- a/sql/world.sql +++ b/sql/world.sql @@ -14318,7 +14318,12 @@ INSERT INTO `spell_pet_auras` VALUES  (23822,17252,35703),  (23823,17252,35704),  (23824,17252,35705), -(23825,17252,35706); +(23825,17252,35706), +(56314,0,57447), +(56315,0,57482), +(56316,0,57453), +(56317,0,57457), +(56318,0,57458);  /*!40000 ALTER TABLE `spell_pet_auras` ENABLE KEYS */;  UNLOCK TABLES; diff --git a/sql/world_spell_full.sql b/sql/world_spell_full.sql index e0483161553..20d3b6a9df0 100644 --- a/sql/world_spell_full.sql +++ b/sql/world_spell_full.sql @@ -33,7 +33,7 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm  (-49011, 49009, 0, 'Wyvern Sting'),  (-49012, 49010, 0, 'Wyvern Sting'),  ( 47585, 60069, 0, 'Dispersion (transform/regen)'), -(-47953, 60406, 0, 'Divine hymn buff to enemies'), +# (-47953, 60406, 0, 'Divine hymn buff to enemies'), removed in 313  ( 48265, 49772, 2, 'Unholy Presence'),  ( 49772, 55222, 2, 'Unholy Presence'),  ( 48263, 61261, 2, 'Frost Presence'), @@ -50,11 +50,11 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm  ( 17767, 54501, 2, 'Consume Shadows - Rank 1'),  ( 53563, 53651, 2, 'Beacon of Light'),  ( 16857, 60089, 0, 'Faerie Fire (Feral) Rank 1'), -( 17390, 60089, 0, 'Faerie Fire (Feral) Rank 2'), -( 17391, 60089, 0, 'Faerie Fire (Feral) Rank 3'), -( 17392, 60089, 0, 'Faerie Fire (Feral) Rank 4'), -( 27011, 60089, 0, 'Faerie Fire (Feral) Rank 5'), -( 48475, 60089, 0, 'Faerie Fire (Feral) Rank 6'), +# ( 17390, 60089, 0, 'Faerie Fire (Feral) Rank 2'), removed in 313 +# ( 17391, 60089, 0, 'Faerie Fire (Feral) Rank 3'), +# ( 17392, 60089, 0, 'Faerie Fire (Feral) Rank 4'), +# ( 27011, 60089, 0, 'Faerie Fire (Feral) Rank 5'), +# ( 48475, 60089, 0, 'Faerie Fire (Feral) Rank 6'),  (   781, 56446, 0, 'Disengage'),  ( 57635, 57636, 0, 'Disengage'),  ( 60932, 60934, 0, 'Disengage'), @@ -74,6 +74,11 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm  ( -52610, -62071, 0, 'Savage Roar'),  (51209, 55095, 1, 'Hungering cold - frost fever'),  (50334, 58923, 2, 'Berserk - modify target number aura'), +(57447,57485,2,'Kindred Spirits'), +(57482,57484,2,'Kindred Spirits'), +(57453,57483,2,'Kindred Spirits'), +(57457,57482,2,'Kindred Spirits'), +(57458,57475,2,'Kindred Spirits'),  -- Creature  ( 36574, 36650, 0, 'Apply Phase Slip Vulnerability'), diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index f893eb6c1bf..045f85150e9 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -71,7 +71,7 @@ void SummonList::DespawnAll()              erase(begin());              summon->SetVisibility(VISIBILITY_OFF);              if(summon->isSummon() && !summon->isPet()) -                ((TempSummon*)summon)->UnSummon(); +                CAST_SUM(summon)->UnSummon();              else                  summon->setDeathState(JUST_DIED);              summon->RemoveCorpse(); diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index db12a846757..f145ff09942 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -13,18 +13,15 @@  #include "CreatureAIImpl.h"  #include "InstanceData.h" -#define USE_DYNAMIC_CAST -#ifdef USE_DYNAMIC_CAST -#define CAST_PLR(a)     (dynamic_cast<Player*>(a)) -#define CAST_CRE(a)     (dynamic_cast<Creature*>(a)) -#define CAST_VEH(a)     (dynamic_cast<Vehicle*>(a)) -#define CAST_AI(a,b)    (dynamic_cast<a*>(b)) -#else -#define CAST_PLR(a)     (static_cast<Player*>(a)) -#define CAST_CRE(a)     (static_cast<Creature*>(a)) -#define CAST_VEH(a)     (static_cast<Vehicle*>(a)) -#define CAST_AI(a,b)    (static_cast<a*>(b)) -#endif +#define SCRIPT_CAST_TYPE dynamic_cast +//#define SCRIPT_CAST_TYPE static_cast + +#define CAST_PLR(a)     (SCRIPT_CAST_TYPE<Player*>(a)) +#define CAST_CRE(a)     (SCRIPT_CAST_TYPE<Creature*>(a)) +#define CAST_VEH(a)     (SCRIPT_CAST_TYPE<Vehicle*>(a)) +#define CAST_SUM(a)     (SCRIPT_CAST_TYPE<TempSummon*>(a)) +#define CAST_PET(a)     (SCRIPT_CAST_TYPE<Pet*>(a)) +#define CAST_AI(a,b)    (SCRIPT_CAST_TYPE<a*>(b))  #define GET_SPELL(a)    (const_cast<SpellEntry*>(GetSpellStore()->LookupEntry(a))) @@ -84,10 +81,10 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI      void SummonedCreatureDespawn(Creature* /*unit*/) {}      // Called when hit by a spell -    void SpellHit(Unit* caster, const SpellEntry*) {} +    void SpellHit(Unit* caster, const SpellEntry *spell) {}      // Called when spell hits a target -    void SpellHitTarget(Unit* target, const SpellEntry*) {} +    void SpellHitTarget(Unit* target, const SpellEntry *spell) {}      //Called at waypoint reached or PointMovement end      void MovementInform(uint32 type, uint32 id){} diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp b/src/bindings/scripts/scripts/creature/mob_event_ai.cpp deleted file mode 100644 index d43b863300d..00000000000 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.cpp +++ /dev/null @@ -1,1445 +0,0 @@ -/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> - * 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 - */ - -/* ScriptData -SDName: Mob_Event_AI -SD%Complete: 90 -SDComment: Database Event AI -SDCategory: Creatures -EndScriptData */ - -#include "precompiled.h" -#include "mob_event_ai.h" -#include "ObjectMgr.h" - -#define EVENT_UPDATE_TIME               500 -#define SPELL_RUN_AWAY                  8225 - -struct EventHolder -{ -    EventHolder(EventAI_Event p) : Event(p), Time(0), Enabled(true){} - -    EventAI_Event Event; -    uint32 Time; -    bool Enabled; -}; - -struct TRINITY_DLL_DECL Mob_EventAI : public ScriptedAI -{ -    Mob_EventAI(Creature *c, std::list<EventHolder> pEventList) : ScriptedAI(c) -    { -        EventList = pEventList; -        Phase = 0; -        CombatMovementEnabled = true; -        MeleeEnabled = true; -        AttackDistance = 0; -        AttackAngle = 0.0f; - -        //Handle Spawned Events -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                case EVENT_T_SPAWNED: -                    ProcessEvent(*i); -                    break; -            } -        } -    } - -    ~Mob_EventAI() -    { -        EventList.clear(); -    } - -    //Variables used by EventAI for handling events -    std::list<EventHolder> EventList;                       //Holder for events (stores enabled, time, and eventid) -    uint32 EventUpdateTime;                                 //Time between event updates -    uint32 EventDiff;                                       //Time between the last event call - -    //Variables used by Events themselves -    uint8 Phase;                                            //Current phase, max 32 phases -    bool CombatMovementEnabled;                             //If we allow targeted movment gen (movement twoards top threat) -    bool MeleeEnabled;                                      //If we allow melee auto attack -    uint32 AttackDistance;                                  //Distance to attack from -    float AttackAngle;                                      //Angle of attack -    uint32 TimetoFleeLeft;                                  //For fleeing - -    bool ProcessEvent(EventHolder& pHolder, Unit* pActionInvoker = NULL) -    { -        if (!pHolder.Enabled || pHolder.Time) -            return false; - -        //Check the inverse phase mask (event doesn't trigger if current phase bit is set in mask) -        if (pHolder.Event.event_inverse_phase_mask & (1 << Phase)) -            return false; - -        //Store random here so that all random actions match up -        uint32 rnd = rand(); - -        //Return if chance for event is not met -        if (pHolder.Event.event_chance <= rnd % 100) -            return false; - -        union -        { -            uint32 param1; -            int32 param1_s; -        }; - -        union -        { -            uint32 param2; -            int32 param2_s; -        }; - -        union -        { -            uint32 param3; -            int32 param3_s; -        }; - -        union -        { -            uint32 param4; -            int32 param4_s; -        }; - -        param1 = pHolder.Event.event_param1; -        param2 = pHolder.Event.event_param2; -        param3 = pHolder.Event.event_param3; -        param4 = pHolder.Event.event_param4; - -        //Check event conditions based on the event type, also reset events -        switch (pHolder.Event.event_type) -        { -        case EVENT_T_TIMER: -            { -                if (!InCombat) -                    return false; - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_TIMER_OOC: -            { -                if (InCombat) -                    return false; - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_HP: -            { -                if (!InCombat || !m_creature->GetMaxHealth()) -                    return false; - -                uint32 perc = (m_creature->GetHealth()*100) / m_creature->GetMaxHealth(); - -                if (perc > param1 || perc < param2) -                    return false; - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_MANA: -            { -                if (!InCombat || !m_creature->GetMaxPower(POWER_MANA)) -                    return false; - -                uint32 perc = (m_creature->GetPower(POWER_MANA)*100) / m_creature->GetMaxPower(POWER_MANA); - -                if (perc > param1 || perc < param2) -                    return false; - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_AGGRO: -            { -            } -            break; -        case EVENT_T_KILL: -            { -                //Repeat Timers -                if (param1 == param2) -                { -                    pHolder.Time = param1; - -                }else if (param2 > param1) -                    pHolder.Time = urand(param1, param2); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -        case EVENT_T_DEATH: -            { -            } -            break; -        case EVENT_T_EVADE: -            { -            } -            break; -        case EVENT_T_SPELLHIT: -            { -                //Spell hit is special case, param1 and param2 handled within EventAI::SpellHit - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_RANGE: -            { -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_OOC_LOS: -            { -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_SPAWNED: -            { -            } -            break; -        case EVENT_T_TARGET_HP: -            { -                if (!InCombat || !m_creature->getVictim() || !m_creature->getVictim()->GetMaxHealth()) -                    return false; - -                uint32 perc = (m_creature->getVictim()->GetHealth()*100) / m_creature->getVictim()->GetMaxHealth(); - -                if (perc > param1 || perc < param2) -                    return false; - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_TARGET_CASTING: -            { -                if (!InCombat || !m_creature->getVictim() || !m_creature->getVictim()->IsNonMeleeSpellCasted(false, false, true)) -                    return false; - -                //Repeat Timers -                if (param1 == param2) -                { -                    pHolder.Time = param1; - -                }else if (param2 > param1) -                    pHolder.Time = urand(param1, param2); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_FRIENDLY_HP: -            { -                if (!InCombat) -                    return false; - -                Unit* pUnit = DoSelectLowestHpFriendly(param2, param1); - -                if (!pUnit) -                    return false; - -                pActionInvoker = pUnit; - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_FRIENDLY_IS_CC: -            { -                if (!InCombat) -                    return false; - -                std::list<Creature*> pList = DoFindFriendlyCC(param2); - -                //List is empty -                if (pList.empty()) -                    return false; - -                //We don't really care about the whole list, just return first available -                pActionInvoker = *(pList.begin()); - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_FRIENDLY_MISSING_BUFF: -            { -                std::list<Creature*> pList = DoFindFriendlyMissingBuff(param2, param1); - -                //List is empty -                if (pList.empty()) -                    return false; - -                //We don't really care about the whole list, just return first available -                pActionInvoker = *(pList.begin()); - -                //Repeat Timers -                if (param3 == param4) -                { -                    pHolder.Time = param3; - -                }else if (param4 > param3) -                    pHolder.Time = urand(param3, param4); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_SUMMONED_UNIT: -            { -                //Prevent event from occuring on no unit or non creatures -                if (!pActionInvoker || pActionInvoker->GetTypeId()!=TYPEID_UNIT) -                    return false; - -                //Creature id doesn't match up -                if (param1 && ((Creature*)pActionInvoker)->GetEntry() != param1) -                    return false; - -                //Repeat Timers -                if (param2 == param3) -                { -                    pHolder.Time = param2; - -                }else if (param3 > param2) -                    pHolder.Time = urand(param2, param3); -                else -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has RandomMax < RandomMin. Event repeating disabled.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -                    pHolder.Enabled = false; -                } -            } -            break; -        case EVENT_T_REACHED_HOME: -            { -            } -            break; -        default: -            if (EAI_ErrorLevel > 0) -                error_db_log("TSCR: Creature %u using Event %u has invalid Event Type(%u), missing from ProcessEvent() Switch.", m_creature->GetEntry(), pHolder.Event.event_id, pHolder.Event.event_type); -            break; -        } - -        //Disable non-repeatable events -        if (!(pHolder.Event.event_flags & EFLAG_REPEATABLE)) -            pHolder.Enabled = false; - -        //Process actions -        for (uint32 j = 0; j < MAX_ACTIONS; j++) -            ProcessAction(pHolder.Event.action[j].type, pHolder.Event.action[j].param1, pHolder.Event.action[j].param2, pHolder.Event.action[j].param3, rnd, pHolder.Event.event_id, pActionInvoker); - -        return true; -    } - -    inline uint32 GetRandActionParam(uint32 rnd, uint32 param1, uint32 param2, uint32 param3) -    { -        switch (rnd % 3) -        { -        case 0: -            return param1; -            break; -        case 1: -            return param2; -            break; -        case 2: -            return param3; -            break; -        } -        return 0; -    } - -    inline Unit* GetTargetByType(uint32 Target, Unit* pActionInvoker) -    { -        switch (Target) -        { -        case TARGET_T_SELF: -            return m_creature; -            break; -        case TARGET_T_HOSTILE: -            return m_creature->getVictim(); -            break; -        case TARGET_T_HOSTILE_SECOND_AGGRO: -            return SelectUnit(SELECT_TARGET_TOPAGGRO,1); -            break; -        case TARGET_T_HOSTILE_LAST_AGGRO: -            return SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); -            break; -        case TARGET_T_HOSTILE_RANDOM: -            return SelectUnit(SELECT_TARGET_RANDOM,0); -            break; -        case TARGET_T_HOSTILE_RANDOM_NOT_TOP: -            return SelectUnit(SELECT_TARGET_RANDOM,1); -            break; -        case TARGET_T_ACTION_INVOKER: -            return pActionInvoker; -            break; -        default: -            return NULL; -            break; -        }; -    } - -    void ProcessAction(uint16 type, uint32 param1, uint32 param2, uint32 param3, uint32 rnd, uint32 EventId, Unit* pActionInvoker) -    { -        switch (type) -        { -        case ACTION_T_TEXT: -            { -                if (!param1) -                    return; - -                uint32 temp = 0; - -                if (param2 && param3) -                { -                    switch( rand()%3 ) -                    { -                        case 0: temp = param1; break; -                        case 2: temp = param2; break; -                        case 3: temp = param3; break; -                    } -                }else if ( param2 && urand(0,1) ) -                { -                    temp = param2; -                }else -                { -                    temp = param1; -                } - -                if (temp) -                { -                    Unit* target = NULL; -                    Unit* owner = NULL; - -                    if (pActionInvoker) -                    { -                        if (pActionInvoker->GetTypeId() == TYPEID_PLAYER) -                            target = pActionInvoker; -                        else if (owner = pActionInvoker->GetOwner()) -                        { -                            if (owner->GetTypeId() == TYPEID_PLAYER) -                                target = owner; -                        } -                    } -                    else if (target = m_creature->getVictim()) -                    { -                        if (target->GetTypeId() != TYPEID_PLAYER) -                        { -                            if (owner = target->GetOwner()) -                            { -                                if (owner->GetTypeId() == TYPEID_PLAYER) -                                    target = owner; -                            } -                        } -                    } - -                    DoScriptText(temp, m_creature, target); -                } -            } -            break; -        case ACTION_T_SET_FACTION: -            { -                if (param1) -                    m_creature->setFaction(param1); -                else -                { -                    if (CreatureInfo const* ci = GetCreatureTemplateStore(m_creature->GetEntry())) -                    { -                        //if no id provided, assume reset and then use default -                        if (m_creature->getFaction() != ci->faction_A) -                            m_creature->setFaction(ci->faction_A); -                    } -                } -            } -            break; -        case ACTION_T_MORPH_TO_ENTRY_OR_MODEL: -            { -                if (param1 || param2) -                { -                    //set model based on entry from creature_template -                    if (param1) -                    { -                        if (CreatureInfo const* ci = GetCreatureTemplateStore(param1)) -                        { -                            //use default display -                            if (ci->Modelid_A1) -                                m_creature->SetDisplayId(ci->Modelid_A1); -                        } -                    } -                    //if no param1, then use value from param2 (modelId) -                    else -                        m_creature->SetDisplayId(param2); -                } -                else -                    m_creature->DeMorph(); -            } -            break; -        case ACTION_T_SOUND: -            DoPlaySoundToSet(m_creature, param1); -            break; -        case ACTION_T_EMOTE: -            m_creature->HandleEmoteCommand(param1); -            break; -        case ACTION_T_RANDOM_SOUND: -            { -                uint32 temp = GetRandActionParam(rnd, param1, param2, param3); - -                if (temp != 0xffffffff) -                    DoPlaySoundToSet(m_creature, temp); -            } -            break; -        case ACTION_T_RANDOM_EMOTE: -            { -                uint32 temp = GetRandActionParam(rnd, param1, param2, param3); - -                if (temp != 0xffffffff) -                    m_creature->HandleEmoteCommand(temp); -            } -            break; -        case ACTION_T_CAST: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); -                Unit* caster = m_creature; - -                if (!target) -                    return; - -                //Cast is always triggered if target is forced to cast on self -                if (param3 & CAST_FORCE_TARGET_SELF) -                { -                    param3 |= CAST_TRIGGERED; -                    caster = target; -                } - -                //Allowed to cast only if not casting (unless we interrupt ourself) or if spell is triggered -                bool canCast = !(caster->IsNonMeleeSpellCasted(false) && (param3 & CAST_TRIGGERED | CAST_INTURRUPT_PREVIOUS)); - -                // If cast flag CAST_AURA_NOT_PRESENT is active, check if target already has aura on them -                if(param3 & CAST_AURA_NOT_PRESENT) -                { -                    for(uint8 i = 0; i < 3; ++i) -                        if(target->HasAura(param1, i)) -                            return; -                } - -                if (canCast) -                { -                    const SpellEntry* tSpell = GetSpellStore()->LookupEntry(param1); - -                    //Verify that spell exists -                    if (tSpell) -                    { -                        //Check if cannot cast spell -                        if (!(param3 & (CAST_FORCE_TARGET_SELF | CAST_FORCE_CAST)) && -                            !CanCast(target, tSpell, (param3 & CAST_TRIGGERED))) -                        { -                            //Melee current victim if flag not set -                            if (!(param3 & CAST_NO_MELEE_IF_OOM)) -                            { -                                AttackDistance = 0; -                                AttackAngle = 0; - -                                m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), AttackDistance, AttackAngle); -                            } - -                        }else -                        { -                            //Interrupt any previous spell -                            if (caster->IsNonMeleeSpellCasted(false) && param3 & CAST_INTURRUPT_PREVIOUS) -                                caster->InterruptNonMeleeSpells(false); - -                            caster->CastSpell(target, param1, (param3 & CAST_TRIGGERED)); -                        } - -                    }else if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: EventAI event %d creature %d attempt to cast spell that doesn't exist %d", EventId, m_creature->GetEntry(), param1); -                } -            } -            break; -        case ACTION_T_SUMMON: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                Creature* pCreature = NULL; - -                if (param3) -                    pCreature = DoSpawnCreature(param1, 0, 0, 0, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, param3); -                else pCreature = pCreature = DoSpawnCreature(param1, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0); - -                if (!pCreature) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log( "TSCR: EventAI failed to spawn creature %u. Spawn event %d is on creature %d", param1, EventId, m_creature->GetEntry()); -                } -                else if (param2 != TARGET_T_SELF && target) -                    pCreature->AI()->AttackStart(target); -            } -            break; -        case ACTION_T_THREAT_SINGLE_PCT: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                if (target) -                    DoModifyThreatPercent(target, param1); -            } -            break; -        case ACTION_T_THREAT_ALL_PCT: -            { -                Unit* Temp = NULL; - -                std::list<HostilReference*>::iterator i = m_creature->getThreatManager().getThreatList().begin(); -                for (; i != m_creature->getThreatManager().getThreatList().end(); ++i) -                { -                    Temp = Unit::GetUnit((*m_creature),(*i)->getUnitGuid()); -                    if (Temp) -                        DoModifyThreatPercent(Temp, param1); -                } -            } -            break; -        case ACTION_T_QUEST_EVENT: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                if (target && target->GetTypeId() == TYPEID_PLAYER) -                    ((Player*)target)->AreaExploredOrEventHappens(param1); -            } -            break; -        case ACTION_T_CASTCREATUREGO: -            { -                Unit* target = GetTargetByType(param3, pActionInvoker); - -                if (target && target->GetTypeId() == TYPEID_PLAYER) -                    ((Player*)target)->CastedCreatureOrGO(param1, m_creature->GetGUID(), param2); -            } -            break; -        case ACTION_T_SET_UNIT_FIELD: -            { -                Unit* target = GetTargetByType(param3, pActionInvoker); - -                if (param1 < OBJECT_END || param1 >= UNIT_END) -                    return; - -                if (target) -                    target->SetUInt32Value(param1, param2); -            } -            break; -        case ACTION_T_SET_UNIT_FLAG: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                if (target) -                    target->SetFlag(UNIT_FIELD_FLAGS, param1); -            } -            break; -        case ACTION_T_REMOVE_UNIT_FLAG: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                if (target) -                    target->RemoveFlag(UNIT_FIELD_FLAGS, param1); -            } -            break; -        case ACTION_T_AUTO_ATTACK: -            { -                if (param1) -                    MeleeEnabled = true; -                else MeleeEnabled = false; -            } -            break; -        case ACTION_T_COMBAT_MOVEMENT: -            { -                CombatMovementEnabled = param1; - -                //Allow movement (create new targeted movement gen if none exist already) -                if (CombatMovementEnabled) -                { -                    m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), AttackDistance, AttackAngle); -                } -                else -                { -                    m_creature->GetMotionMaster()->MoveIdle(); -                } -            } -            break; -        case ACTION_T_SET_PHASE: -            { -                Phase = param1; -            } -            break; -        case ACTION_T_INC_PHASE: -            { -                Phase += param1; - -                if (Phase > 31) -                    if (EAI_ErrorLevel > 0) -                        error_db_log( "TSCR: Event %d incremented Phase above 31. Phase mask cannot be used with phases past 31. CreatureEntry = %d", EventId, m_creature->GetEntry()); -            } -            break; -        case ACTION_T_EVADE: -            { -                EnterEvadeMode(); -            } -            break; -        case ACTION_T_FLEE: -            { -                if(m_creature->HasAuraType(SPELL_AURA_PREVENTS_FLEEING)) -                    break; -                TimetoFleeLeft = 8000; -                m_creature->DoFleeToGetAssistance(); -                IsFleeing = true; -            } -            break; -        case ACTION_T_QUEST_EVENT_ALL: -            { -                Unit* Temp = NULL; -                if( pActionInvoker && pActionInvoker->GetTypeId() == TYPEID_PLAYER ) -                { -                    Temp = Unit::GetUnit((*m_creature),pActionInvoker->GetGUID()); -                    if( Temp ) -                        ((Player*)Temp)->GroupEventHappens(param1,m_creature); -                } -            } -            break; -        case ACTION_T_CASTCREATUREGO_ALL: -            { -                Unit* Temp = NULL; - -                std::list<HostilReference*>::iterator i = m_creature->getThreatManager().getThreatList().begin(); -                for (; i != m_creature->getThreatManager().getThreatList().end(); ++i) -                { -                    Temp = Unit::GetUnit((*m_creature),(*i)->getUnitGuid()); -                    if (Temp && Temp->GetTypeId() == TYPEID_PLAYER) -                        ((Player*)Temp)->CastedCreatureOrGO(param1, m_creature->GetGUID(), param2); -                } -            } -            break; -        case ACTION_T_REMOVEAURASFROMSPELL: -            { -                Unit* target = GetTargetByType(param1, pActionInvoker); - -                if (target) -                    target->RemoveAurasDueToSpell(param2); -            } -            break; -        case ACTION_T_RANGED_MOVEMENT: -            { -                AttackDistance = param1; -                AttackAngle = ((float)param2/180)*M_PI; - -                if (CombatMovementEnabled) -                { -                    m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim(), AttackDistance, AttackAngle); -                } -            } -            break; -        case ACTION_T_RANDOM_PHASE: -            { -                uint32 temp = GetRandActionParam(rnd, param1, param2, param3); - -                Phase = temp; -            } -            break; -        case ACTION_T_RANDOM_PHASE_RANGE: -            { -                if (param2 > param1) -                { -                    Phase = param1 + (rnd % (param2 - param1)); -                } -                else if (EAI_ErrorLevel > 0) -                    error_db_log( "TSCR: ACTION_T_RANDOM_PHASE_RANGE cannot have Param2 <= Param1. Divide by Zero. Event = %d. CreatureEntry = %d", EventId, m_creature->GetEntry()); -            } -            break; -        case ACTION_T_SUMMON_ID: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                //Duration -                Creature* pCreature = NULL; - -                UNORDERED_MAP<uint32, EventAI_Summon>::iterator i = EventAI_Summon_Map.find(param3); - -                if (i == EventAI_Summon_Map.end()) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log( "TSCR: EventAI failed to spawn creature %u. Summon map index %u does not exist. EventID %d. CreatureID %d", param1, param3, EventId, m_creature->GetEntry()); -                    return; -                } - -                if ((*i).second.SpawnTimeSecs) -                    pCreature = m_creature->SummonCreature(param1, (*i).second.position_x, (*i).second.position_y, (*i).second.position_z, (*i).second.orientation, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, (*i).second.SpawnTimeSecs); -                else pCreature = m_creature->SummonCreature(param1, (*i).second.position_x, (*i).second.position_y, (*i).second.position_z, (*i).second.orientation, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0); - -                if (!pCreature) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log( "TSCR: EventAI failed to spawn creature %u. EventId %d.Creature %d", param1, EventId, m_creature->GetEntry()); -                } -                else if (param2 != TARGET_T_SELF && target) -                pCreature->AI()->AttackStart(target); -            } -            break; -        case ACTION_T_KILLED_MONSTER: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                if (target && target->GetTypeId() == TYPEID_PLAYER) -                    ((Player*)target)->KilledMonster(param1, m_creature->GetGUID()); -            } -            break; -        case ACTION_T_SET_INST_DATA: -            { -                ScriptedInstance* pInst = (ScriptedInstance*)m_creature->GetInstanceData(); -                if (!pInst) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Event %d attempt to set instance data without instance script. Creature %d", EventId, m_creature->GetEntry()); -                    return; -                } - -                pInst->SetData(param1, param2); -            } -            break; -        case ACTION_T_SET_INST_DATA64: -            { -                Unit* target = GetTargetByType(param2, pActionInvoker); - -                if (!target) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Event %d attempt to set instance data64 but Target == NULL. Creature %d", EventId, m_creature->GetEntry()); -                    return; -                } - -                ScriptedInstance* pInst = (ScriptedInstance*)m_creature->GetInstanceData(); - -                if (!pInst) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Event %d attempt to set instance data64 without instance script. Creature %d", EventId, m_creature->GetEntry()); -                    return; -                } - -                pInst->SetData64(param1, target->GetGUID()); -            } -            break; -        case ACTION_T_UPDATE_TEMPLATE: -            { -                if (m_creature->GetEntry() == param1) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Event %d ACTION_T_UPDATE_TEMPLATE call with param1 == current entry. Creature %d", EventId, m_creature->GetEntry()); -                    return; -                } - -                m_creature->UpdateEntry(param1, param2 ? HORDE : ALLIANCE); -            } -            break; -        case ACTION_T_DIE: -            { -                if (m_creature->isDead()) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Event %d ACTION_T_DIE on dead creature. Creature %d", EventId, m_creature->GetEntry()); -                    return; -                } -                m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(),NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); -            } -            break; -        case ACTION_T_ZONE_COMBAT_PULSE: -            { -                if (!m_creature->isInCombat() || !m_creature->GetMap()->IsDungeon()) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Event %d ACTION_T_ZONE_COMBAT_PULSE on creature out of combat or in non-dungeon map. Creature %d", EventId, m_creature->GetEntry()); -                    return; -                } - -                DoZoneInCombat(); -            } -            break; -            case ACTION_T_SUMMON_GO: -            { -                GameObject* pObject = NULL; - -                float x,y,z; -                m_creature->GetPosition(x,y,z); -                pObject = m_creature->SummonGameObject(param1, x, y, z, 0, 0, 0, 0, 0, param2); -                if (!pObject) -                { -                    if (EAI_ErrorLevel > 0) -                        error_db_log( "TSCR: EventAI failed to spawn object %u. Spawn event %d is on creature %d", param1, EventId, m_creature->GetEntry()); -                } -            } -            break; - -        // TRINITY ONLY -        case ACTION_T_SET_ACTIVE: -            m_creature->setActive(param1 ? true : false); -            break; -        case ACTION_T_SET_AGGRESSIVE: -            m_creature->SetReactState(ReactStates(param1)); -            break; -        case ACTION_T_ATTACK_START_PULSE: -            AttackStart(m_creature->SelectNearestTarget((float)param1)); -            break; -        } -    } - -    void JustRespawned() -    { -        InCombat = false; -        IsFleeing = false; -        Reset(); - -        //Handle Spawned Events -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -            case EVENT_T_SPAWNED: -                ProcessEvent(*i); -                break; -            } -        } -    } - -    void Reset() -    { -        EventUpdateTime = EVENT_UPDATE_TIME; -        EventDiff = 0; - -        //Reset all events to enabled -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                //Reset all out of combat timers -                case EVENT_T_TIMER_OOC: -                    { -                        if ((*i).Event.event_param2 == (*i).Event.event_param1) -                        { -                            (*i).Time = (*i).Event.event_param1; -                            (*i).Enabled = true; -                        }else if ((*i).Event.event_param2 > (*i).Event.event_param1) -                        { -                            (*i).Time = urand((*i).Event.event_param1, (*i).Event.event_param2); -                            (*i).Enabled = true; -                        }else if (EAI_ErrorLevel > 0) -                            error_db_log("TSCR: Creature %u using Event %u (Type = %u) has InitialMax < InitialMin. Event disabled.", m_creature->GetEntry(), (*i).Event.event_id, (*i).Event.event_type); -                    } -                    break; -                //default: -                    //TODO: enable below code line / verify this is correct to enable events previously disabled (ex. aggro yell), instead of enable this in void Aggro() -                    //(*i).Enabled = true; -                    //(*i).Time = 0; -                    //break; -            } -        } -    } - -    //when creature reach home after EnterEvadeMode -    void JustReachedHome() -    { -        m_creature->LoadCreaturesAddon(); - -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            if ((*i).Event.event_type == EVENT_T_REACHED_HOME) -                ProcessEvent(*i); -        } - -        Reset(); -    } - -    void EnterEvadeMode() -    { -        ScriptedAI::EnterEvadeMode(); - -        IsFleeing = false; - -        //Handle Evade events -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            if ((*i).Event.event_type == EVENT_T_EVADE) -                ProcessEvent(*i); -        } -    } - -    void JustDied(Unit* killer) -    { -        InCombat = false; -        IsFleeing = false; -        Reset(); - -        //Handle Evade events -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                //Evade -                case EVENT_T_DEATH: -                    ProcessEvent(*i, killer); -                    break; -            } -        } -    } - -    void KilledUnit(Unit* victim) -    { -        if (victim->GetTypeId() != TYPEID_PLAYER) -            return; - -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                //Kill -                case EVENT_T_KILL: -                    ProcessEvent(*i, victim); -                    break; -            } -        } - -    } - -    void JustSummoned(Creature* pUnit) -    { -        if (!pUnit) -            return; - -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                //Summoned -                case EVENT_T_SUMMONED_UNIT: -                    ProcessEvent(*i, pUnit); -                    break; -            } -        } -    } - -    void Aggro(Unit *who) -    { -        //Check for on combat start events -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                case EVENT_T_AGGRO: -                    (*i).Enabled = true; -                    ProcessEvent(*i, who); -                    break; -                //Reset all in combat timers -                case EVENT_T_TIMER: -                    if ((*i).Event.event_param2 == (*i).Event.event_param1) -                    { -                        (*i).Time = (*i).Event.event_param1; -                        (*i).Enabled = true; -                    }else if ((*i).Event.event_param2 > (*i).Event.event_param1) -                    { -                        (*i).Time = urand((*i).Event.event_param1, (*i).Event.event_param2); -                        (*i).Enabled = true; -                    }else if (EAI_ErrorLevel > 0) -                        error_db_log("TSCR: Creature %u using Event %u (Type = %u) has InitialMax < InitialMin. Event disabled.", m_creature->GetEntry(), (*i).Event.event_id, (*i).Event.event_type); -                    break; -                //All normal events need to be re-enabled and their time set to 0 -                default: -                    (*i).Enabled = true; -                    (*i).Time = 0; -                    break; -            } -        } - -        EventUpdateTime = EVENT_UPDATE_TIME; -        EventDiff = 0; -    } - -    void AttackStart(Unit *who) -    { -        if (!who) -            return; - -        if (m_creature->Attack(who, MeleeEnabled)) -         { -            //Begin melee attack if we are within range - -            if (!InCombat) -            { -                InCombat = true; -                Aggro(who); -            } - -            if (CombatMovementEnabled) -            { -                m_creature->GetMotionMaster()->MoveChase(who, AttackDistance, AttackAngle); -            } -            else -            { -                m_creature->GetMotionMaster()->MoveIdle(); -            } -        } -    } - -    void MoveInLineOfSight(Unit *who) -    { -        if (!who || InCombat) -            return; - -        //Check for OOC LOS Event -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -            case EVENT_T_OOC_LOS: -                { -                    if ((*i).Event.event_param1 && m_creature->IsHostileTo(who)) -                        break; - -                    if ((*i).Event.event_param2 && !m_creature->IsHostileTo(who)) -                        break; - -                    ProcessEvent(*i, who); -                } -                break; -            } -        } - -        // do we need this? -        //if (m_creature->isCivilian() && m_creature->IsNeutralToAll()) -        //    return; - -        if(m_creature->canStartAttack(who)) -            AttackStart(who); -    } - -    void SpellHit(Unit* pUnit, const SpellEntry* pSpell) -    { -        for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -        { -            switch ((*i).Event.event_type) -            { -                //Spell hit -                case EVENT_T_SPELLHIT: -                    { -                        //If spell id matches (or no spell id) & if spell school matches (or no spell school) -                        if (!(*i).Event.event_param1 || pSpell->Id == (*i).Event.event_param1) -                            if ((*i).Event.event_param2_s == -1 || pSpell->SchoolMask == (*i).Event.event_param2) -                                ProcessEvent(*i, pUnit); -                    } -                    break; -            } -        } -    } - -    void UpdateAI(const uint32 diff) -    { -        //Check if we are in combat (also updates calls threat update code) -        bool Combat = InCombat ? UpdateVictim() : false; - -        //Must return if creature isn't alive. Normally select hostil target and get victim prevent this -        if (!m_creature->isAlive()) -            return; - -        if (IsFleeing) -        { -            if(TimetoFleeLeft < diff) -            { -                m_creature->SetControlled(false, UNIT_STAT_FLEEING); -                m_creature->SetNoCallAssistance(false); -                m_creature->CallAssistance(); -                if(m_creature->getVictim()) -                    m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim()); -                IsFleeing = false; -            } -            else -                TimetoFleeLeft -= diff; - -            return; -        } - -        //Events are only updated once every EVENT_UPDATE_TIME ms to prevent lag with large amount of events -        if (EventUpdateTime < diff) -        { -            EventDiff += diff; - -            //Check for range based events -            //if (m_creature->GetDistance(m_creature->getVictim()) > -            if (Combat) -            { -                for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -                { -                    switch ((*i).Event.event_type) -                    { -                        case EVENT_T_RANGE: -                            // in some cases this is called twice and victim may not exist in the second time -                            if(m_creature->getVictim()) -                            { -                                float dist = m_creature->GetDistance(m_creature->getVictim()); -                                if (dist > (*i).Event.event_param1 && dist < (*i).Event.event_param2) -                                    ProcessEvent(*i); -                            } -                            break; -                    } -                } -            } - -            //Check for time based events -            for (std::list<EventHolder>::iterator i = EventList.begin(); i != EventList.end(); ++i) -            { -                //Decrement Timers -                if ((*i).Time) -                { -                    if ((*i).Time > EventDiff) -                    { -                        //Do not decrement timers if event cannot trigger in this phase -                        if (!((*i).Event.event_inverse_phase_mask & (1 << Phase))) -                            (*i).Time -= EventDiff; - -                        //Skip processing of events that have time remaining -                        continue; -                    } -                    else (*i).Time = 0; -                } - -                //Events that are updated every EVENT_UPDATE_TIME -                switch ((*i).Event.event_type) -                { -                    case EVENT_T_TIMER_OOC: -                        ProcessEvent(*i); -                        break; -                    case EVENT_T_TIMER: -                    case EVENT_T_MANA: -                    case EVENT_T_HP: -                    case EVENT_T_TARGET_HP: -                    case EVENT_T_TARGET_CASTING: -                    case EVENT_T_FRIENDLY_HP: -                        if (Combat) -                            ProcessEvent(*i); -                        break; -                    case EVENT_T_RANGE: -                        if (Combat) -                        { -                            if (m_creature->IsWithinDistInMap(m_creature->getVictim(),(float)(*i).Event.event_param2)) -                            { -                                if (m_creature->GetDistance(m_creature->getVictim()) >= (float)(*i).Event.event_param1) -                                    ProcessEvent(*i); -                            } -                        } -                        break; -                } -            } - -            EventDiff = 0; -            EventUpdateTime = EVENT_UPDATE_TIME; -        } -        else -        { -            EventDiff += diff; -            EventUpdateTime -= diff; -        } - -        //Melee Auto-Attack -        if (Combat && MeleeEnabled) -            DoMeleeAttackIfReady(); - -    } -}; - -CreatureAI* GetAI_Mob_EventAI(Creature *pCreature) -{ -    //Select events by creature id -    std::list<EventHolder> EventList; - -    //Find creature id in the Event map -    UNORDERED_MAP<uint32, std::vector<EventAI_Event> >::iterator CreatureEvents = EventAI_Event_Map.find(pCreature->GetEntry()); - -    if (CreatureEvents != EventAI_Event_Map.end()) -    { -        std::vector<EventAI_Event>::iterator i; - -        for (i = (*CreatureEvents).second.begin(); i != (*CreatureEvents).second.end(); ++i) -        { -            //Debug check -#ifndef _DEBUG -            if ((*i).event_flags & EFLAG_DEBUG_ONLY) -                continue; -#endif -            if( pCreature->GetMap()->IsDungeon() ) -            { -                if ((pCreature->GetMap()->IsHeroic() && (*i).event_flags & EFLAG_HEROIC) || (!pCreature->GetMap()->IsHeroic() && (*i).event_flags & EFLAG_NORMAL)) -                    EventList.push_back(EventHolder(*i)); -                continue; -            } - -            EventList.push_back(EventHolder(*i)); -        } - -         //EventMap had events but they were not added because they must be for instance -         if (EventList.empty()) -         { -             if (EAI_ErrorLevel > 1) -                 error_db_log("TSCR: CreatureId has events but no events added to list because of instance flags.", pCreature->GetEntry()); -         } -      } -     else -      { -          if (EAI_ErrorLevel > 1) -             error_db_log("TSCR: EventMap for Creature %u is empty but creature is using Mob_EventAI.", pCreature->GetEntry()); -      } - -    return new Mob_EventAI (pCreature, EventList); -} - -void AddSC_mob_event() -{ -    Script *newscript; -    newscript = new Script; -    newscript->Name = "mob_eventai"; -    newscript->GetAI = &GetAI_Mob_EventAI; -    newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/creature/mob_event_ai.h b/src/bindings/scripts/scripts/creature/mob_event_ai.h deleted file mode 100644 index e1b952b4e25..00000000000 --- a/src/bindings/scripts/scripts/creature/mob_event_ai.h +++ /dev/null @@ -1,223 +0,0 @@ -/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> - * This program is free software licensed under GPL version 2 - * Please see the included DOCS/LICENSE.TXT for more information */ - -#ifndef SC_EVENTAI_H -#define SC_EVENTAI_H - -#define MAX_ACTIONS     3 - -enum Event_Types -{ -    EVENT_T_TIMER                   = 0,    //InitialMin, InitialMax, RepeatMin, RepeatMax -    EVENT_T_TIMER_OOC               = 1,    //InitialMin, InitialMax, RepeatMin, RepeatMax -    EVENT_T_HP                      = 2,    //HPMax%, HPMin%, RepeatMin, RepeatMax -    EVENT_T_MANA                    = 3,    //ManaMax%,ManaMin% RepeatMin, RepeatMax -    EVENT_T_AGGRO                   = 4,    //NONE -    EVENT_T_KILL                    = 5,    //RepeatMin, RepeatMax -    EVENT_T_DEATH                   = 6,    //NONE -    EVENT_T_EVADE                   = 7,    //NONE -    EVENT_T_SPELLHIT                = 8,    //SpellID, School, RepeatMin, RepeatMax -    EVENT_T_RANGE                   = 9,    //MinDist, MaxDist, RepeatMin, RepeatMax -    EVENT_T_OOC_LOS                 = 10,   //NoHostile, NoFriendly, RepeatMin, RepeatMax -    EVENT_T_SPAWNED                 = 11,   //NONE -    EVENT_T_TARGET_HP               = 12,   //HPMax%, HPMin%, RepeatMin, RepeatMax -    EVENT_T_TARGET_CASTING          = 13,   //RepeatMin, RepeatMax -    EVENT_T_FRIENDLY_HP             = 14,   //HPDeficit, Radius, RepeatMin, RepeatMax -    EVENT_T_FRIENDLY_IS_CC          = 15,   //DispelType, Radius, RepeatMin, RepeatMax -    EVENT_T_FRIENDLY_MISSING_BUFF   = 16,   //SpellId, Radius, RepeatMin, RepeatMax -    EVENT_T_SUMMONED_UNIT           = 17,   //CreatureId, RepeatMin, RepeatMax -    EVENT_T_TARGET_MANA             = 18,   //ManaMax%, ManaMin%, RepeatMin, RepeatMax -    EVENT_T_QUEST_ACCEPT            = 19,   //QuestID -    EVENT_T_QUEST_COMPLETE          = 20,   // -    EVENT_T_REACHED_HOME            = 21,   //NONE - -    EVENT_T_END, -}; - -enum Action_Types -{ -    ACTION_T_NONE                       = 0,    //No action -    ACTION_T_TEXT                       = 1,    //-TextId1, optionally -TextId2, optionally -TextId3(if -TextId2 exist). If more than just -TextId1 is defined, randomize. Negative values. -    ACTION_T_SET_FACTION                = 2,    //FactionId (or 0 for default) -    ACTION_T_MORPH_TO_ENTRY_OR_MODEL    = 3,    //Creature_template entry(param1) OR ModelId (param2) (or 0 for both to demorph) -    ACTION_T_SOUND                      = 4,    //SoundId -    ACTION_T_EMOTE                      = 5,    //EmoteId -    ACTION_T_RANDOM_SAY                 = 6,    //UNUSED -    ACTION_T_RANDOM_YELL                = 7,    //UNUSED -    ACTION_T_RANDOM_TEXTEMOTE           = 8,    //UNUSED -    ACTION_T_RANDOM_SOUND               = 9,    //SoundId1, SoundId2, SoundId3 (-1 in any field means no output if randomed that field) -    ACTION_T_RANDOM_EMOTE               = 10,   //EmoteId1, EmoteId2, EmoteId3 (-1 in any field means no output if randomed that field) -    ACTION_T_CAST                       = 11,   //SpellId, Target, CastFlags -    ACTION_T_SUMMON                     = 12,   //CreatureID, Target, Duration in ms -    ACTION_T_THREAT_SINGLE_PCT          = 13,   //Threat%, Target -    ACTION_T_THREAT_ALL_PCT             = 14,   //Threat% -    ACTION_T_QUEST_EVENT                = 15,   //QuestID, Target -    ACTION_T_CASTCREATUREGO             = 16,   //QuestID, SpellId, Target -    ACTION_T_SET_UNIT_FIELD             = 17,   //Field_Number, Value, Target -    ACTION_T_SET_UNIT_FLAG              = 18,   //Flags (may be more than one field OR'd together), Target -    ACTION_T_REMOVE_UNIT_FLAG           = 19,   //Flags (may be more than one field OR'd together), Target -    ACTION_T_AUTO_ATTACK                = 20,   //AllowAttackState (0 = stop attack, anything else means continue attacking) -    ACTION_T_COMBAT_MOVEMENT            = 21,   //AllowCombatMovement (0 = stop combat based movement, anything else continue attacking) -    ACTION_T_SET_PHASE                  = 22,   //Phase -    ACTION_T_INC_PHASE                  = 23,   //Value (may be negative to decrement phase, should not be 0) -    ACTION_T_EVADE                      = 24,   //No Params -    ACTION_T_FLEE                       = 25,   //No Params -    ACTION_T_QUEST_EVENT_ALL            = 26,   //QuestID -    ACTION_T_CASTCREATUREGO_ALL         = 27,   //QuestId, SpellId -    ACTION_T_REMOVEAURASFROMSPELL       = 28,   //Target, Spellid -    ACTION_T_RANGED_MOVEMENT            = 29,   //Distance, Angle -    ACTION_T_RANDOM_PHASE               = 30,   //PhaseId1, PhaseId2, PhaseId3 -    ACTION_T_RANDOM_PHASE_RANGE         = 31,   //PhaseMin, PhaseMax -    ACTION_T_SUMMON_ID                  = 32,   //CreatureId, Target, SpawnId -    ACTION_T_KILLED_MONSTER             = 33,   //CreatureId, Target -    ACTION_T_SET_INST_DATA              = 34,   //Field, Data -    ACTION_T_SET_INST_DATA64            = 35,   //Field, Target -    ACTION_T_UPDATE_TEMPLATE            = 36,   //Entry, Team -    ACTION_T_DIE                        = 37,   //No Params -    ACTION_T_ZONE_COMBAT_PULSE          = 38,   //No Params - -    ACTION_T_SET_ACTIVE                 = 101,  //Apply -    ACTION_T_SET_AGGRESSIVE             = 102,  //Apply -    ACTION_T_ATTACK_START_PULSE         = 103,  //Distance -    ACTION_T_SUMMON_GO                  = 104,  //GameObjectID, DespawnTime in ms - -    ACTION_T_END, -}; - -enum Target -{ -    //Self (m_creature) -    TARGET_T_SELF = 0,                      //Self cast - -    //Hostile targets (if pet then returns pet owner) -    TARGET_T_HOSTILE,                       //Our current target (ie: highest aggro) -    TARGET_T_HOSTILE_SECOND_AGGRO,          //Second highest aggro (generaly used for cleaves and some special attacks) -    TARGET_T_HOSTILE_LAST_AGGRO,            //Dead last on aggro (no idea what this could be used for) -    TARGET_T_HOSTILE_RANDOM,                //Just any random target on our threat list -    TARGET_T_HOSTILE_RANDOM_NOT_TOP,        //Any random target except top threat - -    //Invoker targets (if pet then returns pet owner) -    TARGET_T_ACTION_INVOKER,                //Unit who caused this Event to occur (only works for EVENT_T_AGGRO, EVENT_T_KILL, EVENT_T_DEATH, EVENT_T_SPELLHIT, EVENT_T_OOC_LOS, EVENT_T_FRIENDLY_HP, EVENT_T_FRIENDLY_IS_CC, EVENT_T_FRIENDLY_MISSING_BUFF) - -    //Hostile targets (including pets) -    TARGET_T_HOSTILE_WPET,                  //Current target (can be a pet) -    TARGET_T_HOSTILE_WPET_SECOND_AGGRO,     //Second highest aggro (generaly used for cleaves and some special attacks) -    TARGET_T_HOSTILE_WPET_LAST_AGGRO,       //Dead last on aggro (no idea what this could be used for) -    TARGET_T_HOSTILE_WPET_RANDOM,           //Just any random target on our threat list -    TARGET_T_HOSTILE_WPET_RANDOM_NOT_TOP,   //Any random target except top threat - -    TARGET_T_ACTION_INVOKER_WPET, - -    TARGET_T_END -}; - -enum CastFlags -{ -    CAST_INTURRUPT_PREVIOUS     = 0x01,     //Interrupt any spell casting -    CAST_TRIGGERED              = 0x02,     //Triggered (this makes spell cost zero mana and have no cast time) -    CAST_FORCE_CAST             = 0x04,     //Forces cast even if creature is out of mana or out of range -    CAST_NO_MELEE_IF_OOM        = 0x08,     //Prevents creature from entering melee if out of mana or out of range -    CAST_FORCE_TARGET_SELF      = 0x10,     //Forces the target to cast this spell on itself -    CAST_AURA_NOT_PRESENT       = 0x20,     //Only casts the spell if the target does not have an aura from the spell -}; - -enum EventFlags -{ -    EFLAG_REPEATABLE            = 0x01,     //Event repeats -    EFLAG_NORMAL                = 0x02,     //Event only occurs in Normal instance difficulty -    EFLAG_HEROIC                = 0x04,     //Event only occurs in Heroic instance difficulty -    EFLAG_RESERVED_3            = 0x08, -    EFLAG_RESERVED_4            = 0x10, -    EFLAG_RESERVED_5            = 0x20, -    EFLAG_RESERVED_6            = 0x40, -    EFLAG_DEBUG_ONLY            = 0x80,     //Event only occurs in debug build of SD2 only -}; - -struct EventAI_Event -{ -    uint32 event_id; - -    uint32 creature_id; - -    uint16 event_type; -    uint32 event_inverse_phase_mask; -    uint8 event_chance; -    uint8 event_flags; -    union -    { -        uint32 event_param1; -        int32 event_param1_s; -    }; -    union -    { -        uint32 event_param2; -        int32 event_param2_s; -    }; -    union -    { -        uint32 event_param3; -        int32 event_param3_s; -    }; -    union -    { -        uint32 event_param4; -        int32 event_param4_s; -    }; - -    struct _action -    { -        uint16 type; -        union -        { -            uint32 param1; -            int32 param1_s; -        }; -        union -        { -            uint32 param2; -            int32 param2_s; -        }; -        union -        { -            uint32 param3; -            int32 param3_s; -        }; -    }action[MAX_ACTIONS]; -}; - -//Event_Map -extern UNORDERED_MAP<uint32, std::vector<EventAI_Event> > EventAI_Event_Map; - -struct EventAI_Summon -{ -    uint32 id; - -    float position_x; -    float position_y; -    float position_z; -    float orientation; -    uint32 SpawnTimeSecs; -}; - -//EventSummon_Map -extern UNORDERED_MAP<uint32, EventAI_Summon> EventAI_Summon_Map; - -//EventAI Error handling -extern uint32 EAI_ErrorLevel; -/* - -struct EventAI_CreatureError -{ -    bool ListEmpty; -    bool NoInstance; -}; - -//Error prevention list -extern UNORDERED_MAP<uint32, EventAI_CreatureError> EventAI_CreatureErrorPreventionList; - -//Defines -#define EVENTAI_EMPTY_EVENTLIST         "TSCR: Eventlist for Creature %i is empty but creature is using Mob_EventAI. Preventing EventAI on this creature." -*/ -#endif - diff --git a/src/bindings/scripts/scripts/custom/test.cpp b/src/bindings/scripts/scripts/custom/test.cpp index ff3de65f599..a372de8f65c 100644 --- a/src/bindings/scripts/scripts/custom/test.cpp +++ b/src/bindings/scripts/scripts/custom/test.cpp @@ -103,7 +103,7 @@ struct TRINITY_DLL_DECL npc_testAI : public npc_escortAI              npc_escortAI::UpdateAI(diff);              //Combat check -            if (InCombat && m_creature->getVictim()) +            if (m_creature->isInCombat() && m_creature->getVictim())              {                  if (DeathCoilTimer < diff)                  { diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp index d464a369826..87b49856b87 100644 --- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp +++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp @@ -33,6 +33,18 @@ void npc_escortAI::AttackStart(Unit *who)      }  } +void npc_escortAI::EnterCombat(Unit* pEnemy) +{ +    if (!pEnemy) +        return; + +    Aggro(pEnemy); +} + +void npc_escortAI::Aggro(Unit* pEnemy) +{ +} +  void npc_escortAI::MoveInLineOfSight(Unit *who)  {      if (IsBeingEscorted && !Attack) @@ -115,7 +127,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)                  m_creature->setDeathState(JUST_DIED);                  m_creature->SetHealth(0); -                m_creature->CombatStop(); +                m_creature->CombatStop(true);                  m_creature->DeleteThreatList();                  m_creature->Respawn();                  m_creature->GetMotionMaster()->Clear(true); @@ -161,7 +173,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)              m_creature->setDeathState(JUST_DIED);              m_creature->SetHealth(0); -            m_creature->CombatStop(); +            m_creature->CombatStop(true);              m_creature->DeleteThreatList();              m_creature->Respawn();              m_creature->GetMotionMaster()->Clear(true); diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.h b/src/bindings/scripts/scripts/npc/npc_escortAI.h index 3431e84c6f8..3f5af2e99d3 100644 --- a/src/bindings/scripts/scripts/npc/npc_escortAI.h +++ b/src/bindings/scripts/scripts/npc/npc_escortAI.h @@ -34,12 +34,16 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI          // Pure Virtual Functions          virtual void WaypointReached(uint32) = 0; +        virtual void Aggro(Unit*); +          // CreatureAI functions          npc_escortAI(Creature *c) : ScriptedAI(c), IsBeingEscorted(false), PlayerTimer(1000), MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), CanMelee(true), DespawnAtEnd(true), DespawnAtFar(true)          {}          void AttackStart(Unit* who); +        void EnterCombat(Unit*); +          void MoveInLineOfSight(Unit* who);          void JustRespawned(); diff --git a/src/bindings/scripts/scripts/npc/npcs_special.cpp b/src/bindings/scripts/scripts/npc/npcs_special.cpp index 2f9f193943d..f195d54b882 100644 --- a/src/bindings/scripts/scripts/npc/npcs_special.cpp +++ b/src/bindings/scripts/scripts/npc/npcs_special.cpp @@ -43,12 +43,11 @@ EndContentData */  # npc_chicken_cluck  #########*/ -#define EMOTE_A_HELLO       -1070004 -#define EMOTE_H_HELLO       -1070005 -#define EMOTE_CLUCK_TEXT2   -1070006 +#define EMOTE_HELLO         -1070004 +#define EMOTE_CLUCK_TEXT    -1070006  #define QUEST_CLUCK         3861 -#define FACTION_FRIENDLY    84 +#define FACTION_FRIENDLY    35  #define FACTION_CHICKEN     31  struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI @@ -60,7 +59,6 @@ struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI      void Reset()      {          ResetFlagTimer = 120000; -          m_creature->setFaction(FACTION_CHICKEN);          m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);      } @@ -85,31 +83,24 @@ struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI      void ReceiveEmote( Player *player, uint32 emote )      { -        if( emote == TEXTEMOTE_CHICKEN ) +        switch( emote )          { -            if( player->GetTeam() == ALLIANCE ) -            { -                if( rand()%30 == 1 ) +            case TEXTEMOTE_CHICKEN: +                if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand()%30 == 1 )                  { -                    if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE ) -                    { -                        m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); -                        m_creature->setFaction(FACTION_FRIENDLY); -                        DoScriptText(EMOTE_A_HELLO, m_creature); -                    } +                    m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); +                    m_creature->setFaction(FACTION_FRIENDLY); +                    DoScriptText(EMOTE_HELLO, m_creature);                  } -            } -            else -                DoScriptText(EMOTE_H_HELLO,m_creature); -        } -        if( emote == TEXTEMOTE_CHEER && player->GetTeam() == ALLIANCE ) -        { -            if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE ) -            { -                m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); -                m_creature->setFaction(FACTION_FRIENDLY); -                DoScriptText(EMOTE_CLUCK_TEXT2, m_creature); -            } +                break; +            case TEXTEMOTE_CHEER: +                if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE ) +                { +                    m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); +                    m_creature->setFaction(FACTION_FRIENDLY); +                    DoScriptText(EMOTE_CLUCK_TEXT, m_creature); +                } +                break;          }      }  }; diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp index 0869a6e72cd..f24abe4a4c7 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/mana_tombs/boss_nexusprince_shaffar.cpp @@ -350,8 +350,6 @@ struct TRINITY_DLL_DECL mob_ethereal_apprenticeAI : public ScriptedAI          isFireboltTurn = true;      } -    void Aggro(Unit* who) {} -      void UpdateAI(const uint32 diff)      {          if(!UpdateVictim()) diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp index 61758b12e6e..5495a2c8998 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/boss_tailonking_ikiss.cpp @@ -54,7 +54,7 @@ struct TRINITY_DLL_DECL boss_talon_king_ikissAI : public ScriptedAI  {      boss_talon_king_ikissAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp index fbe926ffba0..c18a9dc52b9 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/sethekk_halls/instance_sethekk_halls.cpp @@ -30,21 +30,17 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance  {      instance_sethekk_halls(Map *map) : ScriptedInstance(map) {Initialize();}; -    GameObject *IkissDoor; +    uint64 m_uiIkissDoorGUID;      void Initialize()      { -        IkissDoor = NULL; +        m_uiIkissDoorGUID = 0;      } -    void OnGameObjectCreate(GameObject *go, bool add) +    void OnGameObjectCreate(GameObject *pGo, bool add)      { -        switch(go->GetEntry()) -        { -            case IKISS_DOOR: -                IkissDoor = go; -                break; -        } +         if (pGo->GetEntry() == IKISS_DOOR) +            m_uiIkissDoorGUID = pGo->GetGUID();      }      void SetData(uint32 type, uint32 data) @@ -52,8 +48,8 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance          switch(type)          {              case DATA_IKISSDOOREVENT: -                if( IkissDoor ) -                    IkissDoor->SetGoState(GO_STATE_ACTIVE); +                if (data == DONE) +                    DoUseDoorOrButton(m_uiIkissDoorGUID,DAY*IN_MILISECONDS);                  break;          }      } diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp index 324524c0b71..9e38ddea302 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp @@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI  {      boss_ambassador_hellmawAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp index ebabd317940..5fc7111edb0 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_blackheart_the_inciter.cpp @@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_blackheart_the_inciterAI : public ScriptedAI  {      boss_blackheart_the_inciterAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp index 34bda60c1b7..edd249cfebb 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_grandmaster_vorpil.cpp @@ -126,7 +126,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI  {      boss_grandmaster_vorpilAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();          Intro = false;      } diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp index cc63d253d1b..f740e0d9596 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/instance_shadow_labyrinth.cpp @@ -73,8 +73,16 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance      {          switch(go->GetEntry())          { -        case REFECTORY_DOOR: RefectoryDoorGUID = go->GetGUID(); break; -        case SCREAMING_HALL_DOOR: ScreamingHallDoorGUID = go->GetGUID(); break; +            case REFECTORY_DOOR: +                RefectoryDoorGUID = go->GetGUID(); +                if (Encounter[2] == DONE) +                    DoUseDoorOrButton(RefectoryDoorGUID); +                break; +            case SCREAMING_HALL_DOOR: +                ScreamingHallDoorGUID = go->GetGUID(); +                if (Encounter[3] == DONE) +                    DoUseDoorOrButton(ScreamingHallDoorGUID); +                break;          }      } @@ -92,23 +100,6 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance          }      } -    Player* GetPlayerInMap() -    { -        Map::PlayerList const& players = instance->GetPlayers(); - -        if (!players.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) -            { -                if (Player* plr = itr->getSource()) -                    return plr; -            } -        } - -        debug_log("TSCR: Instance Shadow Labyrinth: GetPlayerInMap, but PlayerList is empty!"); -        return NULL; -    } -      void SetData(uint32 type, uint32 data)      {          switch(type) @@ -134,17 +125,13 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance              case DATA_BLACKHEARTTHEINCITEREVENT:                  if( data == DONE ) -                { -                    HandleGameObject(RefectoryDoorGUID, true); -                } +                    DoUseDoorOrButton(RefectoryDoorGUID);                  Encounter[2] = data;                  break;              case DATA_GRANDMASTERVORPILEVENT:                  if( data == DONE ) -                { -                    HandleGameObject(ScreamingHallDoorGUID, true); -                } +                    DoUseDoorOrButton(ScreamingHallDoorGUID);                  Encounter[3] = data;                  break; diff --git a/src/bindings/scripts/scripts/zone/azjol_nerub/ahnkahet/boss_elder_nadox.cpp b/src/bindings/scripts/scripts/zone/azjol_nerub/ahnkahet/boss_elder_nadox.cpp index 5f0d4bf03ff..38b5b55d1d7 100644 --- a/src/bindings/scripts/scripts/zone/azjol_nerub/ahnkahet/boss_elder_nadox.cpp +++ b/src/bindings/scripts/scripts/zone/azjol_nerub/ahnkahet/boss_elder_nadox.cpp @@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_elder_nadoxAI : public ScriptedAI  {      boss_elder_nadoxAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = c->GetMap()->IsHeroic();      } @@ -182,7 +182,7 @@ struct TRINITY_DLL_DECL mob_ahnkahar_nerubianAI : public ScriptedAI  {      mob_ahnkahar_nerubianAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Reset();      } diff --git a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp index d769b132af2..9cfbcb7f4ee 100644 --- a/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/zone/azuremyst_isle/azuremyst_isle.cpp @@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL npc_draenei_survivorAI : public ScriptedAI                  m_creature->GetMotionMaster()->MoveIdle();                  m_creature->setDeathState(JUST_DIED);                  m_creature->SetHealth(0); -                m_creature->CombatStop(); +                m_creature->CombatStop(true);                  m_creature->DeleteThreatList();                  m_creature->RemoveCorpse();              }else RunAwayTimer -= diff; @@ -582,8 +582,6 @@ struct TRINITY_DLL_DECL npc_nestlewood_owlkinAI : public ScriptedAI          m_creature->SetVisibility(VISIBILITY_ON);      } -    void Aggro(Unit *who) {} -      void UpdateAI(const uint32 diff)      {          //timer gets adjusted by the triggered aura effect @@ -595,7 +593,7 @@ struct TRINITY_DLL_DECL npc_nestlewood_owlkinAI : public ScriptedAI                  m_creature->SetVisibility(VISIBILITY_OFF);                  m_creature->setDeathState(JUST_DIED);                  m_creature->SetHealth(0); -                m_creature->CombatStop(); +                m_creature->CombatStop(true);                  m_creature->DeleteThreatList();                  m_creature->RemoveCorpse();              }else DespawnTimer -= diff; @@ -624,7 +622,7 @@ bool EffectDummyCreature_npc_nestlewood_owlkin(Unit *pCaster, uint32 spellId, ui          pCreatureTarget->UpdateEntry(ENTRY_OWLKIN_INOC);          //set despawn timer, since we want to remove creature after a short time -        ((npc_nestlewood_owlkinAI*)pCreatureTarget->AI())->DespawnTimer = 15000; +        CAST_AI(npc_nestlewood_owlkinAI, pCreatureTarget->AI())->DespawnTimer = 15000;          //always return true when we are handling this spell and effect          return true; diff --git a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp index 30a9db9f29c..f1dbc48ee79 100644 --- a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp +++ b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp @@ -120,7 +120,7 @@ struct TRINITY_DLL_DECL npc_taskmaster_fizzuleAI : public ScriptedAI      {          m_creature->RemoveAllAuras();          m_creature->DeleteThreatList(); -        m_creature->CombatStop(); +        m_creature->CombatStop(true);          m_creature->StopMoving();          m_creature->GetMotionMaster()->MoveIdle(); diff --git a/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains b/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains index 327b670c6d3..19a31cd35d6 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains +++ b/src/bindings/scripts/scripts/zone/black_temple/.boss_teron_gorefiend.cpp-woains @@ -92,7 +92,7 @@ struct TRINITY_DLL_DECL mob_doom_blossomAI : public ScriptedAI              CheckTeronTimer = 5000;          }else CheckTeronTimer -= diff;         -        if(ShadowBoltTimer < diff && InCombat) +        if(ShadowBoltTimer < diff && m_creature->isInCombat())          {              DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_SHADOWBOLT);              ShadowBoltTimer = 10000; @@ -255,7 +255,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI                  m_creature->AddThreat(who, 1.0f);              } -            if(!InCombat && !Intro && m_creature->IsWithinDistInMap(who, 60.0f) && (who->GetTypeId() == TYPEID_PLAYER)) +            if(!m_creature->isInCombat() && !Intro && m_creature->IsWithinDistInMap(who, 60.0f) && (who->GetTypeId() == TYPEID_PLAYER))              {                  if(pInstance)                      pInstance->SetData(DATA_TERONGOREFIENDEVENT, IN_PROGRESS); @@ -427,7 +427,6 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI                      DoomBlossom->setFaction(m_creature->getFaction());                      DoomBlossom->AddThreat(target, 1.0f);                      ((mob_doom_blossomAI*)DoomBlossom->AI())->SetTeronGUID(m_creature->GetGUID()); -                    ((mob_doom_blossomAI*)DoomBlossom->AI())->InCombat = true;                      SetThreatList(DoomBlossom);                      SummonDoomBlossomTimer = 35000;                  } diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp index 48405c1190c..30d86880911 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_bloodboil.cpp @@ -67,7 +67,7 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI  {      boss_gurtogg_bloodboilAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp index 55625b18eb6..897c4937230 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_illidan.cpp @@ -24,7 +24,7 @@ EndScriptData */  #include "precompiled.h"  #include "def_black_temple.h" -#define GETGO(obj, guid)      GameObject* obj = GameObject::GetGameObject(*m_creature, guid) +#define GETGO(obj, guid)      GameObject* obj = pInstance->instance->GetGameObject(pInstance->GetData64(guid))  #define GETUNIT(unit, guid)   Unit* unit = Unit::GetUnit(*m_creature, guid)  #define GETCRE(cre, guid)     Creature* cre = Unit::GetCreature(*m_creature, guid)  #define HPPCT(unit)           unit->GetHealth()*100 / unit->GetMaxHealth() @@ -366,7 +366,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI  {      boss_illidan_stormrageAI(Creature* c) : ScriptedAI(c), Summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);          SpellEntry *TempSpell = GET_SPELL(SPELL_SHADOWFIEND_PASSIVE); @@ -459,9 +459,8 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI          for(uint8 i = DATA_GAMEOBJECT_ILLIDAN_DOOR_R; i < DATA_GAMEOBJECT_ILLIDAN_DOOR_L + 1; ++i)          { -            GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(i)); -            if(Door) -                Door->SetGoState(GO_STATE_ACTIVE); // Open Doors +            if (GameObject* pDoor = pInstance->instance->GetGameObject(pInstance->GetData64(i))) +                pDoor->SetGoState(GO_STATE_ACTIVE); // Open Doors          }      } @@ -566,7 +565,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI                  {                      GlaiveGUID[i] = Glaive->GetGUID();                      Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                    Glaive->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); +                    Glaive->SetDisplayId(11686);                      Glaive->setFaction(m_creature->getFaction());                      DoCast(Glaive, SPELL_THROW_GLAIVE2);                  } @@ -582,7 +581,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI                  {                      GlaiveGUID[i] = Glaive->GetGUID();                      Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                    Glaive->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); +                    Glaive->SetDisplayId(11686);                      Glaive->setFaction(m_creature->getFaction());                      DoCast(Glaive, SPELL_THROW_GLAIVE, true);                  } @@ -610,7 +609,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI                      if(Glaive)                      {                          Glaive->CastSpell(m_creature, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us -                        Glaive->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); // disappear but not die for now +                        Glaive->SetDisplayId(11686); // disappear but not die for now                      }                  }              } @@ -655,7 +654,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI              DoCast(m_creature, DemonTransformation[TransformCount].aura, true);          if(DemonTransformation[TransformCount].displayid) -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, DemonTransformation[TransformCount].displayid); // It's morphin time! +            m_creature->SetDisplayId(DemonTransformation[TransformCount].displayid); // It's morphin time!          if(DemonTransformation[TransformCount].equip)          { @@ -973,7 +972,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI  {      npc_akama_illidanAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -1038,10 +1037,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI      // Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit      void EnterEvadeMode()      { -        m_creature->InterruptNonMeleeSpells(true);          m_creature->RemoveAllAuras();          m_creature->DeleteThreatList(); -        m_creature->CombatStop(); +        m_creature->CombatStop(true);      }      void EnterCombat(Unit *who) {} @@ -1102,7 +1100,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI          if(Creature* Channel = m_creature->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))          {              ChannelGUID = Channel->GetGUID(); -            Channel->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); // Invisible but spell visuals can still be seen. +            Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen.              m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);              DoCast(Channel, SPELL_AKAMA_DOOR_FAIL);          } @@ -1630,7 +1628,7 @@ struct TRINITY_DLL_DECL cage_trap_triggerAI : public ScriptedAI                      DespawnTimer = 5000;                      if(who->HasAura(SPELL_ENRAGE))                          who->RemoveAurasDueToSpell(SPELL_ENRAGE); // Dispel his enrage -                    //if(GameObject* CageTrap = GameObject::GetGameObject(*m_creature, CageTrapGUID)) +                    //if(GameObject* CageTrap = pInstance->instance->GetGameObject(pInstance->GetData64(CageTrapGUID)))                      //    CageTrap->SetLootState(GO_JUST_DEACTIVATED);                  }              } @@ -1725,7 +1723,7 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI  {      mob_parasitic_shadowfiendAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -1795,7 +1793,7 @@ struct TRINITY_DLL_DECL blade_of_azzinothAI : public NullCreatureAI      void SpellHit(Unit *caster, const SpellEntry *spell)      {          if(spell->Id == SPELL_THROW_GLAIVE2 || spell->Id == SPELL_THROW_GLAIVE) -            me->SetUInt32Value(UNIT_FIELD_DISPLAYID, 21431);//appear when hit by Illidan's glaive +            me->SetDisplayId(21431);//appear when hit by Illidan's glaive      }  }; @@ -1836,7 +1834,7 @@ void boss_illidan_stormrageAI::Reset()      FlightCount = 0;      TransformCount = 0; -    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 21135); +    m_creature->SetDisplayId(21135);      m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);      m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);      m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp index ba3d5316e76..8a00b3a2e0f 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_mother_shahraz.cpp @@ -80,7 +80,7 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI  {      boss_shahrazAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp index e750d5b0732..29f1278c79b 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_reliquary_of_souls.cpp @@ -120,7 +120,7 @@ struct TRINITY_DLL_DECL boss_reliquary_of_soulsAI : public ScriptedAI  {      boss_reliquary_of_soulsAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          EssenceGUID = 0;      } diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp index ed6bc3dcf15..78903b14b2a 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_shade_of_akama.cpp @@ -167,7 +167,7 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI  {      boss_shade_of_akamaAI(Creature* c) : ScriptedAI(c), summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          AkamaGUID = pInstance ? pInstance->GetData64(DATA_AKAMA_SHADE) : 0;          m_creature->setActive(true);//if view distance is too low          m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); @@ -257,17 +257,12 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI                          {                              Channeler->RemoveCorpse();                              Channeler->Respawn(); -                            Channeler->InterruptNonMeleeSpells(true); -                            Channeler->RemoveAurasDueToSpell(SPELL_SHADE_SOUL_CHANNEL);                          } -                        if (Channeler->isAlive()) -                        { -                            Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL, true); -                            Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL_2, true); -                            Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                            GridSearcherSucceeded = true; -                        } +                        Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL, true); +                        Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL_2, true); +                        Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); +                        GridSearcherSucceeded = true;                      }                  }              }else error_log("SD2 ERROR: No Channelers are stored in the list. This encounter will not work properly"); @@ -507,7 +502,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI      {          ShadeHasDied = false;          StartCombat = false; -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          ShadeGUID = pInstance ? pInstance->GetData64(DATA_SHADEOFAKAMA) : NOT_STARTED;          m_creature->setActive(true);          EventBegun = false; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp index a5841cf86a6..1805019dc42 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_supremus.cpp @@ -67,7 +67,7 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI  {      boss_supremusAI(Creature *c) : ScriptedAI(c), summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -105,10 +105,12 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI      void ToggleDoors(bool close)      { -        if(GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS))) +        if(GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS)))          { -            if(close) Doors->SetGoState(GO_STATE_READY);                 // Closed -            else Doors->SetGoState(GO_STATE_ACTIVE);                      // Open +            if(close) +                Doors->SetGoState(GO_STATE_READY);                 // Closed +            else +                Doors->SetGoState(GO_STATE_ACTIVE);                      // Open          }      } diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp index b79abe5e393..1ebb2c7aa25 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_teron_gorefiend.cpp @@ -197,7 +197,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI  {      boss_teron_gorefiendAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp b/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp index 3029231abd9..3933c79847b 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/boss_warlord_najentus.cpp @@ -62,7 +62,7 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI  {      boss_najentusAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp b/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp index d6ce3145f09..d43311a30fd 100644 --- a/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp +++ b/src/bindings/scripts/scripts/zone/black_temple/illidari_council.cpp @@ -192,7 +192,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI  {      mob_illidari_councilAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          for(uint8 i = 0; i < 4; ++i)              Council[i] = 0;      } @@ -240,7 +240,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); +        m_creature->SetDisplayId(11686);      }      void EnterCombat(Unit *who) {} @@ -348,7 +348,7 @@ struct TRINITY_DLL_DECL boss_illidari_councilAI : public ScriptedAI  {      boss_illidari_councilAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          for(uint8 i = 0; i < 4; ++i)              Council[i] = 0;          LoadedGUIDs = false; diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp index 135f63bc08c..6209da759e5 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp @@ -91,7 +91,7 @@ struct TRINITY_DLL_DECL npc_grimstoneAI : public npc_escortAI  {      npc_grimstoneAI(Creature *c) : npc_escortAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          MobSpawnId = rand()%6;      } @@ -622,7 +622,7 @@ struct TRINITY_DLL_DECL npc_marshal_windsorAI : public npc_escortAI  {      npc_marshal_windsorAI(Creature *c) : npc_escortAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      void WaypointReached(uint32 i) @@ -1079,7 +1079,7 @@ struct TRINITY_DLL_DECL npc_rocknotAI : public npc_escortAI  {      npc_rocknotAI(Creature *c) : npc_escortAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -1098,7 +1098,7 @@ struct TRINITY_DLL_DECL npc_rocknotAI : public npc_escortAI      void DoGo(uint32 id, uint32 state)      { -        if (GameObject *go = GameObject::GetGameObject(*m_creature,pInstance->GetData64(id))) +        if (GameObject *go = pInstance->instance->GetGameObject(pInstance->GetData64(id)))              go->SetGoState((GOState)state);      } diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp index d84bd96791d..750d611b58e 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/instance_blackrock_depths.cpp @@ -114,23 +114,6 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance              Encounter[i] = NOT_STARTED;      } -    Player* GetPlayerInMap() -    { -        Map::PlayerList const& players = instance->GetPlayers(); - -        if (!players.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) -            { -                if (Player* plr = itr->getSource()) -                    return plr; -            } -        } - -        debug_log("TSCR: Instance Blackrock Depths: GetPlayerInMap, but PlayerList is empty!"); -        return NULL; -    } -      void OnCreatureCreate(Creature *creature, bool add)      {          switch(creature->GetEntry()) @@ -166,14 +149,6 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance      void SetData(uint32 type, uint32 data)      { -        Player *player = GetPlayerInMap(); - -        if (!player) -        { -            debug_log("TSCR: Instance Blackrock Depths: SetData (Type: %u Data %u) cannot find any player.", type, data); -            return; -        } -          debug_log("TSCR: Instance Blackrock Depths: SetData update (Type: %u Data %u)", type, data);          switch(type) diff --git a/src/bindings/scripts/scripts/zone/blackrock_spire/boss_gyth.cpp b/src/bindings/scripts/scripts/zone/blackrock_spire/boss_gyth.cpp index e48c832e3b0..196077a1292 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_spire/boss_gyth.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_spire/boss_gyth.cpp @@ -72,7 +72,7 @@ struct TRINITY_DLL_DECL boss_gythAI : public ScriptedAI              Line2Count = 2;          //Invisible for event start -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); +        m_creature->SetDisplayId(11686);          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);      } @@ -112,7 +112,7 @@ struct TRINITY_DLL_DECL boss_gythAI : public ScriptedAI              {                  bAggro = true;                  // Visible now! -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 9723); +                m_creature->SetDisplayId(9723);                  m_creature->setFaction(14);                  m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);              } else Aggro_Timer -= diff; @@ -180,7 +180,7 @@ struct TRINITY_DLL_DECL boss_gythAI : public ScriptedAI                  //Inturrupt any spell casting                  m_creature->InterruptNonMeleeSpells(false);                  //Gyth model -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 9806); +                m_creature->SetDisplayId(9806);                  m_creature->SummonCreature(10429, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900000);                  SummonedRend = true;              } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp index 56a99619504..59cf2acf589 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_aeonus.cpp @@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI  {      boss_aeonusAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp index 7745c0c56c9..18dab77f84c 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_chrono_lord_deja.cpp @@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI  {      boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp index 74264aef142..edf204c20e4 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/boss_temporus.cpp @@ -41,7 +41,7 @@ struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI  {      boss_temporusAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp index 740e3d221f6..a8f4e9b748e 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/dark_portal.cpp @@ -58,7 +58,7 @@ struct TRINITY_DLL_DECL npc_medivh_bmAI : public ScriptedAI  {      npc_medivh_bmAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -244,7 +244,7 @@ struct TRINITY_DLL_DECL npc_time_riftAI : public ScriptedAI  {      npc_time_riftAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp index e988782ad60..58962c0c469 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/dark_portal/instance_dark_portal.cpp @@ -95,23 +95,6 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance          NextPortal_Timer    = 0;      } -    Player* GetPlayerInMap() -    { -        Map::PlayerList const& players = instance->GetPlayers(); - -        if (!players.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) -            { -                if (Player* plr = itr->getSource()) -                    return plr; -            } -        } - -        debug_log("TSCR: Instance Black Portal: GetPlayerInMap, but PlayerList is empty!"); -        return NULL; -    } -      void UpdateBMWorldState(uint32 id, uint32 state)      {          Map::PlayerList const& players = instance->GetPlayers(); @@ -158,7 +141,7 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance      //what other conditions to check?      bool CanProgressEvent()      { -        if (!GetPlayerInMap()) +        if (instance->GetPlayers().isEmpty())              return false;          return true; @@ -183,14 +166,6 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance      void SetData(uint32 type, uint32 data)      { -        Player *player = GetPlayerInMap(); - -        if (!player) -        { -            debug_log("TSCR: Instance Black Portal: SetData (Type: %u Data %u) cannot find any player.", type, data); -            return; -        } -          switch(type)          {          case TYPE_MEDIVH: @@ -201,11 +176,11 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance                  if (!mShieldPercent)                  { -                    if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID)) +                    if (Creature* pMedivh = instance->GetCreature(MedivhGUID))                      { -                        if (medivh->isAlive()) +                        if (pMedivh->isAlive())                          { -                            medivh->DealDamage(medivh, medivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); +                            pMedivh->DealDamage(pMedivh, pMedivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);                              Encounter[0] = FAIL;                              Encounter[1] = NOT_STARTED;                          } @@ -225,11 +200,22 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance                  if (data == DONE)                  {                      //this may be completed further out in the post-event -                    if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID)) +                    debug_log("TSCR: Instance Dark Portal: Event completed."); +                    Map::PlayerList const& players = instance->GetPlayers(); + +                    if (!players.isEmpty())                      { -                        debug_log("TSCR: Instance Dark Portal: Event completed."); -                        player->GroupEventHappens(QUEST_OPENING_PORTAL,medivh); -                        player->GroupEventHappens(QUEST_MASTER_TOUCH,medivh); +                        for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) +                        { +                            if (Player* pPlayer = itr->getSource()) +                            { +                                if (pPlayer->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE) +                                    pPlayer->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL); + +                                if (pPlayer->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE) +                                    pPlayer->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); +                            } +                        }                      }                  } @@ -272,24 +258,25 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance          return 0;      } -    Unit* SummonedPortalBoss(Unit* source) +    Creature* SummonedPortalBoss(Creature* pSource)      {          uint32 entry = RiftWaves[GetRiftWaveId()].PortalBoss; +          if (entry == RIFT_BOSS)              entry = RandRiftBoss();          float x,y,z; -        source->GetRandomPoint(source->GetPositionX(),source->GetPositionY(),source->GetPositionZ(),10.0f,x,y,z); +        pSource->GetRandomPoint(pSource->GetPositionX(),pSource->GetPositionY(),pSource->GetPositionZ(),10.0f,x,y,z);          //normalize Z-level if we can, if rift is not at ground level.          z = std::max(instance->GetHeight(x, y, MAX_HEIGHT), instance->GetWaterLevel(x, y));          debug_log("TSCR: Instance Dark Portal: Summoning rift boss entry %u.",entry); -        Unit *Summon = source->SummonCreature(entry,x,y,z,source->GetOrientation(), +        Creature* pSummoned = pSource->SummonCreature(entry,x,y,z,pSource->GetOrientation(),              TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000); -        if (Summon) -            return Summon; +        if (pSummoned) +            return pSummoned;          debug_log("TSCR: Instance Dark Portal: what just happened there? No boss, no loot, no fun...");          return NULL; @@ -297,11 +284,7 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance      void DoSpawnPortal()      { -        Player *player = GetPlayerInMap(); -        if (!player) -            return; - -        if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID)) +        if (Creature* pMedivh = instance->GetCreature(MedivhGUID))          {              int tmp = rand()%(4-1); @@ -311,26 +294,26 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance                      CurrentRiftId = tmp; -                    Unit *temp = medivh->SummonCreature(C_TIME_RIFT, +                    Creature* pTemp = pMedivh->SummonCreature(C_TIME_RIFT,                          PortalLocation[tmp][0],PortalLocation[tmp][1],PortalLocation[tmp][2],PortalLocation[tmp][3],                          TEMPSUMMON_CORPSE_DESPAWN,0); -                    if (temp) +                    if (pTemp)                      { -                        temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); -                        temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); +                        pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); +                        pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                        if (Unit* boss = SummonedPortalBoss(temp)) +                        if (Creature* pBoss = SummonedPortalBoss(pTemp))                          { -                            if (boss->GetEntry() == C_AEONUS) +                            if (pBoss->GetEntry() == C_AEONUS)                              { -                                boss->AddThreat(medivh,0.0f); +                                pBoss->AddThreat(pMedivh,0.0f);                              }                              else                              { -                                boss->AddThreat(temp,0.0f); -                                temp->CastSpell(boss,SPELL_RIFT_CHANNEL,false); +                                pBoss->AddThreat(pTemp,0.0f); +                                pTemp->CastSpell(pBoss,SPELL_RIFT_CHANNEL,false);                              }                          }                      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_anetheron.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_anetheron.cpp index e4016707a99..be3d57b7bcc 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_anetheron.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_anetheron.cpp @@ -40,7 +40,7 @@ struct TRINITY_DLL_DECL boss_anetheronAI : public hyjal_trashAI  {      boss_anetheronAI(Creature *c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          SpellEntry *TempSpell = GET_SPELL(SPELL_SLEEP); @@ -225,7 +225,7 @@ struct TRINITY_DLL_DECL mob_towering_infernalAI : public ScriptedAI  {      mob_towering_infernalAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          if(pInstance)              AnetheronGUID = pInstance->GetData64(DATA_ANETHERON);      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp index 6b6529b292e..9f15b45a3ac 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_archimonde.cpp @@ -76,7 +76,7 @@ struct mob_ancient_wispAI : public ScriptedAI  {      mob_ancient_wispAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -206,7 +206,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public hyjal_trashAI  {      boss_archimondeAI(Creature *c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -458,7 +458,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public hyjal_trashAI                      if (Unit *Nordrassil = Unit::GetUnit(*m_creature, WorldTreeGUID))                      {                          Nordrassil->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                        Nordrassil->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); +                        Nordrassil->SetDisplayId(11686);                          DoCast(Nordrassil, SPELL_DRAIN_WORLD_TREE);                          IsChanneling = true;                      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp index 8ca8ba36575..b788726c60f 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_azgalor.cpp @@ -31,7 +31,7 @@ struct TRINITY_DLL_DECL boss_azgalorAI : public hyjal_trashAI  {      boss_azgalorAI(Creature *c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          SpellEntry *TempSpell = GET_SPELL(SPELL_HOWL_OF_AZGALOR); @@ -187,7 +187,7 @@ struct TRINITY_DLL_DECL mob_lesser_doomguardAI : public hyjal_trashAI  {      mob_lesser_doomguardAI(Creature *c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          if(pInstance)              AzgalorGUID = pInstance->GetData64(DATA_AZGALOR);      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_kazrogal.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_kazrogal.cpp index c8e149e6a37..3dfe54e0cf6 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_kazrogal.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_kazrogal.cpp @@ -28,7 +28,7 @@ struct TRINITY_DLL_DECL boss_kazrogalAI : public hyjal_trashAI  {      boss_kazrogalAI(Creature *c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          SpellEntry *TempSpell = GET_SPELL(SPELL_MARK); diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_rage_winterchill.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_rage_winterchill.cpp index 924652f3d41..fcbe58a6661 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_rage_winterchill.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/boss_rage_winterchill.cpp @@ -34,7 +34,7 @@ struct TRINITY_DLL_DECL boss_rage_winterchillAI : public hyjal_trashAI  {      boss_rage_winterchillAI(Creature *c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp index b6a9f0fecae..487347c1c18 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.cpp @@ -308,7 +308,7 @@ float HordeFirePos[65][8]=//spawn points for the fire visuals (GO) in the horde  hyjalAI::hyjalAI(Creature *c) : npc_escortAI(c), Summons(m_creature)  { -    pInstance = (c->GetInstanceData()); +    pInstance = c->GetInstanceData();      VeinsSpawned[0] = false;      VeinsSpawned[1] = false;      for(uint8 i=0;i<14;i++) @@ -409,11 +409,10 @@ void hyjalAI::Reset()  void hyjalAI::EnterEvadeMode()  { -    m_creature->InterruptNonMeleeSpells(true);      if(m_creature->GetEntry() != JAINA)          m_creature->RemoveAllAuras();      m_creature->DeleteThreatList(); -    m_creature->CombatStop(); +    m_creature->CombatStop(true);      m_creature->LoadCreaturesAddon();      if(m_creature->isAlive()) @@ -728,8 +727,7 @@ void hyjalAI::DeSpawnVeins()          if(!ai)return;          for (uint8 i = 0; i<7; i++)          { -            GameObject* gem = GameObject::GetGameObject((*m_creature), ai->VeinGUID[i]); -            if(gem) +            if (GameObject* gem = pInstance->instance->GetGameObject(pInstance->GetData64(ai->VeinGUID[i])))                  gem->RemoveFromWorld();          }      }else if (Faction) @@ -740,8 +738,7 @@ void hyjalAI::DeSpawnVeins()          if(!ai)return;          for (uint8 i = 7; i<14; i++)          { -            GameObject* gem = GameObject::GetGameObject((*m_creature), ai->VeinGUID[i]); -            if(gem) +            if(GameObject* gem = pInstance->instance->GetGameObject(pInstance->GetData64(ai->VeinGUID[i])))                  gem->RemoveFromWorld();          }      } diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.cpp index 92cbfdbf3ab..cb833ba77fe 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.cpp @@ -141,7 +141,7 @@ float HordeOverrunWP[21][3]=//waypoints in the horde base used in the end in the  hyjal_trashAI::hyjal_trashAI(Creature *c) : npc_escortAI(c)  { -    pInstance = (c->GetInstanceData()); +    pInstance = c->GetInstanceData();      IsEvent = false;      Delay = 0;      LastOverronPos = 0; @@ -375,13 +375,13 @@ struct mob_giant_infernalAI : public hyjal_trashAI  {      mob_giant_infernalAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          meteor = false;//call once!          CanMove = false;          Delay = rand()%30000;          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INVIS); +        m_creature->SetDisplayId(MODEL_INVIS);          go = false;          pos = 0;          Reset(); @@ -447,7 +447,7 @@ struct mob_giant_infernalAI : public hyjal_trashAI              {                  m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);                  m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); +                m_creature->SetDisplayId(m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));                  CanMove = true;                  if (pInstance)                  { @@ -509,7 +509,7 @@ struct mob_abominationAI : public hyjal_trashAI  {      mob_abominationAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -604,7 +604,7 @@ struct mob_ghoulAI : public hyjal_trashAI  {      mob_ghoulAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -707,7 +707,7 @@ struct mob_necromancerAI : public hyjal_trashAI  {      mob_necromancerAI(Creature* c) : hyjal_trashAI(c), summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -825,7 +825,7 @@ struct mob_bansheeAI : public hyjal_trashAI  {      mob_bansheeAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -924,7 +924,7 @@ struct mob_crypt_fiendAI : public hyjal_trashAI  {      mob_crypt_fiendAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -1010,7 +1010,7 @@ struct mob_fel_stalkerAI : public hyjal_trashAI  {      mob_fel_stalkerAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -1096,7 +1096,7 @@ struct mob_frost_wyrmAI : public hyjal_trashAI  {      mob_frost_wyrmAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          Reset(); @@ -1207,7 +1207,7 @@ struct mob_gargoyleAI : public hyjal_trashAI  {      mob_gargoyleAI(Creature* c) : hyjal_trashAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          go = false;          pos = 0;          DummyTarget[0] = 0;DummyTarget[1] = 0;DummyTarget[2] = 0; diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp index feff5debf3e..55676fb4f50 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_captain_skarloc.cpp @@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_captain_skarlocAI : public ScriptedAI  {      boss_captain_skarlocAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp index 26e1cb57e1a..781cb8fd1d6 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_epoch_hunter.cpp @@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL boss_epoch_hunterAI : public ScriptedAI  {      boss_epoch_hunterAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp index ec01c32b5a3..6607c7c7939 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp @@ -177,7 +177,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI  {      npc_thrall_old_hillsbradAI(Creature *c) : npc_escortAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          m_creature->setActive(true);      } @@ -209,7 +209,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI                  //m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+3, 1038);                  break;              case 10: -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, THRALL_MODEL_EQUIPPED); +                m_creature->SetDisplayId(THRALL_MODEL_EQUIPPED);                  break;              case 11:                  SetRun(); @@ -375,7 +375,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI              HadMount = false;              m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, 0);              m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0); -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, THRALL_MODEL_UNEQUIPPED); +            m_creature->SetDisplayId(THRALL_MODEL_UNEQUIPPED);          }          if( IsBeingEscorted )          { @@ -581,7 +581,7 @@ struct TRINITY_DLL_DECL npc_tarethaAI : public npc_escortAI  {      npc_tarethaAI(Creature *c) : npc_escortAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp index 5e9afdf5c33..fb15b427bfa 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp @@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI  {      boss_fathomlord_karathressAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Advisors[0] = 0;          Advisors[1] = 0;          Advisors[2] = 0; @@ -305,7 +305,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_sharkkisAI : public ScriptedAI  {      boss_fathomguard_sharkkisAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -449,7 +449,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI  {      boss_fathomguard_tidalvessAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -564,7 +564,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI  {      boss_fathomguard_caribdisAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp index bd2365336f0..5fdb461a9b0 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_hydross_the_unstable.cpp @@ -6,381 +6,321 @@   *   * 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 + * 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 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   */  /* ScriptData  SDName: Boss_Hydross_The_Unstable  SD%Complete: 90 -SDComment: Some details and adjustments left to do, probably nothing major. Spawns may be spawned in different way/location. +SDComment: Some details and adjustments left to do, probably nothing major. Spawns may be spawned in different way/location. code cleanup needed  SDCategory: Coilfang Resevoir, Serpent Shrine Cavern  EndScriptData */  #include "precompiled.h"  #include "def_serpent_shrine.h" -#define SAY_AGGRO                   -1548000 -#define SAY_SWITCH_TO_CLEAN         -1548001 -#define SAY_CLEAN_SLAY1             -1548002 -#define SAY_CLEAN_SLAY2             -1548003 -#define SAY_CLEAN_DEATH             -1548004 -#define SAY_SWITCH_TO_CORRUPT       -1548005 -#define SAY_CORRUPT_SLAY1           -1548006 -#define SAY_CORRUPT_SLAY2           -1548007 -#define SAY_CORRUPT_DEATH           -1548008 - -#define SWITCH_RADIUS               18 - -#define MODEL_CORRUPT               20609 -#define MODEL_CLEAN                 20162 - -#define SPELL_WATER_TOMB            38235 -#define SPELL_MARK_OF_HYDROSS1      38215 -#define SPELL_MARK_OF_HYDROSS2      38216 -#define SPELL_MARK_OF_HYDROSS3      38217 -#define SPELL_MARK_OF_HYDROSS4      38218 -#define SPELL_MARK_OF_HYDROSS5      38231 -#define SPELL_MARK_OF_HYDROSS6      40584 -#define SPELL_MARK_OF_CORRUPTION1   38219 -#define SPELL_MARK_OF_CORRUPTION2   38220 -#define SPELL_MARK_OF_CORRUPTION3   38221 -#define SPELL_MARK_OF_CORRUPTION4   38222 -#define SPELL_MARK_OF_CORRUPTION5   38230 -#define SPELL_MARK_OF_CORRUPTION6   40583 -#define SPELL_VILE_SLUDGE           38246 -#define SPELL_ENRAGE                27680                   //this spell need verification -#define SPELL_SUMMON_WATER_ELEMENT  36459                   //not in use yet(in use ever?) -#define SPELL_ELEMENTAL_SPAWNIN     25035 -#define SPELL_BLUE_BEAM             /*40227*/40227                   //channeled Hydross Beam Helper (not in use yet) - -#define ENTRY_PURE_SPAWN            22035 -#define ENTRY_TAINTED_SPAWN         22036 -#define ENTRY_BEAM_DUMMY            21934 - -#define HYDROSS_X                   -239.439 -#define HYDROSS_Y                   -363.481 - -#define SPAWN_X_DIFF1               6.934003 -#define SPAWN_Y_DIFF1               -11.255012 -#define SPAWN_X_DIFF2               -6.934003 -#define SPAWN_Y_DIFF2               11.255012 -#define SPAWN_X_DIFF3               -12.577011 -#define SPAWN_Y_DIFF3               -4.72702 -#define SPAWN_X_DIFF4               12.577011 -#define SPAWN_Y_DIFF4               4.72702 +enum +{ +    SAY_AGGRO                   = -1548000, +    SAY_SWITCH_TO_CLEAN         = -1548001, +    SAY_CLEAN_SLAY1             = -1548002, +    SAY_CLEAN_SLAY2             = -1548003, +    SAY_CLEAN_DEATH             = -1548004, +    SAY_SWITCH_TO_CORRUPT       = -1548005, +    SAY_CORRUPT_SLAY1           = -1548006, +    SAY_CORRUPT_SLAY2           = -1548007, +    SAY_CORRUPT_DEATH           = -1548008, + +    SWITCH_RADIUS               = 18, + +    MODEL_CORRUPT               = 20609, +    MODEL_CLEAN                 = 20162, + +    SPELL_WATER_TOMB            = 38235, +    SPELL_MARK_OF_HYDROSS1      = 38215, +    SPELL_MARK_OF_HYDROSS2      = 38216, +    SPELL_MARK_OF_HYDROSS3      = 38217, +    SPELL_MARK_OF_HYDROSS4      = 38218, +    SPELL_MARK_OF_HYDROSS5      = 38231, +    SPELL_MARK_OF_HYDROSS6      = 40584, +    SPELL_MARK_OF_CORRUPTION1   = 38219, +    SPELL_MARK_OF_CORRUPTION2   = 38220, +    SPELL_MARK_OF_CORRUPTION3   = 38221, +    SPELL_MARK_OF_CORRUPTION4   = 38222, +    SPELL_MARK_OF_CORRUPTION5   = 38230, +    SPELL_MARK_OF_CORRUPTION6   = 40583, +    SPELL_VILE_SLUDGE           = 38246, +    SPELL_ENRAGE                = 27680,                    //this spell need verification +    SPELL_SUMMON_WATER_ELEMENT  = 36459,                    //not in use yet(in use ever?) +    SPELL_ELEMENTAL_SPAWNIN     = 25035, +    SPELL_BLUE_BEAM             = 38015,                    //channeled Hydross Beam Helper (not in use yet) + +    NPC_PURE_SPAWN              = 22035, +    NPC_TAINTED_SPAWN           = 22036 +}; + +const float afSpawnDiffs[4][2] = +{ +    {6.934003f  , -11.255012f},                             // diff 1 +    {-6.934003f , 11.255012f },                             // diff 2 +    {-12.577011f, -4.72702f  },                             // diff 3 +    {12.577011f , 4.72702f   }                              // diff 4 +};  struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI  { -    boss_hydross_the_unstableAI(Creature *c) : ScriptedAI(c), Summons(m_creature) +    boss_hydross_the_unstableAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        m_pInstance = c->GetInstanceData();      } -    ScriptedInstance* pInstance; -    uint64 beams[2]; -    uint32 PosCheck_Timer; -    uint32 MarkOfHydross_Timer; -    uint32 MarkOfCorruption_Timer; -    uint32 WaterTomb_Timer; -    uint32 VileSludge_Timer; -    uint32 MarkOfHydross_Count; -    uint32 MarkOfCorruption_Count; -    uint32 EnrageTimer; -    bool CorruptedForm; -    bool beam; -    SummonList Summons; +    ScriptedInstance* m_pInstance;                          // the instance + +    uint32 m_uiPosCheck_Timer; +    uint32 m_uiMarkOfHydross_Timer; +    uint32 m_uiMarkOfCorruption_Timer; +    uint32 m_uiWaterTomb_Timer; +    uint32 m_uiVileSludge_Timer; +    uint32 m_uiMarkOfHydross_Count; +    uint32 m_uiMarkOfCorruption_Count; +    uint32 m_uiEnrageTimer; +    bool   m_bCorruptedForm;      void Reset()      { -        DeSummonBeams(); -        beams[0] = 0; -        beams[1] = 0; -        PosCheck_Timer = 2500; -        MarkOfHydross_Timer = 15000; -        MarkOfCorruption_Timer = 15000; -        WaterTomb_Timer = 7000; -        VileSludge_Timer = 7000; -        MarkOfHydross_Count = 0; -        MarkOfCorruption_Count = 0; -        EnrageTimer = 600000; - -        CorruptedForm = false; +        m_uiPosCheck_Timer          = 2500; +        m_uiMarkOfHydross_Timer     = 15000; +        m_uiMarkOfCorruption_Timer  = 15000; +        m_uiWaterTomb_Timer         = 7000; +        m_uiVileSludge_Timer        = 7000; +        m_uiMarkOfHydross_Count     = 0; +        m_uiMarkOfCorruption_Count  = 0; +        m_uiEnrageTimer             = 600000; + +        m_bCorruptedForm = false; +          m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_FROST);          m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);          m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CLEAN); +        m_creature->SetDisplayId(MODEL_CLEAN); -        if (pInstance) -            pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED); -        beam = false; -        Summons.DespawnAll(); +        if (m_pInstance) +            m_pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);      } -    void SummonBeams() -    { -        Creature* beamer = m_creature->SummonCreature(ENTRY_BEAM_DUMMY,-258.333,-356.34,22.0499,5.90835,TEMPSUMMON_CORPSE_DESPAWN,0); -        if(beamer) -        { -            beamer->CastSpell(m_creature,SPELL_BLUE_BEAM,true); -            beamer->SetUInt32Value(UNIT_FIELD_DISPLAYID , 11686);  //invisible -            beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -            beams[0]=beamer->GetGUID(); -        } -        beamer = beamer = m_creature->SummonCreature(ENTRY_BEAM_DUMMY,-219.918,-371.308,22.0042,2.73072,TEMPSUMMON_CORPSE_DESPAWN,0); -        if(beamer) -        { -            beamer->CastSpell(m_creature,SPELL_BLUE_BEAM,true); -            beamer->SetUInt32Value(UNIT_FIELD_DISPLAYID , 11686);  //invisible -            beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -            beams[1]=beamer->GetGUID(); -        } -    } -    void DeSummonBeams() -    { -        for(uint8 i=0;i<2;i++) -        { -            Creature* mob = Unit::GetCreature(*m_creature,beams[i]); -            if(mob) -            { -                mob->setDeathState(DEAD); -                mob->RemoveCorpse(); -            } -        } -    } -    void EnterCombat(Unit *who) +    void Aggro(Unit* pWho)      {          DoScriptText(SAY_AGGRO, m_creature); -        if (pInstance) -            pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS); +        if (m_pInstance) +            m_pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS);      } -    void KilledUnit(Unit *victim) +    void KilledUnit(Unit* pVictim)      { -        if (CorruptedForm) -        { -            switch(rand()%2) -            { -                case 0: DoScriptText(SAY_CORRUPT_SLAY1, m_creature); break; -                case 1: DoScriptText(SAY_CORRUPT_SLAY2, m_creature); break; -            } -        } +        if (m_bCorruptedForm) +            DoScriptText(urand(0,1) ? SAY_CORRUPT_SLAY1 : SAY_CORRUPT_SLAY2, m_creature);          else -        { -            switch(rand()%2) -            { -                case 0: DoScriptText(SAY_CLEAN_SLAY1, m_creature); break; -                case 1: DoScriptText(SAY_CLEAN_SLAY2, m_creature); break; -            } -        } +            DoScriptText(urand(0,1) ? SAY_CLEAN_SLAY1 : SAY_CLEAN_SLAY2, m_creature);      } -    void JustSummoned(Creature* summoned) +    void JustSummoned(Creature* pSummoned)      { -        if (summoned->GetEntry() == ENTRY_PURE_SPAWN) -        { -            summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); -            summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true); -            Summons.Summon(summoned); -        } -        if (summoned->GetEntry() == ENTRY_TAINTED_SPAWN) -        { -            summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true); -            summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true); -            Summons.Summon(summoned); -        } +        if (pSummoned->GetEntry() == NPC_PURE_SPAWN) +            pSummoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); +        else if (pSummoned->GetEntry() == NPC_TAINTED_SPAWN) +            pSummoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true); + +        pSummoned->CastSpell(pSummoned, SPELL_ELEMENTAL_SPAWNIN, true);      } -    void SummonedCreatureDespawn(Creature *summon) +    void JustDied(Unit* pVictim)      { -        Summons.Despawn(summon); +        DoScriptText(m_bCorruptedForm ? SAY_CORRUPT_DEATH : SAY_CLEAN_DEATH, m_creature); + +        if (m_pInstance) +            m_pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);      } -    void JustDied(Unit *victim) +    void SpawnAdds()      { -        if (CorruptedForm) -            DoScriptText(SAY_CORRUPT_DEATH, m_creature); +        uint32 uiAdd = 0; + +        if (m_bCorruptedForm) +            uiAdd = NPC_TAINTED_SPAWN;          else -            DoScriptText(SAY_CLEAN_DEATH, m_creature); +            uiAdd = NPC_PURE_SPAWN; -        if (pInstance) -            pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, DONE); -        Summons.DespawnAll(); +        for(uint8 i = 0; i < 4; i++) +            DoSpawnCreature(uiAdd, afSpawnDiffs[i][0], afSpawnDiffs[i][1], 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);      } -    void UpdateAI(const uint32 diff) +    void UpdateAI(const uint32 uiDiff)      { -        if(!beam) -        { -            SummonBeams(); -            beam=true; -        }          //Return since we have no target -        if (!UpdateVictim() ) +        if (!UpdateVictim())              return;          // corrupted form -        if (CorruptedForm) +        if (m_bCorruptedForm)          {              //MarkOfCorruption_Timer -            if (MarkOfCorruption_Timer < diff) +            if (m_uiMarkOfCorruption_Timer < uiDiff)              { -                if (MarkOfCorruption_Count <= 5) +                if (m_uiMarkOfCorruption_Count <= 5)                  { -                    uint32 mark_spell; +                    uint32 uiMarkSpell = 0; -                    switch(MarkOfCorruption_Count) +                    switch(m_uiMarkOfCorruption_Count)                      { -                        case 0: mark_spell = SPELL_MARK_OF_CORRUPTION1; break; -                        case 1: mark_spell = SPELL_MARK_OF_CORRUPTION2; break; -                        case 2: mark_spell = SPELL_MARK_OF_CORRUPTION3; break; -                        case 3: mark_spell = SPELL_MARK_OF_CORRUPTION4; break; -                        case 4: mark_spell = SPELL_MARK_OF_CORRUPTION5; break; -                        case 5: mark_spell = SPELL_MARK_OF_CORRUPTION6; break; +                        case 0: uiMarkSpell = SPELL_MARK_OF_CORRUPTION1; break; +                        case 1: uiMarkSpell = SPELL_MARK_OF_CORRUPTION2; break; +                        case 2: uiMarkSpell = SPELL_MARK_OF_CORRUPTION3; break; +                        case 3: uiMarkSpell = SPELL_MARK_OF_CORRUPTION4; break; +                        case 4: uiMarkSpell = SPELL_MARK_OF_CORRUPTION5; break; +                        case 5: uiMarkSpell = SPELL_MARK_OF_CORRUPTION6; break;                      } -                    DoCast(m_creature->getVictim(), mark_spell); +                    DoCast(m_creature->getVictim(), uiMarkSpell); -                    if (MarkOfCorruption_Count < 5) -                        MarkOfCorruption_Count++; +                    if (m_uiMarkOfCorruption_Count < 5) +                        ++m_uiMarkOfCorruption_Count;                  } -                MarkOfCorruption_Timer = 15000; -            }else MarkOfCorruption_Timer -= diff; +                m_uiMarkOfCorruption_Timer = 15000; +            }else m_uiMarkOfCorruption_Timer -= uiDiff;              //VileSludge_Timer -            if (VileSludge_Timer < diff) +            if (m_uiVileSludge_Timer < uiDiff)              { -                Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); -                if (target) -                    DoCast(target, SPELL_VILE_SLUDGE); +                if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) +                    DoCast(pTarget, SPELL_VILE_SLUDGE); -                VileSludge_Timer = 15000; -            }else VileSludge_Timer -= diff; +                m_uiVileSludge_Timer = 15000; +            }else m_uiVileSludge_Timer -= uiDiff;              //PosCheck_Timer -            if (PosCheck_Timer < diff) +            if (m_uiPosCheck_Timer < uiDiff)              { -                if (m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) < SWITCH_RADIUS) -                { -                    // switch to clean form -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CLEAN); -                    CorruptedForm = false; -                    MarkOfHydross_Count = 0; +                float fPosX, fPosY, fPosZ, fPosO; +                m_creature->GetHomePosition(fPosX, fPosY, fPosZ, fPosO); +                if (m_creature->GetDistance2d(fPosX, fPosY) < SWITCH_RADIUS) +                {                      DoScriptText(SAY_SWITCH_TO_CLEAN, m_creature); + +                    // switch to clean form +                    m_creature->SetDisplayId(MODEL_CLEAN); +                    m_uiMarkOfHydross_Count = 0;                      DoResetThreat(); -                    SummonBeams();                      // spawn 4 adds -                    DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); -                    DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); -                    DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); -                    DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); +                    SpawnAdds();                      m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_FROST);                      m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);                      m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); + +                    m_bCorruptedForm = false;                  } -                PosCheck_Timer = 2500; -            }else PosCheck_Timer -=diff; +                m_uiPosCheck_Timer = 2500; +            }else m_uiPosCheck_Timer -=uiDiff;          }          // clean form          else          {              //MarkOfHydross_Timer -            if (MarkOfHydross_Timer < diff) +            if (m_uiMarkOfHydross_Timer < uiDiff)              { -                if (MarkOfHydross_Count <= 5) +                if (m_uiMarkOfHydross_Count <= 5)                  { -                    uint32 mark_spell; +                    uint32 uiMarkSpell; -                    switch(MarkOfHydross_Count) +                    switch(m_uiMarkOfHydross_Count)                      { -                        case 0:  mark_spell = SPELL_MARK_OF_HYDROSS1; break; -                        case 1:  mark_spell = SPELL_MARK_OF_HYDROSS2; break; -                        case 2:  mark_spell = SPELL_MARK_OF_HYDROSS3; break; -                        case 3:  mark_spell = SPELL_MARK_OF_HYDROSS4; break; -                        case 4:  mark_spell = SPELL_MARK_OF_HYDROSS5; break; -                        case 5:  mark_spell = SPELL_MARK_OF_HYDROSS6; break; +                        case 0: uiMarkSpell = SPELL_MARK_OF_HYDROSS1; break; +                        case 1: uiMarkSpell = SPELL_MARK_OF_HYDROSS2; break; +                        case 2: uiMarkSpell = SPELL_MARK_OF_HYDROSS3; break; +                        case 3: uiMarkSpell = SPELL_MARK_OF_HYDROSS4; break; +                        case 4: uiMarkSpell = SPELL_MARK_OF_HYDROSS5; break; +                        case 5: uiMarkSpell = SPELL_MARK_OF_HYDROSS6; break;                      } -                    DoCast(m_creature->getVictim(), mark_spell); +                    DoCast(m_creature->getVictim(), uiMarkSpell); -                    if (MarkOfHydross_Count < 5) -                        MarkOfHydross_Count++; +                    if (m_uiMarkOfHydross_Count < 5) +                        ++m_uiMarkOfHydross_Count;                  } -                MarkOfHydross_Timer = 15000; -            }else MarkOfHydross_Timer -= diff; +                m_uiMarkOfHydross_Timer = 15000; +            }else m_uiMarkOfHydross_Timer -= uiDiff;              //WaterTomb_Timer -            if (WaterTomb_Timer < diff) +            if (m_uiWaterTomb_Timer < uiDiff)              { -                Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); -                if (target) -                    DoCast(target, SPELL_WATER_TOMB); +                if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) +                    DoCast(pTarget, SPELL_WATER_TOMB); -                WaterTomb_Timer = 7000; -            }else WaterTomb_Timer -= diff; +                m_uiWaterTomb_Timer = 7000; +            }else m_uiWaterTomb_Timer -= uiDiff;              //PosCheck_Timer -            if (PosCheck_Timer < diff) +            if (m_uiPosCheck_Timer < uiDiff)              { -                if (m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) >= SWITCH_RADIUS) -                { -                    // switch to corrupted form -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CORRUPT); -                    MarkOfCorruption_Count = 0; -                    CorruptedForm = true; +                float fPosX, fPosY, fPosZ, fPosO; +                m_creature->GetHomePosition(fPosX, fPosY, fPosZ, fPosO); +                if (m_creature->GetDistance2d(fPosX, fPosY) >= SWITCH_RADIUS) +                {                      DoScriptText(SAY_SWITCH_TO_CORRUPT, m_creature); + +                    // switch to corrupted form +                    m_creature->SetDisplayId(MODEL_CORRUPT); +                    m_uiMarkOfCorruption_Count = 0;                      DoResetThreat(); -                    DeSummonBeams();                      // spawn 4 adds -                    DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); -                    DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); -                    DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); -                    DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); +                    SpawnAdds();                      m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);                      m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);                      m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, false); + +                    m_bCorruptedForm = true;                  } -                PosCheck_Timer = 2500; -            }else PosCheck_Timer -=diff; +                m_uiPosCheck_Timer = 2500; +            }else m_uiPosCheck_Timer -=uiDiff;          }          //EnrageTimer -        if (EnrageTimer < diff) +        if (m_uiEnrageTimer < uiDiff)          {              DoCast(m_creature, SPELL_ENRAGE); -            EnrageTimer = 60000; -        }else EnrageTimer -= diff; +            m_uiEnrageTimer = 60000; +        }else m_uiEnrageTimer -= uiDiff;          DoMeleeAttackIfReady();      }  }; -CreatureAI* GetAI_boss_hydross_the_unstable(Creature *_Creature) + +CreatureAI* GetAI_boss_hydross_the_unstable(Creature* pCreature)  { -    return new boss_hydross_the_unstableAI (_Creature); +    return new boss_hydross_the_unstableAI(pCreature);  }  void AddSC_boss_hydross_the_unstable()  {      Script *newscript;      newscript = new Script; -    newscript->Name="boss_hydross_the_unstable"; +    newscript->Name = "boss_hydross_the_unstable";      newscript->GetAI = &GetAI_boss_hydross_the_unstable;      newscript->RegisterSelf();  } - diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp index ea7745ce6ec..e1fdcf5ab15 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp @@ -132,7 +132,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI  {      boss_lady_vashjAI (Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Intro = false;          JustCreated = true;          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //set it only once on creature create (no need do intro if wiped) @@ -158,7 +158,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI      uint8 Phase;      bool Entangle; -    bool InCombat;      bool Intro;      bool CanAttack;      bool JustCreated; @@ -181,7 +180,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI          Phase = 0;          Entangle = false; -        InCombat = false;          if(JustCreated)          {              CanAttack = false; @@ -241,7 +239,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI              case 3: DoScriptText(SAY_AGGRO4, m_creature); break;          } -        InCombat = true;          Phase = 1;          if(pInstance) @@ -266,7 +263,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI          if(Phase != 2)              AttackStart(who); -        if(!InCombat) +        if(!m_creature->isInCombat())              StartEvent();      } @@ -293,7 +290,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI                  if(Phase != 2)                      AttackStart(who); -                if(!InCombat) +                if(!m_creature->isInCombat())                      StartEvent();              }          } @@ -340,7 +337,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI              }          }          //to prevent abuses during phase 2 -        if(Phase == 2 && !m_creature->getVictim() && InCombat) +        if(Phase == 2 && !m_creature->getVictim() && m_creature->isInCombat())          {              EnterEvadeMode();              return; @@ -583,7 +580,7 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI  {      mob_enchanted_elementalAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -672,7 +669,7 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI                      m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);                  }              } -            if(CAST_AI(boss_lady_vashjAI, Vashj->AI())->InCombat == false || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead()) +            if(!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead())              {                  //call Unsummon()                  m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); @@ -688,7 +685,7 @@ struct TRINITY_DLL_DECL mob_tainted_elementalAI : public ScriptedAI  {      mob_tainted_elementalAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -751,7 +748,7 @@ struct TRINITY_DLL_DECL mob_toxic_sporebatAI : public ScriptedAI  {      mob_toxic_sporebatAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          EnterEvadeMode();      } @@ -883,7 +880,7 @@ struct TRINITY_DLL_DECL mob_shield_generator_channelAI : public ScriptedAI  {      mob_shield_generator_channelAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -893,7 +890,7 @@ struct TRINITY_DLL_DECL mob_shield_generator_channelAI : public ScriptedAI      {          Check_Timer = 0;          Casted = false; -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID , 11686);  //invisible +        m_creature->SetDisplayId(11686);  //invisible          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);      } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp index 032ddb4ef70..70190662516 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_leotheras_the_blind.cpp @@ -140,7 +140,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI      boss_leotheras_the_blindAI(Creature *c) : ScriptedAI(c)      {          m_creature->GetPosition(x,y,z); -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Demon = 0;          for(uint8 i = 0; i < 3; i++)//clear guids @@ -187,7 +187,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI          EnrageUsed = false;          InnderDemon_Count = 0;          m_creature->SetSpeed( MOVE_RUN, 2.0f, true); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF); +        m_creature->SetDisplayId(MODEL_NIGHTELF);          m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID  , 0);          m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);          m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true); @@ -270,7 +270,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI              m_creature->ApplySpellImmune(AURA_BANISH, IMMUNITY_MECHANIC, MECHANIC_BANISH, true);              // changing model to bloodelf -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF); +            m_creature->SetDisplayId(MODEL_NIGHTELF);              // and reseting equipment              m_creature->LoadEquipment(m_creature->GetEquipmentId()); @@ -292,7 +292,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI              DoCast(m_creature, AURA_BANISH);              // changing model -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_DEMON); +            m_creature->SetDisplayId(MODEL_DEMON);              // and removing weapons              m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID  , 0); @@ -457,7 +457,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI                  {                      //switch to demon form                      m_creature->RemoveAurasDueToSpell(SPELL_WHIRLWIND,0); -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_DEMON); +                    m_creature->SetDisplayId(MODEL_DEMON);                      DoScriptText(SAY_SWITCH_TO_DEMON, m_creature);                      m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID  , 0);                      m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0); @@ -534,7 +534,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI              if(SwitchToHuman_Timer < diff)              {                  //switch to nightelf form -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF); +                m_creature->SetDisplayId(MODEL_NIGHTELF);                  m_creature->LoadEquipment(m_creature->GetEquipmentId());                  CastConsumingMadness(); @@ -563,7 +563,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI              DemonForm = false;              DoScriptText(SAY_FINAL_FORM, m_creature); -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF); +            m_creature->SetDisplayId(MODEL_NIGHTELF);              m_creature->LoadEquipment(m_creature->GetEquipmentId());          }      } @@ -640,7 +640,7 @@ struct TRINITY_DLL_DECL mob_greyheart_spellbinderAI : public ScriptedAI  {      mob_greyheart_spellbinderAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData());; +        pInstance = c->GetInstanceData();;          leotherasGUID = 0;          AddedBanish = false;      } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp index 3fa97e6b608..3a1601013b3 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp @@ -76,7 +76,7 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI  {      boss_the_lurker_belowAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          SpellEntry *TempSpell = GET_SPELL(SPELL_SPOUT_ANIM);          if(TempSpell)          { diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp index 5038fe09334..0225773652f 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_morogrim_tidewalker.cpp @@ -1,289 +1,240 @@  /* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> -* 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 -*/ + * 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 + */  /* ScriptData  SDName: Boss_Morogrim_Tidewalker  SD%Complete: 90 -SDComment: Water globules don't explode properly, remove hacks +SDComment:  SDCategory: Coilfang Resevoir, Serpent Shrine Cavern  EndScriptData */  #include "precompiled.h"  #include "def_serpent_shrine.h" -#define SAY_AGGRO                   -1548030 -#define SAY_SUMMON1                 -1548031 -#define SAY_SUMMON2                 -1548032 -#define SAY_SUMMON_BUBL1            -1548033 -#define SAY_SUMMON_BUBL2            -1548034 -#define SAY_SLAY1                   -1548035 -#define SAY_SLAY2                   -1548036 -#define SAY_SLAY3                   -1548037 -#define SAY_DEATH                   -1548038 -#define EMOTE_WATERY_GRAVE          -1548039 -#define EMOTE_EARTHQUAKE            -1548040 -#define EMOTE_WATERY_GLOBULES       -1548041 - -#define SPELL_TIDAL_WAVE            37730 -#define SPELL_WATERY_GRAVE          38049 -#define SPELL_EARTHQUAKE            37764 -#define SPELL_WATERY_GRAVE_EXPLOSION 37852 - -#define WATERY_GRAVE_X1             334.64 -#define WATERY_GRAVE_Y1             -728.89 -#define WATERY_GRAVE_Z1             -14.42 -#define WATERY_GRAVE_X2             365.51 -#define WATERY_GRAVE_Y2             -737.14 -#define WATERY_GRAVE_Z2             -14.44 -#define WATERY_GRAVE_X3             366.19 -#define WATERY_GRAVE_Y3             -709.59 -#define WATERY_GRAVE_Z3             -14.36 -#define WATERY_GRAVE_X4             372.93 -#define WATERY_GRAVE_Y4             -690.96 -#define WATERY_GRAVE_Z4             -14.44 - -#define SPELL_WATERY_GRAVE_1    38023 -#define SPELL_WATERY_GRAVE_2    38024 -#define SPELL_WATERY_GRAVE_3    38025 -#define SPELL_WATERY_GRAVE_4    37850 - -#define SPELL_SUMMON_WATER_GLOBULE_1    37854 -#define SPELL_SUMMON_WATER_GLOBULE_2    37858 -#define SPELL_SUMMON_WATER_GLOBULE_3    37860 -#define SPELL_SUMMON_WATER_GLOBULE_4    37861 - -/*#define SPELL_SUMMON_MURLOC_A6    39813 -#define SPELL_SUMMON_MURLOC_A7  39814 -#define SPELL_SUMMON_MURLOC_A8  39815 -#define SPELL_SUMMON_MURLOC_A9  39816 -#define SPELL_SUMMON_MURLOC_A10 39817 - -#define SPELL_SUMMON_MURLOC_B6  39818 -#define SPELL_SUMMON_MURLOC_B7  39819 -#define SPELL_SUMMON_MURLOC_B8  39820 -#define SPELL_SUMMON_MURLOC_B9  39821 -#define SPELL_SUMMON_MURLOC_B10 39822*/ - -float MurlocCords[10][5] = +enum  { -      {21920, 424.36, -715.4, -7.14, 0.124}, -       {21920, 425.13, -719.3, -7.14, 0.124}, -       {21920, 425.05, -724.23, -7.14, 0.124}, -       {21920, 424.91, -728.68, -7.14, 0.124}, -      {21920, 424.84, -732.18, -7.14, 0.124}, -       {21920, 321.05, -734.2, -13.15, 0.124}, -       {21920, 321.05, -729.4, -13.15, 0.124}, -       {21920, 321.05, -724.03, -13.15, 0.124}, -      {21920, 321.05, -718.73, -13.15, 0.124}, -       {21920, 321.05, -714.24, -13.15, 0.124} +    SAY_AGGRO                       = -1548030, +    SAY_SUMMON1                     = -1548031, +    SAY_SUMMON2                     = -1548032, +    SAY_SUMMON_BUBL1                = -1548033, +    SAY_SUMMON_BUBL2                = -1548034, +    SAY_SLAY1                       = -1548035, +    SAY_SLAY2                       = -1548036, +    SAY_SLAY3                       = -1548037, +    SAY_DEATH                       = -1548038, +    EMOTE_WATERY_GRAVE              = -1548039, +    EMOTE_EARTHQUAKE                = -1548040, +    EMOTE_WATERY_GLOBULES           = -1548041, + +    SPELL_TIDAL_WAVE                = 37730, +    SPELL_EARTHQUAKE                = 37764, + +    SPELL_WATERY_GRAVE_1            = 37850, +    SPELL_WATERY_GRAVE_2            = 38023, +    SPELL_WATERY_GRAVE_3            = 38024, +    SPELL_WATERY_GRAVE_4            = 38025, + +    SPELL_SUMMON_MURLOC_A6          = 39813, +    SPELL_SUMMON_MURLOC_A7          = 39814, +    SPELL_SUMMON_MURLOC_A8          = 39815, +    SPELL_SUMMON_MURLOC_A9          = 39816, +    SPELL_SUMMON_MURLOC_A10         = 39817, + +    SPELL_SUMMON_MURLOC_B6          = 39818, +    SPELL_SUMMON_MURLOC_B7          = 39819, +    SPELL_SUMMON_MURLOC_B8          = 39820, +    SPELL_SUMMON_MURLOC_B9          = 39821, +    SPELL_SUMMON_MURLOC_B10         = 39822, + +    SPELL_SUMMON_GLOBULE_1          = 37854, +    SPELL_SUMMON_GLOBULE_2          = 37858, +    SPELL_SUMMON_GLOBULE_3          = 37860, +    SPELL_SUMMON_GLOBULE_4          = 37861, + +    NPC_WATER_GLOBULE               = 21913, +    NPC_TIDEWALKER_LURKER           = 21920  }; -//Creatures -#define WATER_GLOBULE               21913 -#define TIDEWALKER_LURKER           21920 -  //Morogrim Tidewalker AI  struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI  { -    boss_morogrim_tidewalkerAI(Creature *c) : ScriptedAI(c) +    boss_morogrim_tidewalkerAI(Creature* pCreature) : ScriptedAI(pCreature)      { -        pInstance = (c->GetInstanceData()); +        m_pInstance = ((ScriptedInstance*)pCreature->GetInstanceData());      } -    ScriptedInstance* pInstance; -    Map::PlayerList const *PlayerList; +    ScriptedInstance* m_pInstance;                          // the instance -    uint32 TidalWave_Timer; -    uint32 WateryGrave_Timer; -    uint32 Earthquake_Timer; -    uint32 WateryGlobules_Timer; -    uint32 globulespell[4]; -    int8 Playercount; -    int8 counter; +    // timers +    uint32 m_uiTidalWave_Timer; +    uint32 m_uiWateryGrave_Timer; +    uint32 m_uiEarthquake_Timer; +    uint32 m_uiWateryGlobules_Timer; -    bool Earthquake; -    bool Phase2; +    bool m_bEarthquake; +    bool m_bPhase2;      void Reset()      { -        TidalWave_Timer = 10000; -        WateryGrave_Timer = 30000; -        Earthquake_Timer = 40000; -        WateryGlobules_Timer = 0; -        globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1; -        globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2; -        globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3; -        globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4; - -        Earthquake = false; -        Phase2 = false; - -        if (pInstance) -            pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED); -    } +        m_uiTidalWave_Timer      = 10000; +        m_uiWateryGrave_Timer    = 30000; +        m_uiEarthquake_Timer     = 40000; +        m_uiWateryGlobules_Timer = 0; -    void StartEvent() -    { -        DoScriptText(SAY_AGGRO, m_creature); +        m_bEarthquake = false; +        m_bPhase2     = false; -        if (pInstance) -            pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS); +        if (m_pInstance) +            m_pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);      } -    void KilledUnit(Unit *victim) +    void KilledUnit(Unit* pVictim)      {          switch(rand()%3)          { -        case 0: DoScriptText(SAY_SLAY1, m_creature); break; -        case 1: DoScriptText(SAY_SLAY2, m_creature); break; -        case 2: DoScriptText(SAY_SLAY3, m_creature); break; +            case 0: DoScriptText(SAY_SLAY1, m_creature); break; +            case 1: DoScriptText(SAY_SLAY2, m_creature); break; +            case 2: DoScriptText(SAY_SLAY3, m_creature); break;          }      } -    void JustDied(Unit *victim) +    void JustDied(Unit* pVictim)      {          DoScriptText(SAY_DEATH, m_creature); -        if (pInstance) -            pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, DONE); +        if (m_pInstance) +            m_pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);      } -    void EnterCombat(Unit *who) +    void Aggro(Unit* pWho)      { -        PlayerList = &m_creature->GetMap()->GetPlayers(); -        Playercount = PlayerList->getSize(); -        StartEvent(); +        DoScriptText(SAY_AGGRO, m_creature); + +        if (m_pInstance) +            m_pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS);      } -    void ApplyWateryGrave(Unit *player, uint8 i) +    void JustSummoned(Creature* pSummoned)      { -        switch(i) +        if (pSummoned->GetEntry() == NPC_TIDEWALKER_LURKER)          { -        case 0: player->CastSpell(player, SPELL_WATERY_GRAVE_1, true); break; -        case 1: player->CastSpell(player, SPELL_WATERY_GRAVE_2, true); break; -        case 2: player->CastSpell(player, SPELL_WATERY_GRAVE_3, true); break; -        case 3: player->CastSpell(player, SPELL_WATERY_GRAVE_4, true); break; +            if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) +                pSummoned->AI()->AttackStart(pTarget); +        } + +        if (pSummoned->GetEntry() == NPC_WATER_GLOBULE) +        { +            if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) +                pSummoned->GetMotionMaster()->MoveFollow(pTarget, 0.0f, 0.0f);          }      } -    void UpdateAI(const uint32 diff) +    void UpdateAI(const uint32 uiDiff)      {          //Return since we have no target -        if (!UpdateVictim() ) +        if (!UpdateVictim())              return; -        //Earthquake_Timer -        if (Earthquake_Timer < diff) +        //m_uiEarthquake_Timer +        if (m_uiEarthquake_Timer < uiDiff)          { -            if (!Earthquake) +            if (!m_bEarthquake)              {                  DoCast(m_creature->getVictim(), SPELL_EARTHQUAKE); -                Earthquake = true; -                Earthquake_Timer = 10000; +                m_bEarthquake = true; +                m_uiEarthquake_Timer = 5000;              }              else              { -                switch(rand()%2) -                { -                    case 0: DoScriptText(SAY_SUMMON1, m_creature); break; -                    case 1: DoScriptText(SAY_SUMMON2, m_creature); break; -                } +                DoScriptText(urand(0,1) ? SAY_SUMMON1 : SAY_SUMMON2, m_creature); + +                //north +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A6,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A7,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A8,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A9,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A10,true); + +                //south +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B6,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B7,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B8,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B9,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B10,true); -                for(uint8 i = 0; i < 10; i++) -                { -                    Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0); -                    Creature* Murloc = m_creature->SummonCreature(MurlocCords[i][0],MurlocCords[i][1],MurlocCords[i][2],MurlocCords[i][3],MurlocCords[i][4], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); -                    if(target && Murloc) -                        Murloc->AI()->AttackStart(target); -                }                  DoScriptText(EMOTE_EARTHQUAKE, m_creature); -                Earthquake = false; -                Earthquake_Timer = 40000+rand()%5000; + +                m_bEarthquake = false; +                m_uiEarthquake_Timer = 40000+rand()%5000;              } -        }else Earthquake_Timer -= diff; +        }else m_uiEarthquake_Timer -= uiDiff; -        //TidalWave_Timer -        if (TidalWave_Timer < diff) +        //m_uiTidalWave_Timer +        if (m_uiTidalWave_Timer < uiDiff)          {              DoCast(m_creature->getVictim(), SPELL_TIDAL_WAVE); -            TidalWave_Timer = 20000; -        }else TidalWave_Timer -= diff; +            m_uiTidalWave_Timer = 20000; +        }else m_uiTidalWave_Timer -= uiDiff; -        if (!Phase2) +        if (!m_bPhase2)          { -            //WateryGrave_Timer -            if (WateryGrave_Timer < diff) +            //m_uiWateryGrave_Timer +            if (m_uiWateryGrave_Timer < uiDiff)              {                  //Teleport 4 players under the waterfalls -                Unit *target; -                using std::set; -                set<int>list; -                set<int>::iterator itr;                  for(uint8 i = 0; i < 4; i++)                  { -                    counter = 0; -                    do{target = SelectTarget(SELECT_TARGET_RANDOM, 1, 50, true);    //target players only -                    if(counter < Playercount) -                        break; -                    if(target) itr = list.find(target->GetGUID()); -                    counter++; -                    }while(itr != list.end()); -                    if(target){list.insert(target->GetGUID()); -                    ApplyWateryGrave(target, i); +                    Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1); + +                    if (pTarget && pTarget->GetTypeId() == TYPEID_PLAYER && !pTarget->HasAuraType(SPELL_AURA_MOD_STUN) && pTarget->IsWithinDistInMap(m_creature, 45.0f)) +                    { +                        switch(i) +                        { +                            case 0: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_1,false); break; +                            case 1: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_2,false); break; +                            case 2: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_3,false); break; +                            case 3: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_4,false); break; +                        }                      }                  } -                switch(rand()%2) -                { -                    case 0: DoScriptText(SAY_SUMMON_BUBL1, m_creature); break; -                    case 1: DoScriptText(SAY_SUMMON_BUBL2, m_creature); break; -                } - +                DoScriptText(urand(0,1) ? SAY_SUMMON_BUBL1 : SAY_SUMMON_BUBL2, m_creature);                  DoScriptText(EMOTE_WATERY_GRAVE, m_creature); -                WateryGrave_Timer = 30000; -            }else WateryGrave_Timer -= diff; + +                m_uiWateryGrave_Timer = 30000; +            }else m_uiWateryGrave_Timer -= uiDiff;              //Start Phase2              if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25) -                Phase2 = true; +                m_bPhase2 = true;          }          else          { -            //WateryGlobules_Timer -            if (WateryGlobules_Timer < diff) +            //m_uiWateryGlobules_Timer +            if (m_uiWateryGlobules_Timer < uiDiff)              { -                Unit* globuletarget; -                using std::set; -                set<int>globulelist; -                set<int>::iterator itr; -                for (int8 g = 0; g < 4; g++)  //one unit cant cast more than one spell per update, so some players have to cast for us XD -                { -                    counter = 0; -                    do {globuletarget = SelectTarget(SELECT_TARGET_RANDOM, 0,50,true); -                    if(globuletarget) itr = globulelist.find(globuletarget->GetGUID()); -                    if (counter > Playercount) -                        break; -                    counter++; -                    } while (itr != globulelist.end()); -                    if(globuletarget)globulelist.insert(globuletarget->GetGUID()); -                    globuletarget->CastSpell(globuletarget, globulespell[g], true); -                }                  DoScriptText(EMOTE_WATERY_GLOBULES, m_creature); -                WateryGlobules_Timer = 25000; -            }else WateryGlobules_Timer -= diff; + +                m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_1,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_2,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_3,true); +                m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_4,false); + +                m_uiWateryGlobules_Timer = 25000; +            }else m_uiWateryGlobules_Timer -= uiDiff;          }          DoMeleeAttackIfReady(); @@ -291,67 +242,63 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI  };  //Water Globule AI -#define SPELL_GLOBULE_EXPLOSION 37871 -  struct TRINITY_DLL_DECL mob_water_globuleAI : public ScriptedAI  { -    mob_water_globuleAI(Creature *c) : ScriptedAI(c) {} +    mob_water_globuleAI(Creature* c) : ScriptedAI(c) { } -    uint32 Check_Timer; +    // timers +    uint32 m_uiCheck_Timer;      void Reset()      { -        Check_Timer = 1000; - -        m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); +        m_uiCheck_Timer = 1000;          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -        m_creature->setFaction(14);      } -    void EnterCombat(Unit *who) {} +    void Aggro(Unit* pWho) {} -    void MoveInLineOfSight(Unit *who) +    void MoveInLineOfSight(Unit* pWho)      { -        if (!who || m_creature->getVictim()) +        if (!pWho || m_creature->getVictim())              return; -        if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(who)) +        if (pWho->isTargetableForAttack() && pWho->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(pWho))          {              //no attack radius check - it attacks the first target that moves in his los -            //who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH); -            AttackStart(who); +            //pWho->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH); +            AttackStart(pWho);          }      } -    void UpdateAI(const uint32 diff) +    void UpdateAI(const uint32 uiDiff)      {          //Return since we have no target -        if (!UpdateVictim() ) +        if (!UpdateVictim())              return; -        if (Check_Timer < diff) +        if (m_uiCheck_Timer < uiDiff)          {              if (m_creature->IsWithinDistInMap(m_creature->getVictim(), 5))              { -                DoCast(m_creature->getVictim(), SPELL_GLOBULE_EXPLOSION); +                m_creature->DealDamage(m_creature->getVictim(), 4000+rand()%2000, NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_FROST, NULL, false);                  //despawn                  m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);              } -            Check_Timer = 500; -        }else Check_Timer -= diff; +            m_uiCheck_Timer = 500; +        }else m_uiCheck_Timer -= uiDiff;          //do NOT deal any melee damage to the target.      }  }; -CreatureAI* GetAI_boss_morogrim_tidewalker(Creature *_Creature) +CreatureAI* GetAI_boss_morogrim_tidewalker(Creature* pCreature)  { -    return new boss_morogrim_tidewalkerAI (_Creature); +    return new boss_morogrim_tidewalkerAI (pCreature);  } -CreatureAI* GetAI_mob_water_globule(Creature *_Creature) +CreatureAI* GetAI_mob_water_globule(Creature* pCreature)  { -    return new mob_water_globuleAI (_Creature); +    return new mob_water_globuleAI (pCreature);  }  void AddSC_boss_morogrim_tidewalker() @@ -359,13 +306,12 @@ void AddSC_boss_morogrim_tidewalker()      Script *newscript;      newscript = new Script; -    newscript->Name="boss_morogrim_tidewalker"; +    newscript->Name = "boss_morogrim_tidewalker";      newscript->GetAI = &GetAI_boss_morogrim_tidewalker;      newscript->RegisterSelf();      newscript = new Script; -    newscript->Name="mob_water_globule"; +    newscript->Name = "mob_water_globule";      newscript->GetAI = &GetAI_mob_water_globule;      newscript->RegisterSelf();  } - diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp index c8bbe986176..3143f8dfe1c 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_hydromancer_thespia.cpp @@ -45,7 +45,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI  {      boss_thespiaAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp index 50d919d3e2c..3d046da4a9d 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_mekgineer_steamrigger.cpp @@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI  {      boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } @@ -199,7 +199,7 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI  {      mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp index f84b6864641..a832cc1c938 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/boss_warlord_kalithresh.cpp @@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL mob_naga_distillerAI : public ScriptedAI  {      mob_naga_distillerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI  {      boss_warlord_kalithreshAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp index b2a58ef7ed1..a35551481fa 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/steam_vault/instance_steam_vault.cpp @@ -88,23 +88,6 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance          return false;      } -    Player* GetPlayerInMap() -    { -        Map::PlayerList const& players = instance->GetPlayers(); - -        if (!players.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) -            { -                if (Player* plr = itr->getSource()) -                    return plr; -            } -        } - -        debug_log("TSCR: Instance Steamvault: GetPlayerInMap, but PlayerList is empty!"); -        return NULL; -    } -      void OnCreatureCreate(Creature *creature, bool add)      {            switch(creature->GetEntry()) @@ -127,25 +110,17 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance      void SetData(uint32 type, uint32 data)      { -        Player *player = GetPlayerInMap(); - -        if (!player) -        { -            debug_log("TSCR: Instance Steamvault: SetData (Type: %u Data %u) cannot find any player.", type, data); -            return; -        } -          switch(type)          {              case TYPE_HYDROMANCER_THESPIA:                  if (data == SPECIAL)                  { -                    if (GameObject *_go = GameObject::GetGameObject(*player,AccessPanelHydro)) +                    if (GameObject *_go = instance->GetGameObject(AccessPanelHydro))                          _go->SetGoState(GO_STATE_ACTIVE);                      if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL)                      { -                        if (GameObject *_go = GameObject::GetGameObject(*player,MainChambersDoor)) +                        if (GameObject *_go = instance->GetGameObject(MainChambersDoor))                              _go->SetGoState(GO_STATE_ACTIVE);                      }                      debug_log("TSCR: Instance Steamvault: Access panel used."); @@ -155,12 +130,12 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance              case TYPE_MEKGINEER_STEAMRIGGER:                  if (data == SPECIAL)                  { -                    if (GameObject *_go = GameObject::GetGameObject(*player,AccessPanelMek)) +                    if (GameObject *_go = instance->GetGameObject(AccessPanelMek))                          _go->SetGoState(GO_STATE_ACTIVE);                      if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL)                      { -                     if (GameObject *_go = GameObject::GetGameObject(*player,MainChambersDoor)) +                     if (GameObject *_go = instance->GetGameObject(MainChambersDoor))                        _go->SetGoState(GO_STATE_ACTIVE);                      }                      debug_log("TSCR: Instance Steamvault: Access panel used."); diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp index 482a7169ad3..2cb9954c868 100644 --- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp +++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp @@ -148,7 +148,7 @@ struct TRINITY_DLL_DECL npc_unworthy_initiateAI : public ScriptedAI          m_creature->setFaction(7);          m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 8);          m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID  , 0); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, m_creature->GetNativeDisplayId()); +        m_creature->SetDisplayId(m_creature->GetNativeDisplayId());          event_starter = 0;          event_startet = false; @@ -183,7 +183,7 @@ struct TRINITY_DLL_DECL npc_unworthy_initiateAI : public ScriptedAI              }          } -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, modelid_dk_armor[model_counter]); +        m_creature->SetDisplayId(modelid_dk_armor[model_counter]);          m_creature->LoadEquipment(m_creature->GetEquipmentId());      } @@ -281,8 +281,7 @@ void npc_unworthy_initiateAI::UpdateAI(const uint32 diff)              Creature* trigger = m_creature->SummonCreature(29521,x,y,z,0,TEMPSUMMON_MANUAL_DESPAWN,100);              if(trigger)              { -                GameObject* go_prison = GameObject::GetGameObject((*m_creature),nearest_prison); -                if(go_prison) +                if(GameObject* go_prison = GameObject::GetGameObject((*m_creature),nearest_prison))                      go_prison->ResetDoorOrButton();                  CAST_AI(npc_unworthy_initiate_anchorAI, trigger->AI())->SetTarget(m_creature->GetGUID()); @@ -533,9 +532,7 @@ struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI                              return;                      }                      CAST_PLR(charmer)->ExitVehicle(); -                    //without this we can see npc kill the horse -                    who->setDeathState(DEAD); -                    CAST_CRE(who)->Respawn(); +                    CAST_CRE(who)->Respawn(true);                  }              }          } @@ -555,18 +552,6 @@ struct TRINITY_DLL_DECL npc_ros_dark_riderAI : public ScriptedAI  {      npc_ros_dark_riderAI(Creature *c) : ScriptedAI(c) {} -    void MoveInLineOfSight(Unit *who) -    { -        if(me->getVictim()) -            return; - -        // this should be before next one otherwise he may enter vehicle again -        if(!me->m_Vehicle && who->GetEntry() == 28782 && CAST_CRE(who)->isVehicle() && CAST_VEH(who)->HasEmptySeat(0)) -            me->EnterVehicle((Vehicle*)who); - -        ScriptedAI::MoveInLineOfSight(who); -    } -      void EnterCombat(Unit *who)      {          me->ExitVehicle(); diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp index 0335799b4e9..9dea3d1533d 100644 --- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp +++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_gruul.cpp @@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI  {      boss_gruulAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -111,8 +111,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI          {              pInstance->SetData(DATA_GRUULEVENT, DONE); -            GameObject* EncounterDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR)); -            if (EncounterDoor) +            if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GRUULDOOR)))                  EncounterDoor->SetGoState(GO_STATE_ACTIVE);                   // Open the encounter door          }      } diff --git a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp index c3dfd193776..91ded349921 100644 --- a/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp +++ b/src/bindings/scripts/scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp @@ -108,7 +108,7 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI  {      boss_high_king_maulgarAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          for(uint8 i = 0; i < 4; ++i)              Council[i] = 0;      } @@ -304,7 +304,7 @@ struct TRINITY_DLL_DECL boss_olm_the_summonerAI : public ScriptedAI  {      boss_olm_the_summonerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 DarkDecay_Timer; @@ -406,7 +406,7 @@ struct TRINITY_DLL_DECL boss_kiggler_the_crazedAI : public ScriptedAI  {      boss_kiggler_the_crazedAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 GreaterPolymorph_Timer; @@ -516,7 +516,7 @@ struct TRINITY_DLL_DECL boss_blindeye_the_seerAI : public ScriptedAI  {      boss_blindeye_the_seerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 GreaterPowerWordShield_Timer; @@ -614,7 +614,7 @@ struct TRINITY_DLL_DECL boss_krosh_firehandAI : public ScriptedAI  {      boss_krosh_firehandAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 GreaterFireball_Timer; diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp index e3ac1e418a3..e77ce3d2fdf 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_broggok.cpp @@ -24,21 +24,22 @@ EndScriptData */  #include "precompiled.h"  #include "def_blood_furnace.h" - -#define SAY_AGGRO               -1542008 - -#define SPELL_SLIME_SPRAY       30913 -#define SPELL_POISON_CLOUD      30916 -#define SPELL_POISON_BOLT       30917 - -#define SPELL_POISON            30914 +enum +{ +    SAY_AGGRO               = -1542008, +  +    SPELL_SLIME_SPRAY       = 30913, +    SPELL_POISON_CLOUD      = 30916, +    SPELL_POISON_BOLT       = 30917, +  +    SPELL_POISON            = 30914 +};  struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI  {      boss_broggokAI(Creature *c) : ScriptedAI(c)       { -        pInstance = ((ScriptedInstance*)c->GetInstanceData()); -        Reset(); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -111,7 +112,7 @@ struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI      {          if (pInstance)          { -            if (GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DOOR))) +            if (GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DOOR)))              {                  if (close == 1)                      Doors->SetGoState(GO_STATE_READY);                // Closed diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp index 4d28469bf04..63c6bc3832a 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_kelidan_the_breaker.cpp @@ -29,29 +29,32 @@ EndContentData */  #include "precompiled.h"  #include "def_blood_furnace.h" -#define SAY_WAKE                    -1542000 - -#define SAY_ADD_AGGRO_1             -1542001 -#define SAY_ADD_AGGRO_2             -1542002 -#define SAY_ADD_AGGRO_3             -1542003 - -#define SAY_KILL_1                  -1542004 -#define SAY_KILL_2                  -1542005 -#define SAY_NOVA                    -1542006 -#define SAY_DIE                     -1542007 - -#define SPELL_CORRUPTION            30938 -#define SPELL_EVOCATION             30935 -#define SPELL_BURNING_NOVA          30940 - -#define SPELL_FIRE_NOVA             33132 -#define H_SPELL_FIRE_NOVA           37371 - -#define SPELL_SHADOW_BOLT_VOLLEY    28599 -#define H_SPELL_SHADOW_BOLT_VOLLEY  40070 - -#define ENTRY_KELIDAN               17377 -#define ENTRY_CHANNELER             17653 +enum +{ +    SAY_WAKE                    = -1542000, +    SAY_ADD_AGGRO_1             = -1542001, +    SAY_ADD_AGGRO_2             = -1542002, +    SAY_ADD_AGGRO_3             = -1542003, +    SAY_KILL_1                  = -1542004, +    SAY_KILL_2                  = -1542005, +    SAY_NOVA                    = -1542006, +    SAY_DIE                     = -1542007, + +    SPELL_CORRUPTION            = 30938, +    SPELL_EVOCATION             = 30935, +  +    SPELL_FIRE_NOVA             = 33132, +    H_SPELL_FIRE_NOVA           = 37371, +  +    SPELL_SHADOW_BOLT_VOLLEY    = 28599, +    H_SPELL_SHADOW_BOLT_VOLLEY  = 40070, +  +    SPELL_BURNING_NOVA          = 30940, +    SPELL_VORTEX                = 37370, + +    ENTRY_KELIDAN               = 17377, +    ENTRY_CHANNELER             = 17653 +};  const float ShadowmoonChannelers[5][4]=  { @@ -66,8 +69,8 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI  {      boss_kelidan_the_breakerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); -        HeroicMode = m_creature->GetMap()->IsHeroic(); +        pInstance = c->GetInstanceData(); +        HeroicMode = c->GetMap()->IsHeroic();          for(int i=0; i<5; ++i)              Channelers[i] = 0;      } @@ -261,7 +264,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI      {          if (pInstance)          { -            if (GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DOOR))) +            if (GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DOOR)))              {                  if (close == 1)                      Doors->SetGoState(GO_STATE_READY);                // Closed @@ -281,18 +284,21 @@ CreatureAI* GetAI_boss_kelidan_the_breaker(Creature *_Creature)  ## mob_shadowmoon_channeler  ######*/ -#define SPELL_SHADOW_BOLT       12739 -#define H_SPELL_SHADOW_BOLT     15472 - -#define SPELL_MARK_OF_SHADOW    30937 -#define SPELL_CHANNELING        39123 +enum +{ +    SPELL_SHADOW_BOLT       = 12739, +    H_SPELL_SHADOW_BOLT     = 15472, +  +    SPELL_MARK_OF_SHADOW    = 30937, +    SPELL_CHANNELING        = 39123 +};  struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI  {      mob_shadowmoon_channelerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); -        HeroicMode = m_creature->GetMap()->IsHeroic(); +        pInstance = c->GetInstanceData(); +        HeroicMode = c->GetMap()->IsHeroic();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp index fce2e175888..97676ece79c 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/boss_the_maker.cpp @@ -24,24 +24,26 @@ EndScriptData */  #include "precompiled.h"  #include "def_blood_furnace.h" -#define SAY_AGGRO_1                 -1542009 -#define SAY_AGGRO_2                 -1542010 -#define SAY_AGGRO_3                 -1542011 -#define SAY_KILL_1                  -1542012 -#define SAY_KILL_2                  -1542013 -#define SAY_DIE                     -1542014 - -#define SPELL_ACID_SPRAY            38153                   // heroic 38973 ??? 38153 -#define SPELL_EXPLODING_BREAKER     30925 -#define SPELL_KNOCKDOWN             20276 -#define SPELL_DOMINATION            25772                   // ??? +enum +{ +    SAY_AGGRO_1                 = -1542009, +    SAY_AGGRO_2                 = -1542010, +    SAY_AGGRO_3                 = -1542011, +    SAY_KILL_1                  = -1542012, +    SAY_KILL_2                  = -1542013, +    SAY_DIE                     = -1542014, + +    SPELL_ACID_SPRAY            = 38153,                    // heroic 38973 ??? 38153 +    SPELL_EXPLODING_BREAKER     = 30925, +    SPELL_KNOCKDOWN             = 20276, +    SPELL_DOMINATION            = 25772                     // ??? +};  struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI  {      boss_the_makerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = ((ScriptedInstance*)c->GetInstanceData()); -        Reset(); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -139,7 +141,7 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI      {          if (pInstance)          { -            if (GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DOOR))) +            if (GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DOOR)))              {                  if (close == 1)                      Doors->SetGoState(GO_STATE_READY);                // Closed diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp index 2cefb3fee4c..b754247b4a4 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/blood_furnace/instance_blood_furnace.cpp @@ -53,6 +53,7 @@ struct TRINITY_DLL_DECL instance_blood_furnace : public ScriptedInstance      uint64 PrisonCell8GUID;      uint32 Encounter[ENCOUNTERS]; +    std::string str_data;      void Initialize()      { @@ -158,6 +159,19 @@ struct TRINITY_DLL_DECL instance_blood_furnace : public ScriptedInstance               case TYPE_BROGGOK_EVENT:               Encounter[1] = data;     break;               case TYPE_KELIDAN_THE_BREAKER_EVENT:   Encounter[2] = data;     break;           } + +        if (data == DONE) +        { +            OUT_SAVE_INST_DATA; + +            std::ostringstream saveStream; +            saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2]; + +            str_data = saveStream.str(); + +            SaveToDB(); +            OUT_SAVE_INST_DATA_COMPLETE; +        }      }      uint32 GetData(uint32 data) @@ -171,7 +185,31 @@ struct TRINITY_DLL_DECL instance_blood_furnace : public ScriptedInstance          return 0;      } -      + +    const char* Save() +    { +        return str_data.c_str(); +    } + +    void Load(const char* in) +    { +        if (!in) +        { +            OUT_LOAD_INST_DATA_FAIL; +            return; +        } + +        OUT_LOAD_INST_DATA(in); + +        std::istringstream loadStream(in); +        loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2]; + +        for(uint8 i = 0; i < ENCOUNTERS; ++i) +            if (Encounter[i] == IN_PROGRESS || Encounter[i] == FAIL) +                Encounter[i] = NOT_STARTED; + +        OUT_LOAD_INST_DATA_COMPLETE; +    }  }; diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp index c106924d5b7..21e88eab4c4 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/hellfire_ramparts/instance_hellfire_ramparts.cpp @@ -51,41 +51,21 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance          }      } -    Player* GetFirstPlayerInInstance() -    { -        Map::PlayerList const& pPlayers = instance->GetPlayers(); - -        if (!pPlayers.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = pPlayers.begin(); itr != pPlayers.end(); ++itr) -            { -                if (Player* pPlr = itr->getSource()) -                    return pPlr; -            } -        } - -        debug_log("TSCR: Instance Ramparts: GetFirstPlayerInInstance, but PlayerList is empty."); -        return NULL; -    } -      void DoRespawnChest()      { -        if (Player* pPlayer = GetFirstPlayerInInstance()) -        { -            uint64 uiChest; +        uint64 uiChest; -            if (instance->IsHeroic()) -                uiChest = m_uiChestHGUID; -            else -                uiChest = m_uiChestNGUID; +        if (instance->IsHeroic()) +            uiChest = m_uiChestHGUID; +        else +            uiChest = m_uiChestNGUID; -            if (GameObject* pGo = GameObject::GetGameObject(*pPlayer,uiChest)) -            { -                if (pGo->isSpawned()) -                    return; +        if (GameObject* pGo = instance->GetGameObject(uiChest)) +        { +            if (pGo->isSpawned()) +                return; -                pGo->SetRespawnTime(HOUR*IN_MILISECONDS); -            } +            pGo->SetRespawnTime(HOUR*IN_MILISECONDS);          }      } diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp index 872c074373d..6b49df203f4 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/magtheridons_lair/instance_magtheridons_lair.cpp @@ -189,7 +189,7 @@ struct TRINITY_DLL_DECL instance_magtheridons_lair : public ScriptedInstance          case DATA_COLLAPSE:              // true - collapse / false - reset              for(std::set<uint64>::iterator i = ColumnGUID.begin(); i != ColumnGUID.end(); ++i) -                HandleGameObject(*i, data); +                DoUseDoorOrButton(*i);              break;          default:              break; diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp index 0c7c651a0fa..ba59dbfe03a 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_nethekurse.cpp @@ -77,7 +77,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI  {      boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } @@ -235,7 +235,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI          if (pInstance->GetData64(DATA_NETHEKURSE_DOOR))          { -            if (GameObject *Door = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_NETHEKURSE_DOOR))) +            if (GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_NETHEKURSE_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE);          }      } @@ -304,7 +304,7 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI  {      mob_fel_orc_convertAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -318,7 +318,6 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI      void MoveInLineOfSight(Unit *who)      { -        return;      }      void EnterCombat(Unit* who) diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp index bdedc6b4fde..c40a99fa243 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp @@ -128,7 +128,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI  {      boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp index 276089a91ee..2714a0785e2 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warchief_kargath_bladefist.cpp @@ -52,7 +52,7 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI  {      boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp index a32112ed709..19046679816 100644 --- a/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/zone/hellfire_peninsula/hellfire_peninsula.cpp @@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL npc_aeranasAI : public ScriptedAI              m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);              m_creature->RemoveAllAuras();              m_creature->DeleteThreatList(); -            m_creature->CombatStop(); +            m_creature->CombatStop(true);              DoScriptText(SAY_FREE, m_creature);              return;          } diff --git a/src/bindings/scripts/scripts/zone/isle_of_queldanas/isle_of_queldanas.cpp b/src/bindings/scripts/scripts/zone/isle_of_queldanas/isle_of_queldanas.cpp index d358fbc2a86..1a79bead96c 100644 --- a/src/bindings/scripts/scripts/zone/isle_of_queldanas/isle_of_queldanas.cpp +++ b/src/bindings/scripts/scripts/zone/isle_of_queldanas/isle_of_queldanas.cpp @@ -69,7 +69,7 @@ struct TRINITY_DLL_DECL npc_converted_sentryAI : public ScriptedAI                  DoCast(m_creature, SPELL_CONVERT_CREDIT);                  if(m_creature->isPet()) -                    ((Pet*)m_creature)->SetDuration(7500); +                    CAST_PET(m_creature)->SetDuration(7500);                  Credit = true;              }else Timer -= diff;          } diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp index 08df637eb04..bbfdcf0f862 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_midnight.cpp @@ -111,7 +111,7 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI                      m_creature->GetMotionMaster()->MoveIdle();                      if (Unit *pAttumen = Unit::GetUnit(*m_creature, Attumen))                      { -                        pAttumen->SetUInt32Value(UNIT_FIELD_DISPLAYID, MOUNTED_DISPLAYID); +                        pAttumen->SetDisplayId(MOUNTED_DISPLAYID);                          pAttumen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);                          if(pAttumen->getVictim())                          { diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp index 9a8b0bf27b6..75f327d4f75 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp @@ -66,7 +66,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI          {              AddId[i] = 0;          } -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -340,7 +340,7 @@ struct TRINITY_DLL_DECL boss_moroes_guestAI : public ScriptedAI          for(uint8 i = 0; i < 4; ++i)              GuestGUID[i] = 0; -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      void Reset() diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp index f41eaadb575..45f79215409 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_nightbane.cpp @@ -60,7 +60,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI  {      boss_nightbaneAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Intro = true;      } @@ -138,9 +138,9 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI      void HandleTerraceDoors(bool open)      { -        if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_1))) +        if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_1)))              Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY); -        if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_2))) +        if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_2)))              Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);      } diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp index 66005746bbd..0501a6b6436 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_prince_malchezaar.cpp @@ -137,7 +137,7 @@ struct TRINITY_DLL_DECL netherspite_infernalAI : public ScriptedAI      {          if(spell->Id == SPELL_INFERNAL_RELAY)          { -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); +            m_creature->SetDisplayId(m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));              m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);              HellfireTimer = 4000;              CleanupTimer = 170000; @@ -157,7 +157,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI  {      boss_malchezaarAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -208,11 +208,8 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI          if(pInstance)          { -            GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)); -            if(Door) -            { +            if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE); -            }          }      } @@ -240,11 +237,8 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI          if(pInstance)          { -            GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)); -            if(Door) -            { +            if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE); -            }          }      } @@ -254,11 +248,8 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI          if(pInstance)          { -            GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)); -            if(Door) -            { +            if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)))                  Door->SetGoState(GO_STATE_READY); -            }          }      } @@ -377,7 +368,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI          if (Infernal)          { -            Infernal->SetUInt32Value(UNIT_FIELD_DISPLAYID, INFERNAL_MODEL_INVISIBLE); +            Infernal->SetDisplayId(INFERNAL_MODEL_INVISIBLE);              Infernal->setFaction(m_creature->getFaction());              if(point)                  CAST_AI(netherspite_infernalAI, Infernal->AI())->point=point; diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp index 015a19087ab..4f739520c8e 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp @@ -83,7 +83,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI  {      boss_aranAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -142,7 +142,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI              // Not in progress              pInstance->SetData(DATA_SHADEOFARAN_EVENT, NOT_STARTED); -            if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR))) +            if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE);          }      } @@ -164,7 +164,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI          {              pInstance->SetData(DATA_SHADEOFARAN_EVENT, DONE); -            if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR))) +            if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE);          }      } @@ -181,7 +181,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI          if(pInstance)          {              pInstance->SetData(DATA_SHADEOFARAN_EVENT, IN_PROGRESS); -            if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR))) +            if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))                  Door->SetGoState(GO_STATE_READY);          }      } @@ -232,7 +232,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI              {                  if(pInstance)                  { -                    if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR))) +                    if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))                          Door->SetGoState(GO_STATE_READY);                      CloseDoorTimer = 0;                  } diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp index 24981a903c4..96ba0b146b4 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_terestian_illhoof.cpp @@ -65,7 +65,7 @@ struct TRINITY_DLL_DECL mob_kilrekAI : public ScriptedAI  {      mob_kilrekAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -157,7 +157,7 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI      {          for(uint8 i = 0; i < 2; ++i)              PortalGUID[i] = 0; -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp index ec7b9b2a863..8208f320e0f 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/bosses_opera.cpp @@ -104,7 +104,7 @@ struct TRINITY_DLL_DECL boss_dorotheeAI : public ScriptedAI  {      boss_dorotheeAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -258,7 +258,7 @@ struct TRINITY_DLL_DECL boss_strawmanAI : public ScriptedAI  {      boss_strawmanAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -355,7 +355,7 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI  {      boss_tinheadAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -448,7 +448,7 @@ struct TRINITY_DLL_DECL boss_roarAI : public ScriptedAI  {      boss_roarAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -540,7 +540,7 @@ struct TRINITY_DLL_DECL boss_croneAI : public ScriptedAI  {      boss_croneAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -573,11 +573,11 @@ struct TRINITY_DLL_DECL boss_croneAI : public ScriptedAI          {              pInstance->SetData(DATA_OPERA_EVENT, DONE); -            if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +            if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))                  lDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT))) +            if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))                  rDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) +            if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))                  pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);          }      } @@ -729,7 +729,7 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI  {      boss_bigbadwolfAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -768,11 +768,11 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI          {              pInstance->SetData(DATA_OPERA_EVENT, DONE); -            if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +            if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))                  lDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT))) +            if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))                  rDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) +            if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))                  pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);          }      } @@ -920,7 +920,7 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI  {      boss_julianneAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          EntryYellTimer = 1000;          AggroYellTimer = 10000;      } @@ -1015,11 +1015,11 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI          {              pInstance->SetData(DATA_OPERA_EVENT, DONE); -            if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +            if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))                  lDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT))) +            if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))                  rDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) +            if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))                  pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);          }      } @@ -1036,7 +1036,7 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI  {      boss_romuloAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          EntryYellTimer = 8000;          AggroYellTimer = 15000;      } @@ -1104,11 +1104,11 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI          {              pInstance->SetData(DATA_OPERA_EVENT, DONE); -            if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +            if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))                  lDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT))) +            if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))                  rDoor->SetGoState(GO_STATE_ACTIVE); -            if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR))) +            if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))                  pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);          }      } @@ -1161,7 +1161,7 @@ void boss_julianneAI::DamageTaken(Unit* done_by, uint32 &damage)                  Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                  Romulo->GetMotionMaster()->Clear();                  Romulo->setDeathState(JUST_DIED); -                Romulo->CombatStop(); +                Romulo->CombatStop(true);                  Romulo->DeleteThreatList();                  Romulo->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);              } @@ -1216,7 +1216,7 @@ void boss_romuloAI::DamageTaken(Unit* done_by, uint32 &damage)                  Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                  Julianne->GetMotionMaster()->Clear();                  Julianne->setDeathState(JUST_DIED); -                Julianne->CombatStop(); +                Julianne->CombatStop(true);                  Julianne->DeleteThreatList();                  Julianne->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);              } diff --git a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp index e984bea31c2..34786712948 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp @@ -115,7 +115,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI      npc_barnesAI(Creature* c) : npc_escortAI(c)      {          RaidWiped = false; -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -148,10 +148,10 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI              Event = pInstance->GetData(DATA_OPERA_PERFORMANCE); -             if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +             if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))                  Door->SetGoState(GO_STATE_READY); -             if (GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS))) +             if (GameObject* Curtain = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))                  Curtain->SetGoState(GO_STATE_READY);          }      } @@ -180,7 +180,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI              case 5:                  if(pInstance)                  { -                    if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +                    if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))                          Door->SetGoState(GO_STATE_READY);                  }                  IsBeingEscorted = false; @@ -261,7 +261,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI                  if(!pInstance)                      return; -                if (GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS))) +                if (GameObject* Curtain = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))                      Curtain->SetGoState(GO_STATE_ACTIVE);                  CurtainTimer = 0; @@ -315,7 +315,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI          pInstance->SetData(DATA_OPERA_EVENT, IN_PROGRESS); -        if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT))) +        if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))              Door->SetGoState(GO_STATE_ACTIVE);          m_creature->CastSpell(m_creature, SPELL_TUXEDO, true); @@ -486,7 +486,7 @@ struct TRINITY_DLL_DECL npc_image_of_medivhAI : public ScriptedAI  {      npc_image_of_medivhAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp index fe62b55f0a4..692f93a91a0 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_felblood_kaelthas.cpp @@ -79,7 +79,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI  {      boss_felblood_kaelthasAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData());        Heroic = c->GetMap()->IsHeroic(); +        pInstance = c->GetInstanceData();        Heroic = c->GetMap()->IsHeroic();      }      ScriptedInstance* pInstance; @@ -130,8 +130,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI          if (pInstance)              pInstance->SetData(DATA_KAELTHAS_EVENT, 0); -            GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_DOOR)); -            if (Door) +            if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE);                        // Open the big encounter door. Close it in Aggro and open it only in JustDied(and here)                                                              // Small door opened after event are expected to be closed by default      } @@ -139,8 +138,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI      void JustDied(Unit *killer)      {          DoScriptText(SAY_DEATH, m_creature); -        GameObject* EncounterDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_KAEL_DOOR)); -        if (EncounterDoor) +        if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_DOOR)))              EncounterDoor->SetGoState(GO_STATE_ACTIVE);                   // Open the encounter door      } @@ -154,8 +152,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI      {          if (pInstance)          { -            GameObject* EncounterDoor = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_DOOR)); -            if (EncounterDoor) +            if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_DOOR)))                  EncounterDoor->SetGoState(GO_STATE_READY);               //Close the encounter door, open it in JustDied/Reset          }      } @@ -347,10 +344,10 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI                                  if (pInstance)                                  { -                                    GameObject* KaelLeft = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_STATUE_LEFT)); -                                    if (KaelLeft) KaelLeft->SetGoState(GO_STATE_ACTIVE); -                                    GameObject* KaelRight = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_STATUE_RIGHT)); -                                    if (KaelRight) KaelRight->SetGoState(GO_STATE_ACTIVE); +                                    if (GameObject* KaelLeft = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_STATUE_LEFT))) +                                        KaelLeft->SetGoState(GO_STATE_ACTIVE); +                                    if (GameObject* KaelRight = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_STATUE_RIGHT))) +                                        KaelRight->SetGoState(GO_STATE_ACTIVE);                                  }                              }else                              { @@ -450,7 +447,7 @@ struct TRINITY_DLL_DECL mob_felkael_phoenixAI : public ScriptedAI  {      mob_felkael_phoenixAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp index e101d9713c5..2a7187442cf 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp @@ -96,7 +96,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI  {      boss_priestess_delrissaAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Heroic = c->GetMap()->IsHeroic();      } @@ -231,7 +231,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI          pInstance->SetData(DATA_DELRISSA_EVENT, DONE); -        if (GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_DELRISSA_DOOR))) +        if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_DELRISSA_DOOR)))              Door->SetGoState(GO_STATE_ACTIVE);      } @@ -358,7 +358,7 @@ struct TRINITY_DLL_DECL boss_priestess_guestAI : public ScriptedAI      boss_priestess_guestAI(Creature* c) : ScriptedAI(c)      {          Group.clear(); -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          AcquireGUIDs();      } diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp index b23abd1da2a..2dcafcc2154 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_selin_fireheart.cpp @@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI  {      boss_selin_fireheartAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Crystals.clear();          //GUIDs per instance is static, so we only need to load them once. @@ -105,8 +105,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI                  }              } -            GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)); -            if (Door) +            if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE);                        // Open the big encounter door. Close it in Aggro and open it only in JustDied(and here)                                                              // Small door opened after event are expected to be closed by default              // Set Inst data for encounter @@ -187,8 +186,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI          if (pInstance)          { -            GameObject* EncounterDoor = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)); -            if (EncounterDoor) +            if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)))                  EncounterDoor->SetGoState(GO_STATE_READY);               //Close the encounter door, open it in JustDied/Reset          }      } @@ -236,12 +234,10 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI          pInstance->SetData(DATA_SELIN_EVENT, DONE);         // Encounter complete! -        GameObject* EncounterDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)); -        if (EncounterDoor) +        if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)))              EncounterDoor->SetGoState(GO_STATE_ACTIVE);                   // Open the encounter door -        GameObject* ContinueDoor = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_SELIN_DOOR)); -        if (ContinueDoor) +        if (GameObject* ContinueDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_DOOR)))              ContinueDoor->SetGoState(GO_STATE_ACTIVE);                    // Open the door leading further in          ShatterRemainingCrystals(); diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp index fb31a3783da..2465ce91e72 100644 --- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp +++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_vexallus.cpp @@ -53,7 +53,7 @@ struct  TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI  {      boss_vexallusAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData());         Heroic = c->GetMap()->IsHeroic(); +        pInstance = c->GetInstanceData();         Heroic = c->GetMap()->IsHeroic();          Heroic = c->GetMap()->IsHeroic();      } @@ -91,7 +91,7 @@ struct  TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI          {              pInstance->SetData(DATA_VEXALLUS_EVENT, DONE); -            if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_VEXALLUS_DOOR))) +            if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_VEXALLUS_DOOR)))                  Door->SetGoState(GO_STATE_ACTIVE);          }      } diff --git a/src/bindings/scripts/scripts/zone/maraudon/boss_noxxion.cpp b/src/bindings/scripts/scripts/zone/maraudon/boss_noxxion.cpp index 00b6d28d6b0..bd2b2096432 100644 --- a/src/bindings/scripts/scripts/zone/maraudon/boss_noxxion.cpp +++ b/src/bindings/scripts/scripts/zone/maraudon/boss_noxxion.cpp @@ -82,7 +82,7 @@ struct TRINITY_DLL_DECL boss_noxxionAI : public ScriptedAI              m_creature->setFaction(14);              m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);              //Noxxion model -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11172); +            m_creature->SetDisplayId(11172);              Invisible = false;              //m_creature->m_canMove = true;          } else if (Invisible) @@ -119,7 +119,7 @@ struct TRINITY_DLL_DECL boss_noxxionAI : public ScriptedAI              m_creature->setFaction(35);              m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);              // Invisible Model -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686); +            m_creature->SetDisplayId(11686);              SummonAdds(m_creature->getVictim());              SummonAdds(m_creature->getVictim());              SummonAdds(m_creature->getVictim()); diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp index c82dc52b6e6..6d6ebb6507f 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp @@ -40,7 +40,7 @@ struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI  {      boss_golemaggAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -118,7 +118,7 @@ struct TRINITY_DLL_DECL mob_core_ragerAI : public ScriptedAI  {      mob_core_ragerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 Mangle_Timer; diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp index 7fef37d24c9..b9112cf2350 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_majordomo_executus.cpp @@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_majordomoAI : public ScriptedAI  {      boss_majordomoAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_sulfuron_harbinger.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_sulfuron_harbinger.cpp index 5c61ef9225d..d5d614895dd 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_sulfuron_harbinger.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_sulfuron_harbinger.cpp @@ -39,7 +39,7 @@ struct TRINITY_DLL_DECL boss_sulfuronAI : public ScriptedAI  {      boss_sulfuronAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 Darkstrike_Timer; @@ -126,7 +126,7 @@ struct TRINITY_DLL_DECL mob_flamewaker_priestAI : public ScriptedAI  {      mob_flamewaker_priestAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 Heal_Timer; diff --git a/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp b/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp index 1254d08bf30..b0a6e7bbc58 100644 --- a/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp +++ b/src/bindings/scripts/scripts/zone/mulgore/mulgore.cpp @@ -93,8 +93,6 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI              m_creature->UpdateEntry(NPC_KYLE_FRENZIED);      } -    void Aggro(Unit* who) { } -      void SpellHit(Unit* pCaster, SpellEntry const* pSpell)      {          if (!m_creature->isInCombat() && !bEvent && pSpell->Id == SPELL_LUNCH) @@ -152,8 +150,8 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI                      case 3:                          uiEventTimer = 5000; -                        if (Unit* pUnit = Unit::GetUnit(*m_creature,uiPlayerGUID)) -                            ((Player*)pUnit)->TalkedToCreature(m_creature->GetEntry(), m_creature->GetGUID()); +                        if (Player* pUnit = Unit::GetPlayer(uiPlayerGUID)) +                            pUnit->TalkedToCreature(m_creature->GetEntry(), m_creature->GetGUID());                          m_creature->UpdateEntry(NPC_KYLE_FRIENDLY);                          break; diff --git a/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp b/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp index 1ed6b003504..22f80983084 100644 --- a/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp +++ b/src/bindings/scripts/scripts/zone/nagrand/nagrand.cpp @@ -109,6 +109,17 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);      } +    void AttackedBy(Unit* pAttacker) +    { +        if (m_creature->getVictim()) +            return; + +        if (m_creature->IsFriendlyTo(pAttacker)) +            return; + +        AttackStart(pAttacker); +    } +      void DamageTaken(Unit *done_by, uint32 & damage)      {          if (done_by->GetTypeId() == TYPEID_PLAYER && (m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 30) @@ -122,7 +133,7 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI                  m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);                  m_creature->RemoveAllAuras();                  m_creature->DeleteThreatList(); -                m_creature->CombatStop(); +                m_creature->CombatStop(true);                  m_creature->setFaction(1080);               //friendly                  m_creature->SetStandState(UNIT_STAND_STATE_SIT);                  DoScriptText(LUMP_DEFEAT, m_creature); diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp index a10d41a3bf7..4e9706f913e 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_gothik.cpp @@ -276,7 +276,7 @@ struct TRINITY_DLL_DECL mob_gothik_minionAI : public SpellAI      {          if(me->isSummon())          { -            if(Unit *owner = ((TempSummon*)me)->GetSummoner()) +            if(Unit *owner = CAST_SUM(me)->GetSummoner())                  SpellAI::JustDied(owner);          }      } diff --git a/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp b/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp index 8bfce605bc4..44e8455d41a 100644 --- a/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp +++ b/src/bindings/scripts/scripts/zone/naxxramas/boss_highlord_mograine.cpp @@ -74,7 +74,7 @@ struct TRINITY_DLL_DECL boss_highlord_mograineAI : public ScriptedAI      void InitialYell()      { -        if(!InCombat) +        if(!m_creature->isInCombat())          {              switch(rand()%3)              { diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp index 826c6087181..694fe0cc211 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_anomalus.cpp @@ -82,7 +82,7 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI              pInstance->SetData(DATA_ANOMALUS_EVENT, NOT_STARTED);      } -    void Aggro(Unit* who)  +    void EnterCombat(Unit* who)       {          DoScriptText(SAY_AGGRO, m_creature);      } diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp index 53e76fd510f..7b7f011eaab 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_keristrasza.cpp @@ -94,7 +94,7 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI          }      } -    void Aggro(Unit* who)  +    void EnterCombat(Unit* who)       {          DoScriptText(SAY_AGGRO, m_creature);          DoCast(m_creature, SPELL_INTENSE_COLD); diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp index 5abeaf6ab6f..cec5e3546e5 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_magus_telestra.cpp @@ -105,7 +105,7 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI              pInstance->SetData(DATA_MAGUS_TELESTRA_EVENT, NOT_STARTED);      } -    void Aggro(Unit* who)  +    void EnterCombat(Unit* who)       {          DoScriptText(SAY_AGGRO, m_creature);      } diff --git a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp index 266380f55e7..db9bf2317bb 100644 --- a/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp +++ b/src/bindings/scripts/scripts/zone/nexus/nexus/boss_ormorok.cpp @@ -89,7 +89,7 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI              pInstance->SetData(DATA_ORMOROK_EVENT, NOT_STARTED);      } -    void Aggro(Unit* who)  +    void EnterCombat(Unit* who)       {          DoScriptText(SAY_AGGRO, m_creature);      } diff --git a/src/bindings/scripts/scripts/zone/orgrimmar/orgrimmar.cpp b/src/bindings/scripts/scripts/zone/orgrimmar/orgrimmar.cpp index 74e7b953ad8..5aa30c22de3 100644 --- a/src/bindings/scripts/scripts/zone/orgrimmar/orgrimmar.cpp +++ b/src/bindings/scripts/scripts/zone/orgrimmar/orgrimmar.cpp @@ -101,7 +101,7 @@ struct TRINITY_DLL_DECL npc_shenthulAI : public ScriptedAI          {              if (Reset_Timer < diff)              { -                if (Player* pPlayer = (Player*)Unit::GetUnit((*m_creature),playerGUID)) +                if (Player* pPlayer = Unit::GetPlayer(playerGUID))                  {                      if (pPlayer->GetTypeId() == TYPEID_PLAYER && pPlayer->GetQuestStatus(QUEST_SHATTERED_SALUTE) == QUEST_STATUS_INCOMPLETE)                          pPlayer->FailQuest(QUEST_SHATTERED_SALUTE); diff --git a/src/bindings/scripts/scripts/zone/razorfen_kraul/instance_razorfen_kraul.cpp b/src/bindings/scripts/scripts/zone/razorfen_kraul/instance_razorfen_kraul.cpp index 93e8ce711bf..679358c6ceb 100644 --- a/src/bindings/scripts/scripts/zone/razorfen_kraul/instance_razorfen_kraul.cpp +++ b/src/bindings/scripts/scripts/zone/razorfen_kraul/instance_razorfen_kraul.cpp @@ -76,7 +76,7 @@ struct TRINITY_DLL_DECL instance_razorfen_kraul : public ScriptedInstance              return;          } -        if (GameObject *go = GameObject::GetGameObject(*player,guid)) +        if (GameObject *go = instance->GetGameObject(guid))              go->SetGoState(GOState(state));      } diff --git a/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp b/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp index fdebf81afff..b8f4bae71a7 100644 --- a/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp +++ b/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp @@ -143,7 +143,7 @@ struct TRINITY_DLL_DECL npc_deaths_head_ward_keeperAI : public ScriptedAI  {      npc_deaths_head_ward_keeperAI(Creature *c) : ScriptedAI(c)      { -        pInstance = ((ScriptedInstance*)c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Reset();      } @@ -155,10 +155,6 @@ struct TRINITY_DLL_DECL npc_deaths_head_ward_keeperAI : public ScriptedAI          QuillboarChanneling_Timer = 1500;      } -    void Aggro(Unit *who) -    { -    } -      void UpdateAI(const uint32 diff)      {          if (!m_creature->isAlive()) diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_headless_horseman.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_headless_horseman.cpp index f0a80248c19..1afd4548701 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_headless_horseman.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_headless_horseman.cpp @@ -339,7 +339,7 @@ struct TRINITY_DLL_DECL boss_headless_horsemanAI : public ScriptedAI              speed->Effect[1] = SPELL_EFFECT_APPLY_AURA;              speed->EffectApplyAuraName[1] = SPELL_AURA_MOD_CONFUSE;          }*/ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp b/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp index faa7efa53a5..aee7fa3e896 100644 --- a/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp +++ b/src/bindings/scripts/scripts/zone/scholomance/boss_jandice_barov.cpp @@ -83,7 +83,7 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI              //Become visible again              m_creature->setFaction(14);              m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11073);     //Jandice Model +            m_creature->SetDisplayId(11073);     //Jandice Model              Invisible = false;          } else if (Invisible)          { @@ -114,7 +114,7 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI              m_creature->InterruptNonMeleeSpells(false);              m_creature->setFaction(35);              m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686);  // Invisible Model +            m_creature->SetDisplayId(11686);  // Invisible Model              DoModifyThreatPercent(m_creature->getVictim(),-99);              //Summon 10 Illusions attacking random gamers diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp index fb8b14c368e..a5f8c84d918 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/instance_shadowfang_keep.cpp @@ -66,22 +66,6 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance               Encounter[i] = NOT_STARTED;      } -    Player* GetPlayerInMap() -    { -        Map::PlayerList const& players = instance->GetPlayers(); - -        if (!players.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) -            { -                if (Player* plr = itr->getSource()) -                    return plr; -            } -        } -        debug_log("TSCR: Instance Shadowfang Keep: GetPlayerInMap, but PlayerList is empty!"); -        return NULL; -    } -      void OnCreatureCreate(Creature* pCreature, bool add)      {          switch(pCreature->GetEntry()) @@ -98,35 +82,30 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance              case GO_COURTYARD_DOOR:                  DoorCourtyardGUID = go->GetGUID();                  if (Encounter[0] == DONE) -                    go->SetGoState(GO_STATE_ACTIVE); +                    DoUseDoorOrButton(DoorCourtyardGUID);                  break;              case GO_SORCERER_DOOR:                  DoorSorcererGUID = go->GetGUID();                  if (Encounter[2] == DONE) -                    go->SetGoState(GO_STATE_ACTIVE); +                    DoUseDoorOrButton(DoorSorcererGUID);                  break;              case GO_ARUGAL_DOOR:                  DoorArugalGUID = go->GetGUID();                  if (Encounter[3] == DONE) -                    go->SetGoState(GO_STATE_ACTIVE); +                    DoUseDoorOrButton(DoorArugalGUID);                  break;          }      }      void DoSpeech()      { -        Player* pPlayer = GetPlayerInMap(); +        Creature* pAda = instance->GetCreature(uiAdaGUID); +        Creature* pAsh = instance->GetCreature(uiAshGUID); -        if (pPlayer) +        if (pAda && pAda->isAlive() && pAsh && pAsh->isAlive())          { -            Unit* pAda = Unit::GetUnit(*pPlayer,uiAdaGUID); -            Unit* pAsh = Unit::GetUnit(*pPlayer,uiAshGUID); - -            if (pAda && pAda->isAlive() && pAsh && pAsh->isAlive()) -            { -                DoScriptText(SAY_BOSS_DIE_AD,pAda); -                DoScriptText(SAY_BOSS_DIE_AS,pAsh); -            } +            DoScriptText(SAY_BOSS_DIE_AD,pAda); +            DoScriptText(SAY_BOSS_DIE_AS,pAsh);          }      } @@ -136,7 +115,7 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance          {              case TYPE_FREE_NPC:                  if(data == DONE) -                    HandleGameObject(DoorCourtyardGUID,0); +                    DoUseDoorOrButton(DoorCourtyardGUID);                  Encounter[0] = data;                  break;              case TYPE_RETHILGORE: @@ -146,12 +125,12 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance                  break;              case TYPE_FENRUS:                  if(data == DONE) -                    HandleGameObject(DoorSorcererGUID,0); +                    DoUseDoorOrButton(DoorSorcererGUID);                  Encounter[2] = data;                  break;              case TYPE_NANDOS:                  if(data == DONE) -                    HandleGameObject(DoorArugalGUID,0); +                    DoUseDoorOrButton(DoorArugalGUID);                  Encounter[3] = data;                  break;          } diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp index bf7c122d452..3e8a64c8cf4 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp @@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL npc_shadowfang_prisonerAI : public npc_escortAI  {      npc_shadowfang_prisonerAI(Creature *c) : npc_escortAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          uiNpcEntry = c->GetEntry();      } diff --git a/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp b/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp index 2aae2d51e4e..de8da72593d 100644 --- a/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp +++ b/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp @@ -138,7 +138,7 @@ struct TRINITY_DLL_DECL mob_mature_netherwing_drakeAI : public ScriptedAI                      DoCast(m_creature, SPELL_JUST_EATEN);                      DoScriptText(SAY_JUST_EATEN, m_creature); -                    if (Player* pPlr = (Player*)Unit::GetUnit((*m_creature), uiPlayerGUID)) +                    if (Player* pPlr = Unit::GetPlayer(uiPlayerGUID))                          pPlr->KilledMonster(NPC_EVENT_PINGER, m_creature->GetGUID());                      Reset(); @@ -1470,17 +1470,17 @@ struct TRINITY_DLL_DECL npc_lord_illidan_stormrageAI : public ScriptedAI                  {                      if(rand()%3 == 1 && FelguardCount<2)                      { -                        Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,18654); +                        Spawn->SetDisplayId(18654);                          ++FelguardCount;                      }                      else if(DreadlordCount < 3)                      { -                        Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,19991); +                        Spawn->SetDisplayId(19991);                          ++DreadlordCount;                      }                      else if(FelguardCount<2)                      { -                        Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,18654); +                        Spawn->SetDisplayId(18654);                          ++FelguardCount;                      }                  } diff --git a/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp b/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp index 3182a56926c..c952c1057f7 100644 --- a/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp +++ b/src/bindings/scripts/scripts/zone/stormwind/stormwind_city.cpp @@ -64,58 +64,67 @@ bool GossipSelect_npc_archmage_malin(Player *player, Creature *_Creature, uint32  ## npc_bartleby  ######*/ +enum +{ +    FACTION_ENEMY       = 168, +    QUEST_BEAT          = 1640 +}; +  struct TRINITY_DLL_DECL npc_bartlebyAI : public ScriptedAI  { -    npc_bartlebyAI(Creature *c) : ScriptedAI(c) {} +    npc_bartlebyAI(Creature *c) : ScriptedAI(c) +    { +        m_uiNormalFaction = c->getFaction(); +    } -    uint64 PlayerGUID; +    uint32 m_uiNormalFaction;      void Reset()      { -        m_creature->setFaction(11); - -        PlayerGUID = 0; +        if (m_creature->getFaction() != m_uiNormalFaction) +            m_creature->setFaction(m_uiNormalFaction);      } -    void JustDied(Unit *who) +    void AttackedBy(Unit* pAttacker)      { -        m_creature->setFaction(11); +        if (m_creature->getVictim()) +            return; + +        if (m_creature->IsFriendlyTo(pAttacker)) +            return; + +        AttackStart(pAttacker);      } -    void DamageTaken(Unit *done_by, uint32 & damage) +    void Aggro(Unit *who) { } + +    void DamageTaken(Unit* pDoneBy, uint32 &uiDamage)      { -        if(damage > m_creature->GetHealth() || ((m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 15)) +        if (uiDamage > m_creature->GetHealth() || ((m_creature->GetHealth() - uiDamage)*100 / m_creature->GetMaxHealth() < 15))          {              //Take 0 damage -            damage = 0; - -            if (done_by->GetTypeId() == TYPEID_PLAYER && done_by->GetGUID() == PlayerGUID) -            { -                CAST_PLR(done_by)->AttackStop(); -                CAST_PLR(done_by)->AreaExploredOrEventHappens(1640); -            } -            m_creature->CombatStop(); +            uiDamage = 0; + +            if (pDoneBy->GetTypeId() == TYPEID_PLAYER) +                ((Player*)pDoneBy)->AreaExploredOrEventHappens(QUEST_BEAT);              EnterEvadeMode();          }      } - -    void EnterCombat(Unit *who) {}  }; -bool QuestAccept_npc_bartleby(Player *player, Creature *_Creature, Quest const *_Quest) +bool QuestAccept_npc_bartleby(Player* pPlayer, Creature* pCreature, Quest const* pQuest)  { -    if(_Quest->GetQuestId() == 1640) +    if (pQuest->GetQuestId() == QUEST_BEAT)      { -        _Creature->setFaction(168); -        CAST_AI(npc_bartlebyAI, _Creature->AI())->PlayerGUID = player->GetGUID(); -        CAST_AI(npc_bartlebyAI, _Creature->AI())->AttackStart(player); +        pCreature->setFaction(FACTION_ENEMY); +        ((npc_bartlebyAI*)pCreature->AI())->AttackStart(pPlayer);      }      return true;  } -CreatureAI* GetAI_npc_bartleby(Creature *_creature) +CreatureAI* GetAI_npc_bartleby(Creature* pCreature)  { -    return new npc_bartlebyAI(_creature); +    return new npc_bartlebyAI(pCreature);  }  /*###### @@ -130,31 +139,44 @@ enum  struct TRINITY_DLL_DECL npc_dashel_stonefistAI : public ScriptedAI  { -    npc_dashel_stonefistAI(Creature *c) : ScriptedAI(c) { uiNormFaction = c->getFaction(); } +    npc_dashel_stonefistAI(Creature *c) : ScriptedAI(c) +    { +        m_uiNormalFaction = c->getFaction(); +    } -    uint32 uiNormFaction; +    uint32 m_uiNormalFaction;      void Reset()      { -        m_creature->setFaction(uiNormFaction); +        if (m_creature->getFaction() != m_uiNormalFaction) +            m_creature->setFaction(m_uiNormalFaction);      } -    void DamageTaken(Unit *done_by, uint32 & damage) +    void AttackedBy(Unit* pAttacker)      { -        if ((damage > m_creature->GetHealth()) || (m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 15) +        if (m_creature->getVictim()) +            return; + +        if (m_creature->IsFriendlyTo(pAttacker)) +            return; + +        AttackStart(pAttacker); +    } + +    void Aggro(Unit *who) {} + +    void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) +    { +        if (uiDamage > m_creature->GetHealth() || ((m_creature->GetHealth() - uiDamage)*100 / m_creature->GetMaxHealth() < 15))          { -            //Take 0 damage -            damage = 0; +            uiDamage = 0; -            if (done_by->GetTypeId() == TYPEID_PLAYER) -                CAST_PLR(done_by)->AreaExploredOrEventHappens(QUEST_MISSING_DIPLO_PT8); +            if (pDoneBy->GetTypeId() == TYPEID_PLAYER) +                ((Player*)pDoneBy)->AreaExploredOrEventHappens(QUEST_MISSING_DIPLO_PT8); -            //m_creature->CombatStop();              EnterEvadeMode();          }      } - -    void EnterCombat(Unit *who) {}  };  bool QuestAccept_npc_dashel_stonefist(Player* pPlayer, Creature* pCreature, Quest const* pQuest) diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_dathrohan_balnazzar.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_dathrohan_balnazzar.cpp index 8372393f2f7..30c8eb0ae2c 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_dathrohan_balnazzar.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_dathrohan_balnazzar.cpp @@ -112,7 +112,7 @@ struct TRINITY_DLL_DECL boss_dathrohan_balnazzarAI : public ScriptedAI          //        MindControl_Timer = 10000;          Transformed = false; -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,10545); +        m_creature->SetDisplayId(10545);          m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.00f);      } @@ -207,7 +207,7 @@ struct TRINITY_DLL_DECL boss_dathrohan_balnazzarAI : public ScriptedAI              {                  //Cast                  DoCast(m_creature,SPELL_BALNAZZARTRANSFORM); //restore hp, mana and stun -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,10691); //then change disaply id +                m_creature->SetDisplayId(10691); //then change disaply id                  m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 3.00f); //then, change size                  Transformed = true;              } diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp index d65390ab6d7..670b7bc75a2 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_magistrate_barthilas.cpp @@ -56,9 +56,9 @@ struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI          AngerCount = 0;          if (m_creature->isAlive()) -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NORMAL); +            m_creature->SetDisplayId(MODEL_NORMAL);          else -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN); +            m_creature->SetDisplayId(MODEL_HUMAN);      }      void MoveInLineOfSight(Unit *who) @@ -70,7 +70,7 @@ struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI      void JustDied(Unit* Killer)      { -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN); +        m_creature->SetDisplayId(MODEL_HUMAN);      }      void EnterCombat(Unit *who) diff --git a/src/bindings/scripts/scripts/zone/stratholme/boss_order_of_silver_hand.cpp b/src/bindings/scripts/scripts/zone/stratholme/boss_order_of_silver_hand.cpp index 316cbaef9d3..4405a50461b 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/boss_order_of_silver_hand.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/boss_order_of_silver_hand.cpp @@ -45,7 +45,7 @@ struct TRINITY_DLL_DECL boss_silver_hand_bossesAI : public ScriptedAI  {      boss_silver_hand_bossesAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp index 71d9b66aa4c..523b117181c 100644 --- a/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp +++ b/src/bindings/scripts/scripts/zone/stratholme/instance_stratholme.cpp @@ -102,23 +102,6 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance          abomnationGUID.clear();      } -    Player* GetPlayerInMap() -    { -        Map::PlayerList const& players = instance->GetPlayers(); - -        if (!players.isEmpty()) -        { -            for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) -            { -                if (Player* plr = itr->getSource()) -                    return plr; -            } -        } - -        debug_log("TSCR: Instance Stratholme: GetPlayerInMap, but PlayerList is empty!"); -        return NULL; -    } -      bool StartSlaugtherSquare()      {          //change to DONE when crystals implemented @@ -136,12 +119,10 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance      //if withRestoreTime true, then newState will be ignored and GO should be restored to original state after 10 seconds      void UpdateGoState(uint64 goGuid, uint32 newState, bool withRestoreTime)      { -        Player *player = GetPlayerInMap(); - -        if (!player || !goGuid) +        if (!goGuid)              return; -        if (GameObject *go = GameObject::GetGameObject(*player, goGuid)) +        if (GameObject *go = instance->GetGameObject(goGuid))          {              if (withRestoreTime)                  go->UseDoorOrButton(10); @@ -185,14 +166,6 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance      void SetData(uint32 type, uint32 data)      { -        Player *player = GetPlayerInMap(); - -        if (!player) -        { -            debug_log("TSCR: Instance Stratholme: SetData (Type: %u Data %u) cannot find any player.", type, data); -            return; -        } -          switch(type)          {          case TYPE_BARON_RUN: @@ -208,8 +181,10 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance                  //may add code to remove aura from players, but in theory the time should be up already and removed.                  break;              case DONE: -                if (Unit *t = Unit::GetUnit(*player, ysidaTriggerGUID)) -                    t->SummonCreature(C_YSIDA,t->GetPositionX(),t->GetPositionY(),t->GetPositionZ(),t->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,1800000); +                if (Creature* pYsidaT = instance->GetCreature(ysidaTriggerGUID)) +                    pYsidaT->SummonCreature(C_YSIDA, +                    pYsidaT->GetPositionX(),pYsidaT->GetPositionY(),pYsidaT->GetPositionZ(),pYsidaT->GetOrientation(), +                    TEMPSUMMON_TIMED_DESPAWN,1800000);                  BaronRun_Timer = 0;                  break;              } @@ -218,21 +193,21 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance          case TYPE_BARONESS:              Encounter[1] = data;              if (data == IN_PROGRESS) -                UpdateGoState(ziggurat1GUID,0,false); +                UpdateGoState(ziggurat1GUID,GO_STATE_ACTIVE,false);              if (data == IN_PROGRESS)                    //change to DONE when crystals implemented                  StartSlaugtherSquare();              break;          case TYPE_NERUB:              Encounter[2] = data;              if (data == IN_PROGRESS) -                UpdateGoState(ziggurat2GUID,0,false); +                UpdateGoState(ziggurat2GUID,GO_STATE_ACTIVE,false);              if (data == IN_PROGRESS)                    //change to DONE when crystals implemented                  StartSlaugtherSquare();              break;          case TYPE_PALLID:              Encounter[3] = data;              if (data == IN_PROGRESS) -                UpdateGoState(ziggurat3GUID,0,false); +                UpdateGoState(ziggurat3GUID,GO_STATE_ACTIVE,false);              if (data == IN_PROGRESS)                    //change to DONE when crystals implemented                  StartSlaugtherSquare();              break; @@ -240,14 +215,14 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance              if (data == IN_PROGRESS)              {                  if (Encounter[4] != IN_PROGRESS) -                    UpdateGoState(portGauntletGUID,1,false); +                    UpdateGoState(portGauntletGUID,GO_STATE_READY,false);                  uint32 count = abomnationGUID.size();                  for(std::set<uint64>::iterator i = abomnationGUID.begin(); i != abomnationGUID.end(); ++i)                  { -                    if (Unit* abom = Unit::GetUnit(*player, *i)) +                    if (Creature* pAbom = instance->GetCreature(*i))                      { -                        if (!abom->isAlive()) +                        if (!pAbom->isAlive())                              --count;                      }                  } @@ -256,9 +231,12 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance                  {                      //a bit itchy, it should close the door after 10 secs, but it doesn't. skipping it for now.                      //UpdateGoState(ziggurat4GUID,0,true); -                    player->SummonCreature(C_RAMSTEIN,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); +                    if (Creature* pBaron = instance->GetCreature(baronGUID)) +                        pBaron->SummonCreature(C_RAMSTEIN,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000);                      debug_log("TSCR: Instance Stratholme: Ramstein spawned."); -                } else debug_log("TSCR: Instance Stratholme: %u Abomnation left to kill.",count); +                } +                else +                    debug_log("TSCR: Instance Stratholme: %u Abomnation left to kill.",count);              }              if (data == DONE)              { @@ -272,22 +250,22 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance              {                  if (GetData(TYPE_BARON_RUN) == IN_PROGRESS)                  { -                    if (Group *pGroup = player->GetGroup()) +                    Map::PlayerList const& players = instance->GetPlayers(); + +                    if (!players.isEmpty())                      { -                        for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next()) +                        for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)                          { -                            Player* pGroupie = itr->getSource(); -                            if (!pGroupie) -                                continue; - -                            if (pGroupie->HasAura(SPELL_BARON_ULTIMATUM)) -                                pGroupie->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); +                            if (Player* pPlayer = itr->getSource()) +                            { +                                if (pPlayer->HasAura(SPELL_BARON_ULTIMATUM)) +                                    pPlayer->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); + +                                if (pPlayer->GetQuestStatus(QUEST_DEAD_MAN_PLEA) == QUEST_STATUS_INCOMPLETE) +                                    pPlayer->AreaExploredOrEventHappens(QUEST_DEAD_MAN_PLEA); +                            }                          } -                    } else if (player->HasAura(SPELL_BARON_ULTIMATUM)) -                        player->RemoveAurasDueToSpell(SPELL_BARON_ULTIMATUM); - -                    if (Unit *temp = Unit::GetUnit(*player,GetData64(DATA_BARON))) -                        player->GroupEventHappens(QUEST_DEAD_MAN_PLEA,temp); +                    }                      SetData(TYPE_BARON_RUN,DONE);                  } @@ -365,13 +343,13 @@ struct TRINITY_DLL_DECL instance_stratholme : public ScriptedInstance          {              if (SlaugtherSquare_Timer <= diff)              { -                if (Player *p = GetPlayerInMap()) +                if (Creature* pBaron = instance->GetCreature(baronGUID))                  {                      for(uint8 i = 0; i < 4; i++) -                        p->SummonCreature(C_BLACK_GUARD,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); +                        pBaron->SummonCreature(C_BLACK_GUARD,4032.84,-3390.24,119.73,4.71,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,1800000); -                    UpdateGoState(ziggurat4GUID,0,false); -                    UpdateGoState(ziggurat5GUID,0,false); +                    UpdateGoState(ziggurat4GUID,GO_STATE_ACTIVE,false); +                    UpdateGoState(ziggurat5GUID,GO_STATE_ACTIVE,false);                      debug_log("TSCR: Instance Stratholme: Black guard sentries spawned. Opening gates to baron.");                  }                  SlaugtherSquare_Timer = 0; diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp index d06873bc0bf..081c83e5977 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_brutallus.cpp @@ -67,7 +67,7 @@ enum Spells  struct TRINITY_DLL_DECL boss_brutallusAI : public ScriptedAI  {      boss_brutallusAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp index 92099f70ee6..10cf91a0c28 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_eredar_twins.cpp @@ -94,12 +94,11 @@ enum Creatures  struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI  {      boss_sacrolashAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; -    bool InCombat;      bool SisterDeath;      bool Enraged; @@ -112,7 +111,6 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI      void Reset()      { -        InCombat = false;          Enraged = false;          if(pInstance) @@ -127,12 +125,11 @@ struct TRINITY_DLL_DECL boss_sacrolashAI : public ScriptedAI                      if(Temp->getVictim())                      {                          m_creature->getThreatManager().addThreat(Temp->getVictim(),0.0f); -                        InCombat = true;                      }                  }          } -        if(!InCombat) +        if(!m_creature->isInCombat())          {              ShadowbladesTimer = 10000;              ShadownovaTimer = 30000; @@ -354,13 +351,12 @@ CreatureAI* GetAI_boss_sacrolash(Creature *_Creature)  struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI  {      boss_alythessAI(Creature *c) : Scripted_NoMovementAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          IntroStepCounter = 10;      }      ScriptedInstance *pInstance; -    bool InCombat;      bool SisterDeath;      bool Enraged; @@ -376,7 +372,6 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI      void Reset()      { -        InCombat = false;          Enraged = false;          if(pInstance) @@ -391,12 +386,11 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI                      if(Temp->getVictim())                      {                          m_creature->getThreatManager().addThreat(Temp->getVictim(),0.0f); -                        InCombat = true;                      }                  }          } -        if(!InCombat) +        if(!m_creature->isInCombat())          {              ConflagrationTimer = 45000;              BlazeTimer = 100; @@ -430,7 +424,7 @@ struct TRINITY_DLL_DECL boss_alythessAI : public Scripted_NoMovementAI      void AttackStart(Unit *who)      { -        if (!InCombat) +        if (!m_creature->isInCombat())          {              Scripted_NoMovementAI::AttackStart(who);          } diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp index f15a7742a8c..25e9d46dfc1 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_felmyst.cpp @@ -127,7 +127,7 @@ static EventFelmyst MaxTimer[]=  struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI  {      boss_felmystAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          // wait for core patch be accepted          /*SpellEntry *TempSpell = GET_SPELL(SPELL_ENCAPSULATE_EFFECT); diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp index 600f4906ca5..8033148d4cd 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kalecgos.cpp @@ -102,7 +102,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI  {      boss_kalecgosAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          SathGUID = 0;          DoorGUID = 0;      } @@ -136,8 +136,8 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI          Unit *Sath = Unit::GetUnit(*m_creature,SathGUID);          if(Sath) CAST_CRE(Sath)->AI()->EnterEvadeMode(); -        GameObject *Door = GameObject::GetGameObject(*m_creature, DoorGUID); -        if(Door) Door->SetLootState(GO_JUST_DEACTIVATED); +        if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID))) +            Door->SetLootState(GO_JUST_DEACTIVATED);          m_creature->setFaction(14);          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); @@ -169,8 +169,8 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI      {          m_creature->SetStandState(UNIT_STAND_STATE_STAND);          DoScriptText(SAY_EVIL_AGGRO, m_creature); -        GameObject *Door = GameObject::GetGameObject(*m_creature, DoorGUID); -        if(Door) Door->SetLootState(GO_ACTIVATED); +        if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID))) +            Door->SetLootState(GO_ACTIVATED);          DoZoneInCombat();          if(pInstance) @@ -250,7 +250,7 @@ struct TRINITY_DLL_DECL boss_sathrovarrAI : public ScriptedAI  {      boss_sathrovarrAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          KalecGUID = 0;          KalecgosGUID = 0;      } @@ -458,7 +458,7 @@ struct TRINITY_DLL_DECL boss_kalecAI : public ScriptedAI      bool isEnraged; // if demon is enraged      boss_kalecAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      void Reset() @@ -544,8 +544,8 @@ void boss_kalecgosAI::UpdateAI(const uint32 diff)              m_creature->RemoveAllAuras();              m_creature->DeleteThreatList();              m_creature->CombatStop(); -            GameObject *Door = GameObject::GetGameObject(*m_creature, DoorGUID); -            if(Door) Door->SetLootState(GO_JUST_DEACTIVATED); +            if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DoorGUID))) +                Door->SetLootState(GO_JUST_DEACTIVATED);              TalkSequence++;          }          if(TalkTimer <= diff) diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kiljaeden.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kiljaeden.cpp index caf39318dd7..360ae55bd5e 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kiljaeden.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_kiljaeden.cpp @@ -296,7 +296,7 @@ bool GOHello_go_orb_of_the_blue_flight(Player *plr, GameObject* go)  struct TRINITY_DLL_DECL boss_kalecgos_kjAI : public ScriptedAI  {      boss_kalecgos_kjAI(Creature* c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      GameObject* Orb[4]; @@ -337,7 +337,7 @@ struct TRINITY_DLL_DECL boss_kalecgos_kjAI : public ScriptedAI              return;          uint8 i = 0;          for(std::list<GameObject*>::iterator itr = orbList.begin(); itr != orbList.end(); ++itr, ++i){ -            Orb[i] = GameObject::GetGameObject(*m_creature, (*itr)->GetGUID()); +            Orb[i] = pInstance->instance->GetGameObject(pInstance->GetData64((*itr)->GetGUID()));          }      } @@ -409,7 +409,7 @@ CreatureAI* GetAI_boss_kalecgos_kj(Creature *_Creature)  struct TRINITY_DLL_DECL boss_kiljaedenAI : public Scripted_NoMovementAI  {      boss_kiljaedenAI(Creature* c) : Scripted_NoMovementAI(c), Summons(m_creature){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -724,7 +724,7 @@ CreatureAI* GetAI_boss_kiljaeden(Creature *_Creature)  struct TRINITY_DLL_DECL mob_kiljaeden_controllerAI : public Scripted_NoMovementAI  {      mob_kiljaeden_controllerAI(Creature* c) : Scripted_NoMovementAI(c), Summons(m_creature){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -813,7 +813,7 @@ CreatureAI* GetAI_mob_kiljaeden_controller(Creature *_Creature)  struct TRINITY_DLL_DECL mob_hand_of_the_deceiverAI : public ScriptedAI  {      mob_hand_of_the_deceiverAI(Creature* c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -1035,7 +1035,7 @@ CreatureAI* GetAI_mob_armageddon(Creature *_Creature)  struct TRINITY_DLL_DECL mob_shield_orbAI : public ScriptedAI  {      mob_shield_orbAI(Creature* c) : ScriptedAI(c) { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      bool PointReached; diff --git a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_muru.cpp b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_muru.cpp index cd53ca034f4..b81f602d7d3 100644 --- a/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_muru.cpp +++ b/src/bindings/scripts/scripts/zone/sunwell_plateau/boss_muru.cpp @@ -116,7 +116,7 @@ uint32 EnrageTimer = 600000;  struct TRINITY_DLL_DECL boss_entropiusAI : public ScriptedAI  {      boss_entropiusAI(Creature *c) : ScriptedAI(c), Summons(m_creature){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Combat = false;      } @@ -202,7 +202,7 @@ CreatureAI* GetAI_boss_entropius(Creature *_Creature)  struct TRINITY_DLL_DECL boss_muruAI : public Scripted_NoMovementAI  {      boss_muruAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -343,7 +343,7 @@ CreatureAI* GetAI_boss_muru(Creature *_Creature)  struct TRINITY_DLL_DECL npc_muru_portalAI : public Scripted_NoMovementAI  {      npc_muru_portalAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -406,7 +406,7 @@ CreatureAI* GetAI_npc_muru_portal(Creature *_Creature)  struct TRINITY_DLL_DECL npc_dark_fiendAI : public ScriptedAI  {      npc_dark_fiendAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -460,7 +460,7 @@ CreatureAI* GetAI_npc_dark_fiend(Creature *_Creature)  struct TRINITY_DLL_DECL npc_void_sentinelAI : public ScriptedAI  {      npc_void_sentinelAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -511,7 +511,7 @@ CreatureAI* GetAI_npc_void_sentinel(Creature *_Creature)  struct TRINITY_DLL_DECL npc_blackholeAI : public ScriptedAI  {      npc_blackholeAI(Creature *c) : ScriptedAI(c){ -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp b/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp index cefca8902d3..089d4eaae4f 100644 --- a/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp +++ b/src/bindings/scripts/scripts/zone/tanaris/tanaris.cpp @@ -152,34 +152,34 @@ struct TRINITY_DLL_DECL npc_custodian_of_timeAI : public npc_escortAI      void WaypointReached(uint32 i)      { -        Unit *pTemp = Unit::GetUnit(*m_creature,PlayerGUID); -        if( !pTemp ) +        Player *pPlayer = Unit::GetPlayer(PlayerGUID); +        if( !pPlayer )              return;          switch( i )          { -            case 2: DoScriptText(WHISPER_CUSTODIAN_1, m_creature, pTemp); break; -            case 3: DoScriptText(WHISPER_CUSTODIAN_2, m_creature, pTemp); break; -            case 4: DoScriptText(WHISPER_CUSTODIAN_3, m_creature, pTemp); break; -            case 5: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; -            case 7: DoScriptText(WHISPER_CUSTODIAN_5, m_creature, pTemp); break; -            case 8: DoScriptText(WHISPER_CUSTODIAN_6, m_creature, pTemp); break; -            case 9: DoScriptText(WHISPER_CUSTODIAN_7, m_creature, pTemp); break; -            case 10: DoScriptText(WHISPER_CUSTODIAN_8, m_creature, pTemp); break; -            case 11: DoScriptText(WHISPER_CUSTODIAN_9, m_creature, pTemp); break; -            case 12: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; -            case 15: DoScriptText(WHISPER_CUSTODIAN_10, m_creature, pTemp); break; -            case 16: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; -            case 18: DoScriptText(WHISPER_CUSTODIAN_11, m_creature, pTemp); break; -            case 19: DoScriptText(WHISPER_CUSTODIAN_12, m_creature, pTemp); break; -            case 20: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; -            case 24: DoScriptText(WHISPER_CUSTODIAN_13, m_creature, pTemp); break; -            case 25: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pTemp); break; -            case 26: -                DoScriptText(WHISPER_CUSTODIAN_14, m_creature, pTemp); -                DoCast(pTemp,34883); -                //below here is temporary workaround, to be removed when spell works properly -                CAST_PLR(pTemp)->AreaExploredOrEventHappens(10277); +            case 0: DoScriptText(WHISPER_CUSTODIAN_1, m_creature, pPlayer); break; +            case 1: DoScriptText(WHISPER_CUSTODIAN_2, m_creature, pPlayer); break; +            case 2: DoScriptText(WHISPER_CUSTODIAN_3, m_creature, pPlayer); break; +            case 3: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pPlayer); break; +            case 5: DoScriptText(WHISPER_CUSTODIAN_5, m_creature, pPlayer); break; +            case 6: DoScriptText(WHISPER_CUSTODIAN_6, m_creature, pPlayer); break; +            case 7: DoScriptText(WHISPER_CUSTODIAN_7, m_creature, pPlayer); break; +            case 8: DoScriptText(WHISPER_CUSTODIAN_8, m_creature, pPlayer); break; +            case 9: DoScriptText(WHISPER_CUSTODIAN_9, m_creature, pPlayer); break; +            case 10: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pPlayer); break; +            case 13: DoScriptText(WHISPER_CUSTODIAN_10, m_creature, pPlayer); break; +            case 14: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pPlayer); break; +            case 16: DoScriptText(WHISPER_CUSTODIAN_11, m_creature, pPlayer); break; +            case 17: DoScriptText(WHISPER_CUSTODIAN_12, m_creature, pPlayer); break; +            case 18: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pPlayer); break; +            case 22: DoScriptText(WHISPER_CUSTODIAN_13, m_creature, pPlayer); break; +            case 23: DoScriptText(WHISPER_CUSTODIAN_4, m_creature, pPlayer); break; +            case 24: +                DoScriptText(WHISPER_CUSTODIAN_14, m_creature, pPlayer); +                DoCast(pPlayer, 34883); +                // below here is temporary workaround, to be removed when spell works properly +                pPlayer->AreaExploredOrEventHappens(10277);                  break;          }      } @@ -191,7 +191,7 @@ struct TRINITY_DLL_DECL npc_custodian_of_timeAI : public npc_escortAI          if( who->GetTypeId() == TYPEID_PLAYER )          { -            if( CAST_PLR(who)->HasAura(34877) && CAST_PLR(who)->GetQuestStatus(10277) == QUEST_STATUS_INCOMPLETE ) +            if( who->HasAura(34877) && CAST_PLR(who)->GetQuestStatus(10277) == QUEST_STATUS_INCOMPLETE )              {                  float Radius = 10.0;                  if( m_creature->IsWithinDistInMap(who, Radius) ) diff --git a/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp b/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp index fb376795119..eff160843de 100644 --- a/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp +++ b/src/bindings/scripts/scripts/zone/teldrassil/teldrassil.cpp @@ -73,10 +73,9 @@ struct TRINITY_DLL_DECL npc_mistAI : public ScriptedAI      void EnterEvadeMode()      { -        m_creature->InterruptNonMeleeSpells(true);          m_creature->RemoveAllAuras();          m_creature->DeleteThreatList(); -        m_creature->CombatStop(); +        m_creature->CombatStop(true);          m_creature->LoadCreaturesAddon();          if (m_creature->isAlive()) diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp index 0392437eeb5..2be8a7fdb39 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/arcatraz.cpp @@ -63,7 +63,7 @@ struct TRINITY_DLL_DECL npc_millhouse_manastormAI : public ScriptedAI  {      npc_millhouse_manastormAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -251,7 +251,7 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI  {      npc_warden_mellicharAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; @@ -305,7 +305,7 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI          if( pInstance )          {              pInstance->SetData(TYPE_HARBINGERSKYRISS,IN_PROGRESS); -            if (GameObject* Sphere = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_SPHERE_SHIELD))) +            if (GameObject* Sphere = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD)))                  Sphere->SetGoState(GO_STATE_READY);              IsRunning = true;          } @@ -346,7 +346,7 @@ struct TRINITY_DLL_DECL npc_warden_mellicharAI : public ScriptedAI                  case 2:                      DoCast(m_creature,SPELL_TARGET_ALPHA);                      pInstance->SetData(TYPE_WARDEN_1,IN_PROGRESS); -                    if (GameObject *Sphere = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_SPHERE_SHIELD))) +                    if (GameObject *Sphere = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD)))                          Sphere->SetGoState(GO_STATE_READY);                      break;                  case 3: diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp index 37e12c60b2e..e0488bca7ce 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/arcatraz/boss_harbinger_skyriss.cpp @@ -57,7 +57,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI  {      boss_harbinger_skyrissAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();          Intro = false;      } @@ -162,7 +162,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyrissAI : public ScriptedAI                  {                      case 1:                           DoScriptText(SAY_INTRO, m_creature); -                        if (GameObject* Sphere = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_SPHERE_SHIELD))) +                        if (GameObject* Sphere = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SPHERE_SHIELD)))                              Sphere->SetGoState(GO_STATE_ACTIVE);                          ++Intro_Phase;                          Intro_Timer = 25000; @@ -279,7 +279,7 @@ struct TRINITY_DLL_DECL boss_harbinger_skyriss_illusionAI : public ScriptedAI  {      boss_harbinger_skyriss_illusionAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp index 69abca68dff..f789cb8a75f 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/botanica/boss_laj.cpp @@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI      void Reset()      { -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_DEFAULT); +        m_creature->SetDisplayId(MODEL_DEFAULT);          m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);          m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);          m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false); @@ -74,7 +74,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI          switch(rand()%5)          {              case 0: -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_DEFAULT); +                m_creature->SetDisplayId(MODEL_DEFAULT);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false); @@ -82,7 +82,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);                  break;              case 1: -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_ARCANE); +                m_creature->SetDisplayId(MODEL_ARCANE);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false); @@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);                  break;              case 2: -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_FIRE); +                m_creature->SetDisplayId(MODEL_FIRE);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); @@ -98,7 +98,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);                  break;              case 3: -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_FROST); +                m_creature->SetDisplayId(MODEL_FROST);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false); @@ -106,7 +106,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);                  break;              case 4: -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_NATURE); +                m_creature->SetDisplayId(MODEL_NATURE);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);                  m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false); diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp index 6a927191322..ca04a00af95 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_alar.cpp @@ -69,7 +69,7 @@ struct TRINITY_DLL_DECL boss_alarAI : public ScriptedAI  {      boss_alarAI(Creature *c) : ScriptedAI(c)      { -        pInstance =(c->GetInstanceData()); +        pInstance =c->GetInstanceData();          DefaultMoveSpeedRate = m_creature->GetSpeedRate(MOVE_RUN);      } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp index f886ecae224..533d67d70be 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_astromancer.cpp @@ -72,7 +72,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI  {      boss_high_astromancer_solarianAI(Creature *c) : ScriptedAI(c), Summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          defaultarmor = m_creature->GetArmor();          defaultsize = m_creature->GetFloatValue(OBJECT_FIELD_SCALE_X); @@ -129,7 +129,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);          m_creature->SetVisibility(VISIBILITY_ON);          m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN); +        m_creature->SetDisplayId(MODEL_HUMAN);          Summons.DespawnAll();      } @@ -155,7 +155,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI      void JustDied(Unit *victim)      {          m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN); +        m_creature->SetDisplayId(MODEL_HUMAN);          DoScriptText(SAY_DEATH, m_creature);          if(pInstance) @@ -381,7 +381,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI              DoScriptText(SAY_VOIDA, m_creature);              DoScriptText(SAY_VOIDB, m_creature);              m_creature->SetArmor(WV_ARMOR); -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_VOIDWALKER); +            m_creature->SetDisplayId(MODEL_VOIDWALKER);              m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize*2.5f);          } @@ -393,7 +393,7 @@ struct TRINITY_DLL_DECL mob_solarium_priestAI : public ScriptedAI  {      mob_solarium_priestAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp index 28bd1590f03..d3cd77010d2 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_kaelthas.cpp @@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL advisorbase_ai : public ScriptedAI      advisorbase_ai(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      void MoveInLineOfSight(Unit *who) @@ -274,7 +274,7 @@ struct TRINITY_DLL_DECL boss_kaelthasAI : public ScriptedAI  {      boss_kaelthasAI(Creature *c) : ScriptedAI(c), summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          AdvisorGuid[0] = 0;          AdvisorGuid[1] = 0;          AdvisorGuid[2] = 0; @@ -1397,7 +1397,7 @@ struct TRINITY_DLL_DECL mob_phoenix_tkAI : public ScriptedAI  {      mob_phoenix_tkAI(Creature *c) : ScriptedAI(c)      { -       pInstance = (c->GetInstanceData()); +       pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp index aa96435bbb1..2fd4a5d65f0 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_eye/boss_void_reaver.cpp @@ -41,7 +41,7 @@ struct TRINITY_DLL_DECL boss_void_reaverAI : public ScriptedAI  {      boss_void_reaverAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp index 86e36072546..952876157fa 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_gatewatcher_ironhand.cpp @@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL boss_gatewatcher_iron_handAI : public ScriptedAI  {      boss_gatewatcher_iron_handAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp index e14aba074cf..904ded07159 100644 --- a/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp +++ b/src/bindings/scripts/scripts/zone/tempest_keep/the_mechanar/boss_nethermancer_sepethrea.cpp @@ -45,7 +45,7 @@ struct TRINITY_DLL_DECL boss_nethermancer_sepethreaAI : public ScriptedAI  {      boss_nethermancer_sepethreaAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } @@ -166,7 +166,7 @@ struct TRINITY_DLL_DECL mob_ragin_flamesAI : public ScriptedAI  {      mob_ragin_flamesAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData());        HeroicMode = m_creature->GetMap()->IsHeroic(); +        pInstance = c->GetInstanceData();        HeroicMode = m_creature->GetMap()->IsHeroic();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_bug_trio.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_bug_trio.cpp index 2c5ffe06bfc..f88a65a5617 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_bug_trio.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_bug_trio.cpp @@ -39,7 +39,7 @@ struct TRINITY_DLL_DECL boss_kriAI : public ScriptedAI  {      boss_kriAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -124,7 +124,7 @@ struct TRINITY_DLL_DECL boss_vemAI : public ScriptedAI  {      boss_vemAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -205,7 +205,7 @@ struct TRINITY_DLL_DECL boss_yaujAI : public ScriptedAI  {      boss_yaujAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp index 700e7230d14..9a59c5b7dbc 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_ouro.cpp @@ -44,7 +44,6 @@ struct TRINITY_DLL_DECL boss_ouroAI : public ScriptedAI      bool Enrage;      bool Submerged; -    bool InCombat;      void Reset()      { diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp index 1fc47f68295..a26f0f12e3e 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_skeram.cpp @@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI  {      boss_skeramAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          IsImage = false;      } diff --git a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp index 1c741bdd859..62f06160251 100644 --- a/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp +++ b/src/bindings/scripts/scripts/zone/temple_of_ahnqiraj/boss_twinemperors.cpp @@ -75,7 +75,7 @@ struct TRINITY_DLL_DECL boss_twinemperorsAI : public ScriptedAI      boss_twinemperorsAI(Creature *c): ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      void TwinReset() diff --git a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp index cf55ff0123d..e35c45b2cf0 100644 --- a/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp +++ b/src/bindings/scripts/scripts/zone/terokkar_forest/terokkar_forest.cpp @@ -72,7 +72,7 @@ struct TRINITY_DLL_DECL mob_unkor_the_ruthlessAI : public ScriptedAI          m_creature->SetStandState(UNIT_STAND_STATE_SIT);          m_creature->RemoveAllAuras();          m_creature->DeleteThreatList(); -        m_creature->CombatStop(); +        m_creature->CombatStop(true);          UnkorUnfriendly_Timer = 60000;      } diff --git a/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp b/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp index 3221466bfd3..17caebe85bb 100644 --- a/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp +++ b/src/bindings/scripts/scripts/zone/uldaman/boss_archaedas.cpp @@ -59,7 +59,6 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI      uint32 WallMinionTimer;      bool wakingUp; -    bool InCombat;      bool guardiansAwake;      bool vaultWalkersAwake;      ScriptedInstance* pInstance; @@ -70,7 +69,6 @@ struct TRINITY_DLL_DECL boss_archaedasAI : public ScriptedAI          Awaken_Timer = 0;          WallMinionTimer = 10000; -        InCombat = false;          wakingUp = false;          guardiansAwake = false;          vaultWalkersAwake = false; @@ -217,7 +215,6 @@ struct TRINITY_DLL_DECL mob_archaedas_minionsAI : public ScriptedAI      int32 Awaken_Timer;      bool wakingUp; -    bool InCombat;      bool amIAwake;      ScriptedInstance* pInstance; @@ -226,7 +223,6 @@ struct TRINITY_DLL_DECL mob_archaedas_minionsAI : public ScriptedAI          Arcing_Timer = 3000;          Awaken_Timer = 0; -        InCombat = false;          wakingUp = false;          amIAwake = false; @@ -362,12 +358,10 @@ struct TRINITY_DLL_DECL mob_stonekeepersAI : public ScriptedAI          pInstance = (m_creature->GetInstanceData());      } -    bool InCombat;      ScriptedInstance* pInstance;      void Reset()      { -        InCombat = false;          m_creature->setFaction(35);          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);          m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); diff --git a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp index 035df9082c8..06f1b9efe1a 100644 --- a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp +++ b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_ingvar_the_plunderer.cpp @@ -69,7 +69,7 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI  {      boss_ingvar_the_plundererAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = c->GetMap()->IsHeroic();      } @@ -89,7 +89,7 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI      void Reset()      {          if(undead) // Visual Hack -            m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INGVAR_HUMAN); +            m_creature->SetDisplayId(MODEL_INGVAR_HUMAN);          undead = false;          event_inProgress = false; @@ -285,7 +285,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI  {      mob_annhylde_the_callerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      float x,y,z; @@ -362,7 +362,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI                      {                          ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY);                          //ingvar->CastSpell(ingvar,SPELL_INGVAR_TRANSFORM,false); -                        ingvar->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INGVAR_UNDEAD); // Visual Hack - when he dies he becomes human model -> wrong +                        ingvar->SetDisplayId(MODEL_INGVAR_UNDEAD); // Visual Hack - when he dies he becomes human model -> wrong                          Creature* c_ingvar = ingvar;                          CAST_AI(boss_ingvar_the_plundererAI, (c_ingvar->AI()))->StartZombiePhase(); @@ -388,7 +388,7 @@ struct TRINITY_DLL_DECL mob_ingvar_throw_dummyAI : public ScriptedAI  {      mob_ingvar_throw_dummyAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = c->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp index a145ddcc425..c05d28bc58b 100644 --- a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp +++ b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_keleseth.cpp @@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_kelesethAI : public ScriptedAI  {      boss_kelesethAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          Heroic = c->GetMap()->IsHeroic();      } @@ -210,7 +210,7 @@ struct TRINITY_DLL_DECL mob_vrykul_skeletonAI : public ScriptedAI  {      mob_vrykul_skeletonAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp index 8078716d2d8..5c5a5ba2f16 100644 --- a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp +++ b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/boss_skarvald_dalronn.cpp @@ -59,7 +59,7 @@ struct TRINITY_DLL_DECL boss_skarvald_the_constructorAI : public ScriptedAI  {      boss_skarvald_the_constructorAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } @@ -206,7 +206,7 @@ struct TRINITY_DLL_DECL boss_dalronn_the_controllerAI : public ScriptedAI  {      boss_dalronn_the_controllerAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          HeroicMode = m_creature->GetMap()->IsHeroic();      } diff --git a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/utgarde_keep.cpp b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/utgarde_keep.cpp index 517d1270f73..42f1fc00317 100644 --- a/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/utgarde_keep.cpp +++ b/src/bindings/scripts/scripts/zone/utgarde_keep/utgarde_keep/utgarde_keep.cpp @@ -30,7 +30,7 @@ struct TRINITY_DLL_DECL npc_dragonflayer_forge_masterAI : public ScriptedAI  {      npc_dragonflayer_forge_masterAI(Creature *c) : ScriptedAI(c)       { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          fm_Type = 0;      } diff --git a/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp b/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp index a3f84aa0dc2..e6d6ecf8f0a 100644 --- a/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp +++ b/src/bindings/scripts/scripts/zone/zangarmarsh/zangarmarsh.cpp @@ -278,9 +278,9 @@ struct TRINITY_DLL_DECL npc_kayra_longmaneAI : public npc_escortAI      void WaypointReached(uint32 i)      { -        Unit* pUnit = Unit::GetUnit(*m_creature, PlayerGUID); +        Player* pUnit = Unit::GetPlayer(PlayerGUID); -        if (!pUnit || pUnit->GetTypeId() != TYPEID_PLAYER) +        if (!pUnit)              return;          switch(i) @@ -305,17 +305,17 @@ struct TRINITY_DLL_DECL npc_kayra_longmaneAI : public npc_escortAI                  break;              case 26:                  DoScriptText(SAY_END, m_creature, pUnit); -                ((Player*)pUnit)->GroupEventHappens(QUEST_ESCAPE_FROM, m_creature); +                pUnit->GroupEventHappens(QUEST_ESCAPE_FROM, m_creature);                  break;          }      }      void JustDied(Unit* killer)      { -        if (Unit* pUnit = Unit::GetUnit(*m_creature, PlayerGUID)) +        if (Player* pUnit = Unit::GetPlayer(PlayerGUID))          { -            if (((Player*)pUnit)->GetQuestStatus(QUEST_ESCAPE_FROM) == QUEST_STATUS_INCOMPLETE) -                ((Player*)pUnit)->FailQuest(QUEST_ESCAPE_FROM); +            if (pUnit->GetQuestStatus(QUEST_ESCAPE_FROM) == QUEST_STATUS_INCOMPLETE) +                pUnit->FailQuest(QUEST_ESCAPE_FROM);          }      } @@ -330,7 +330,7 @@ bool QuestAccept_npc_kayra_longmane(Player* pPlayer, Creature* pCreature, Quest      if (pQuest->GetQuestId() == QUEST_ESCAPE_FROM)      {          DoScriptText(SAY_START, pCreature, pPlayer); -        ((npc_escortAI*)(pCreature->AI()))->Start(false, true, false, pPlayer->GetGUID()); +        CAST_AI(npc_escortAI, pCreature->AI())->Start(false, true, false, pPlayer->GetGUID());      }      return true;  } @@ -341,7 +341,7 @@ CreatureAI* GetAI_npc_kayra_longmaneAI(Creature* pCreature)      thisAI->FillPointMovementListForCreature(); -    return (CreatureAI*)thisAI; +    return thisAI;  }  /*######  ## AddSC diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp index 7861232026e..3d1895351d6 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_akilzon.cpp @@ -64,7 +64,7 @@ struct TRINITY_DLL_DECL boss_akilzonAI : public ScriptedAI          SpellEntry *TempSpell = GET_SPELL(SPELL_ELECTRICAL_DAMAGE);          if(TempSpell)              TempSpell->EffectBasePoints[1] = 49;//disable bugged lightning until fixed in core -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp index fc1fb3ce592..ec264a7f9d1 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_halazzi.cpp @@ -75,7 +75,7 @@ struct TRINITY_DLL_DECL boss_halazziAI : public ScriptedAI  {      boss_halazziAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          // need to find out what controls totem's spell cooldown          SpellEntry *TempSpell = GET_SPELL(SPELL_LIGHTNING);          if(TempSpell && TempSpell->CastingTimeIndex != 5) diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp index b57cc4e0753..a87543725e2 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_hexlord.cpp @@ -179,7 +179,7 @@ struct TRINITY_DLL_DECL boss_hexlord_addAI : public ScriptedAI      boss_hexlord_addAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      void Reset() {} @@ -202,7 +202,7 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI  {      boss_hex_lord_malacrassAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();          SelectAddEntry();          for(uint8 i = 0; i < 4; ++i)              AddGUID[i] = 0; @@ -392,7 +392,7 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI              }              else              { -                trigger->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); +                trigger->SetDisplayId(11686);                  trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                  trigger->CastSpell(target, SPELL_SIPHON_SOUL, true);                  trigger->GetMotionMaster()->MoveChase(m_creature); diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp index e8564c84a10..926a751c7cd 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_janalai.cpp @@ -101,7 +101,7 @@ struct TRINITY_DLL_DECL boss_janalaiAI : public ScriptedAI  {      boss_janalaiAI(Creature *c) : ScriptedAI(c)      { -        pInstance =(c->GetInstanceData()); +        pInstance =c->GetInstanceData();          SpellEntry *TempSpell = GET_SPELL(SPELL_HATCH_EGG);          if(TempSpell && TempSpell->EffectImplicitTargetA[0] != 1) @@ -481,7 +481,7 @@ struct TRINITY_DLL_DECL mob_amanishi_hatcherAI : public ScriptedAI  {      mob_amanishi_hatcherAI(Creature *c) : ScriptedAI(c)      { -        pInstance =(c->GetInstanceData()); +        pInstance =c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -612,7 +612,7 @@ struct TRINITY_DLL_DECL mob_hatchlingAI : public ScriptedAI  {      mob_hatchlingAI(Creature *c) : ScriptedAI(c)      { -        pInstance =(c->GetInstanceData()); +        pInstance =c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp index 96038629cb3..80f2c754e8d 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_nalorakk.cpp @@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_nalorakkAI : public ScriptedAI      {          MoveEvent = true;          MovePhase = 0; -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp b/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp index ea1eddff107..a48f139eb16 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/boss_zuljin.cpp @@ -143,7 +143,7 @@ struct TRINITY_DLL_DECL boss_zuljinAI : public ScriptedAI  {      boss_zuljinAI(Creature *c) : ScriptedAI(c), Summons(m_creature)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp b/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp index dd16b652c0d..23b33fa8962 100644 --- a/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp +++ b/src/bindings/scripts/scripts/zone/zulaman/zulaman.cpp @@ -40,7 +40,7 @@ struct TRINITY_DLL_DECL npc_forest_frogAI : public ScriptedAI  {      npc_forest_frogAI(Creature* c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulfarrak/zulfarrak.cpp b/src/bindings/scripts/scripts/zone/zulfarrak/zulfarrak.cpp index 80db24d7871..c06cd917b0e 100644 --- a/src/bindings/scripts/scripts/zone/zulfarrak/zulfarrak.cpp +++ b/src/bindings/scripts/scripts/zone/zulfarrak/zulfarrak.cpp @@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL npc_sergeant_blyAI : public ScriptedAI  {      npc_sergeant_blyAI(Creature *c) : ScriptedAI(c)      { -        //pInstance = (c->GetInstanceData()); +        //pInstance = c->GetInstanceData();      }      //ScriptedInstance* pInstance; @@ -141,7 +141,7 @@ struct TRINITY_DLL_DECL npc_weegli_blastfuseAI : public ScriptedAI  {      npc_weegli_blastfuseAI(Creature *c) : ScriptedAI(c)      { -        //pInstance = (c->GetInstanceData()); +        //pInstance = c->GetInstanceData();      }      //ScriptedInstance* pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp index f8fb9500dc5..9789d362ab9 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_arlokk.cpp @@ -38,7 +38,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI  {      boss_arlokkAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -73,7 +73,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI          PhaseTwo = false;          VanishedOnce = false; -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15218); +        m_creature->SetDisplayId(15218);          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);      } @@ -85,7 +85,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI      void JustDied(Unit* Killer)      {          DoScriptText(SAY_DEATH, m_creature); -        m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15218); +        m_creature->SetDisplayId(15218);          m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);          if(pInstance) @@ -143,7 +143,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI              if (Vanish_Timer < diff)              {                  //Invisble Model -                m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686); +                m_creature->SetDisplayId(11686);                  m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                  //m_creature->CombatStop();                  DoResetThreat(); @@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI                      Unit* target = NULL;                      target = SelectUnit(SELECT_TARGET_RANDOM,0);                      //The Panther Model -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215); +                    m_creature->SetDisplayId(15215);                      m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                      const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); @@ -169,7 +169,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI                      if(target)                          AttackStart(target);                      //The Panther Model -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215); +                    m_creature->SetDisplayId(15215);                      m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                      PhaseTwo = true;                  }else Visible_Timer -= diff; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp index 2202fecc19c..6879c04646f 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_hakkar.cpp @@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_hakkarAI : public ScriptedAI  {      boss_hakkarAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp index f4d99434402..d1ef25a03a8 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_jeklik.cpp @@ -45,7 +45,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI  {      boss_jeklikAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -196,7 +196,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI                  }                  else                  { -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15219); +                    m_creature->SetDisplayId(15219);                      DoResetThreat();                      PhaseTwo = true;                  } @@ -212,7 +212,7 @@ struct TRINITY_DLL_DECL mob_batriderAI : public ScriptedAI  {      mob_batriderAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp index b5271291a4d..279ec81b3eb 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_jindo.cpp @@ -43,7 +43,7 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI  {      boss_jindoAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -168,7 +168,7 @@ struct TRINITY_DLL_DECL mob_healing_wardAI : public ScriptedAI  {      mob_healing_wardAI(Creature *c) : ScriptedAI(c)      { -         pInstance = (c->GetInstanceData()); +         pInstance = c->GetInstanceData();      }      uint32 Heal_Timer; @@ -207,7 +207,7 @@ struct TRINITY_DLL_DECL mob_shade_of_jindoAI : public ScriptedAI  {      mob_shade_of_jindoAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 ShadowShock_Timer; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp index 3c10e16dde7..e2c3f306e8b 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp @@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI  {      boss_mandokirAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 KillCount; @@ -270,7 +270,7 @@ struct TRINITY_DLL_DECL mob_ohganAI : public ScriptedAI  {      mob_ohganAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 SunderArmor_Timer; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp index e77f08bbc39..b3b92cbc2c7 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_marli.cpp @@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI  {      boss_marliAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; @@ -187,7 +187,7 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI                  if (TransformBack_Timer < diff)                  { -                    m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15220); +                    m_creature->SetDisplayId(15220);                      const CreatureInfo *cinfo = m_creature->GetCreatureInfo();                      m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1)));                      m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1))); diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp index 23fe5901be9..76d3d5268e9 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_thekal.cpp @@ -54,7 +54,7 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI  {      boss_thekalAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 MortalCleave_Timer; @@ -241,7 +241,7 @@ struct TRINITY_DLL_DECL mob_zealot_lorkhanAI : public ScriptedAI  {      mob_zealot_lorkhanAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 Shield_Timer; @@ -385,7 +385,7 @@ struct TRINITY_DLL_DECL mob_zealot_zathAI : public ScriptedAI  {      mob_zealot_zathAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      uint32 SweepingStrikes_Timer; diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp index 7c72b6f79c0..7e3629e0b91 100644 --- a/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp +++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_venoxis.cpp @@ -41,7 +41,7 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI  {      boss_venoxisAI(Creature *c) : ScriptedAI(c)      { -        pInstance = (c->GetInstanceData()); +        pInstance = c->GetInstanceData();      }      ScriptedInstance *pInstance; diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index 4c0c900a711..71062657c0b 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -684,7 +684,7 @@ void BattleGround::EndBattleGround(uint32 winner)      {          winner_arena_team = objmgr.GetArenaTeamById(GetArenaTeamIdForTeam(winner));          loser_arena_team = objmgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(winner))); -        if (winner_arena_team && loser_arena_team) +        if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)          {              loser_rating = loser_arena_team->GetStats().rating;              winner_rating = winner_arena_team->GetStats().rating; @@ -710,7 +710,7 @@ void BattleGround::EndBattleGround(uint32 winner)          if (!plr)          {              //if rated arena match - make member lost! -            if (isArena() && isRated() && winner_arena_team && loser_arena_team) +            if (isArena() && isRated() && winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)              {                  if (team == winner)                      winner_arena_team->OfflineMemberLost(itr->first, loser_rating); @@ -735,7 +735,7 @@ void BattleGround::EndBattleGround(uint32 winner)          //if(!team) team = plr->GetTeam();          // per player calculation -        if (isArena() && isRated() && winner_arena_team && loser_arena_team) +        if (isArena() && isRated() && winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)          {              if (team == winner)              { @@ -776,7 +776,7 @@ void BattleGround::EndBattleGround(uint32 winner)          plr->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1);      } -    if (isArena() && isRated() && winner_arena_team && loser_arena_team) +    if (isArena() && isRated() && winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)      {          // update arena points only after increasing the player's match count!          //obsolete: winner_arena_team->UpdateArenaPointsHelper(); @@ -1011,7 +1011,7 @@ void BattleGround::RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPac                      //left a rated match while the encounter was in progress, consider as loser                      ArenaTeam * winner_arena_team = objmgr.GetArenaTeamById(GetArenaTeamIdForTeam(GetOtherTeam(team)));                      ArenaTeam * loser_arena_team = objmgr.GetArenaTeamById(GetArenaTeamIdForTeam(team)); -                    if (winner_arena_team && loser_arena_team) +                    if (winner_arena_team && loser_arena_team && winner_arena_team != loser_arena_team)                          loser_arena_team->MemberLost(plr,winner_arena_team->GetRating());                  }              } diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index eb711a77ab5..be0747f0a89 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1780,7 +1780,7 @@ void Creature::setDeathState(DeathState s)          LoadCreaturesAddon(true);          Motion_Initialize();          if(GetCreatureData() && GetPhaseMask() != GetCreatureData()->phaseMask) -            SetPhaseMask(GetCreatureData()->phaseMask, true); +            SetPhaseMask(GetCreatureData()->phaseMask, false);      }  } @@ -1802,16 +1802,19 @@ bool Creature::FallGround()      return true;  } -void Creature::Respawn() +void Creature::Respawn(bool force)  { -    RemoveCorpse(); +    DestroyForNearbyPlayers(); -    // forced recreate creature object at clients -    UnitVisibility currentVis = GetVisibility(); -    SetVisibility(VISIBILITY_RESPAWN); -    ObjectAccessor::UpdateObjectVisibility(this); -    SetVisibility(currentVis);                              // restore visibility state -    ObjectAccessor::UpdateObjectVisibility(this); +    if(force) +    { +        if(isAlive()) +            setDeathState(JUST_DIED); +        else if(getDeathState() != CORPSE) +            setDeathState(CORPSE); +    } + +    RemoveCorpse();      if(getDeathState()==DEAD)      { @@ -1846,11 +1849,9 @@ void Creature::Respawn()          uint16 poolid = poolhandler.IsPartOfAPool(GetGUIDLow(), GetTypeId());          if (poolid)              poolhandler.UpdatePool(poolid, GetGUIDLow(), GetTypeId()); -            -        //GetMap()->Add(this); -            -      } + +    SetToNotify();  }  bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo) diff --git a/src/game/Creature.h b/src/game/Creature.h index b44b5b68ef5..99dd3b3417d 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -672,7 +672,7 @@ class TRINITY_DLL_SPEC Creature : public Unit          time_t const& GetRespawnTime() const { return m_respawnTime; }          time_t GetRespawnTimeEx() const;          void SetRespawnTime(uint32 respawn) { m_respawnTime = respawn ? time(NULL) + respawn : 0; } -        void Respawn(); +        void Respawn(bool force = false);          void SaveRespawnTime();          uint32 GetRespawnDelay() const { return m_respawnDelay; } @@ -786,6 +786,9 @@ class TRINITY_DLL_SPEC Creature : public Unit          bool DisableReputationGain; +        CreatureInfo const* m_creatureInfo;                 // in heroic mode can different from ObjMgr::GetCreatureTemplate(GetEntry()) +        CreatureData const* m_creatureData; +      private:          //WaypointMovementGenerator vars          uint32 m_waypointID; @@ -795,8 +798,6 @@ class TRINITY_DLL_SPEC Creature : public Unit          CreatureGroup *m_formation;          GridReference<Creature> m_gridRef; -        CreatureInfo const* m_creatureInfo;                 // in heroic mode can different from ObjMgr::GetCreatureTemplate(GetEntry()) -        CreatureData const* m_creatureData;  };  class AssistDelayEvent : public BasicEvent diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index d2b341b2d2c..551db4eb2cb 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -242,3 +242,40 @@ std::string InstanceData::GetBossSaveData()          saveStream << (uint32)i->state << " ";      return saveStream.str();  }    + +void InstanceData::DoUseDoorOrButton(uint64 uiGuid, uint32 uiWithRestoreTime, bool bUseAlternativeState) +{ +    if (!uiGuid) +        return; + +    GameObject* pGo = instance->GetGameObject(uiGuid); + +    if (pGo) +    { +        if (pGo->GetGoType() == GAMEOBJECT_TYPE_DOOR || pGo->GetGoType() == GAMEOBJECT_TYPE_BUTTON) +        { +            if (pGo->getLootState() == GO_READY) +                pGo->UseDoorOrButton(uiWithRestoreTime,bUseAlternativeState); +            else if (pGo->getLootState() == GO_ACTIVATED) +                pGo->ResetDoorOrButton(); +        } +        else +            error_log("SD2: Script call DoUseDoorOrButton, but gameobject entry %u is type %u.",pGo->GetEntry(),pGo->GetGoType()); +    } +} + +void InstanceData::DoRespawnGameObject(uint64 uiGuid, uint32 uiTimeToDespawn) +{ +    if (GameObject* pGo = instance->GetGameObject(uiGuid)) +    { +        //not expect any of these should ever be handled +        if (pGo->GetGoType()==GAMEOBJECT_TYPE_FISHINGNODE || pGo->GetGoType()==GAMEOBJECT_TYPE_DOOR || +            pGo->GetGoType()==GAMEOBJECT_TYPE_BUTTON || pGo->GetGoType()==GAMEOBJECT_TYPE_TRAP) +            return; + +        if (pGo->isSpawned()) +            return; + +        pGo->SetRespawnTime(uiTimeToDespawn); +    } +} diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index 819185eacaa..fac766c761e 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -143,6 +143,12 @@ class TRINITY_DLL_SPEC InstanceData : public ZoneScript          //use HandleGameObject(GUID,boolen,NULL); in any other script          void HandleGameObject(uint64 GUID, bool open, GameObject *go = NULL); +        //change active state of doors or buttons +        void DoUseDoorOrButton(uint64 uiGuid, uint32 uiWithRestoreTime = 0, bool bUseAlternativeState = false); + +        //Respawns a GO having negative spawntimesecs in gameobject-table +        void DoRespawnGameObject(uint64 uiGuid, uint32 uiTimeToDespawn = MINUTE); +          virtual bool SetBossState(uint32 id, EncounterState state);          const BossBoundaryMap * GetBossBoundary(uint32 id) const { return id < bosses.size() ? &bosses[id].boundary : NULL; }      protected: diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 0e7eed9bff0..3561621f0bd 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -82,16 +82,21 @@ Object::Object( ) : m_PackGUID(sizeof(uint64)+1)  Object::~Object( )  { -    //if(m_objectUpdated) -    //    ObjectAccessor::Instance().RemoveUpdateObject(this); -      if(IsInWorld())      { -        sLog.outCrash("Object::~Object - guid="UI64FMTD", typeid=%d deleted but still in world!!", GetGUID(), GetTypeId()); +        sLog.outCrash("Object::~Object - guid="UI64FMTD", typeid=%d, entry=%u deleted but still in world!!", GetGUID(), GetTypeId(), GetEntry()); +        if(isType(TYPEMASK_ITEM)) +            sLog.outCrash("Item slot %u", ((Item*)this)->GetSlot());          assert(false); +        RemoveFromWorld();      } -    assert(!m_objectUpdated); +    if(m_objectUpdated) +    { +        sLog.outCrash("Object::~Object - guid="UI64FMTD", typeid=%d, entry=%u deleted but still in update list!!", GetGUID(), GetTypeId(), GetEntry()); +        assert(false); +        ObjectAccessor::Instance().RemoveUpdateObject(this); +    }      if(m_uint32Values)      { diff --git a/src/game/Player.cpp b/src/game/Player.cpp index cbcf52789bb..07b3f62c3c5 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1844,6 +1844,9 @@ void Player::RemoveFromWorld()              m_items[i]->RemoveFromWorld();      } +    for (ItemMap::iterator iter = mMitems.begin(); iter != mMitems.end(); ++iter) +        iter->second->RemoveFromWorld(); +      ///- Do not add/remove the player from the object storage      ///- It will crash when updating the ObjectAccessor      ///- The player should only be removed when logging out @@ -18366,8 +18369,8 @@ bool Player::canSeeOrDetect(Unit const* u, bool detect, bool inVisibleList, bool          return false;      // forbidden to seen (at GM respawn command) -    if(u->GetVisibility() == VISIBILITY_RESPAWN) -        return false; +    //if(u->GetVisibility() == VISIBILITY_RESPAWN) +    //    return false;      // Grid dead/alive checks      // non visible at grid for any stealth state diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 520d1bd87ef..d55510b47ff 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -960,7 +960,7 @@ void Aura::SendAuraUpdate()      data << uint32(GetId());      data << uint8(m_auraFlags);      data << uint8(m_auraLevel); -    data << uint8(m_stackAmount > 1 ? (m_procCharges > 1 ? m_stackAmount * m_procCharges : m_stackAmount) : m_procCharges); +    data << uint8(m_stackAmount > 1 ? m_stackAmount : m_procCharges);      if(!(m_auraFlags & AFLAG_CASTER))      { @@ -4804,7 +4804,7 @@ void AuraEffect::HandleAuraModResistance(bool apply, bool Real, bool /*changeAmo          {              m_target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), TOTAL_VALUE, float(m_amount), apply);              if(m_target->GetTypeId() == TYPEID_PLAYER || ((Creature*)m_target)->isPet()) -                m_target->ApplyResistanceBuffModsMod(SpellSchools(x),GetParentAura()->IsPositive(),m_amount, apply); +                m_target->ApplyResistanceBuffModsMod(SpellSchools(x),m_amount > 0,m_amount, apply);          }      } @@ -5441,7 +5441,7 @@ void AuraEffect::HandleModDamageDone(bool apply, bool Real, bool changeAmount)          if(m_target->GetTypeId() == TYPEID_PLAYER)          { -            if(GetParentAura()->IsPositive()) +            if(m_amount > 0)                  m_target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS,m_amount,apply);              else                  m_target->ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG,m_amount,apply); @@ -5465,7 +5465,7 @@ void AuraEffect::HandleModDamageDone(bool apply, bool Real, bool changeAmount)      // This information for client side use only      if(m_target->GetTypeId() == TYPEID_PLAYER)      { -        if(GetParentAura()->IsPositive()) +        if(m_amount > 0)          {              for(int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; i++)              { @@ -5488,7 +5488,7 @@ void AuraEffect::HandleModDamageDone(bool apply, bool Real, bool changeAmount)  void AuraEffect::HandleModDamagePercentDone(bool apply, bool Real, bool changeAmount)  { -    sLog.outDebug("AURA MOD DAMAGE type:%u negative:%u", GetMiscValue(), GetParentAura()->IsPositive() ? 0 : 1); +    sLog.outDebug("AURA MOD DAMAGE type:%u negative:%u", GetMiscValue(), m_amount > 0);      // apply item specific bonuses for already equipped weapon      if((Real || changeAmount) && m_target->GetTypeId()==TYPEID_PLAYER) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index a522d8c051a..f9d607010ca 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -597,6 +597,13 @@ bool IsPositiveEffect(uint32 spellId, uint32 effIndex, bool deep)              break;      } +    // Special case: effects which determine positivity of whole spell +    for (uint8 i = 0;i<MAX_SPELL_EFFECTS;++i) +    { +        if (spellproto->EffectApplyAuraName[i] == SPELL_AURA_MOD_STEALTH) +            return true; +    } +      switch(spellproto->Effect[effIndex])      {          // always positive effects (check before target checks that provided non-positive result in some case for positive effects) @@ -1349,9 +1356,6 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr          // Exist req for PROC_EX_EX_TRIGGER_ALWAYS          if ((procExtra & AURA_SPELL_PROC_EX_MASK) && (procEvent_procEx & PROC_EX_EX_TRIGGER_ALWAYS))              return true; -        // Passive spells can`t trigger if need hit -        if ((procEvent_procEx & PROC_EX_NORMAL_HIT)) -            return false;          // Check Extra Requirement like (hit/crit/miss/resist/parry/dodge/block/immune/reflect/absorb and other)          if (procEvent_procEx & procExtra)              return true; @@ -2249,7 +2253,9 @@ void SpellMgr::LoadSpellAreas()          spellArea.gender              = Gender(fields[7].GetUInt8());          spellArea.autocast            = fields[8].GetBool(); -        if(!sSpellStore.LookupEntry(spell)) +        if(const SpellEntry* spellInfo = sSpellStore.LookupEntry(spell)) +            const_cast<SpellEntry*>(spellInfo)->Attributes |= SPELL_ATTR_CANT_CANCEL; +        else          {              sLog.outErrorDb("Spell %u listed in `spell_area` does not exist", spell);              continue; diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index 7a0b6f285eb..8287ed2b2bf 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -378,7 +378,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged )          AuraEffectList const& mAPbyArmor = GetAurasByType(SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR);          for(AuraEffectList::const_iterator iter = mAPbyArmor.begin(); iter != mAPbyArmor.end(); ++iter)              // always: ((*i)->GetModifier()->m_miscvalue == 1 == SPELL_SCHOOL_MASK_NORMAL) -            attPowerMod += int32(GetArmor() / (*iter)->GetMiscValue()); +            attPowerMod += int32(GetArmor() / (*iter)->GetAmount());      }      float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 4cef59a9037..037c00fcff2 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4915,6 +4915,17 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger                      }                      return false;                  } +                // Overkill +                case 58426: +                { +                    if (procEx & AURA_REMOVE_PROC_EX_MASK) +                        triggered_spell_id = 58428; +                    else +                    { +                        triggered_spell_id = 58427; +                    } +                    break; +                }                  // Eye for an Eye                  case 9799:                  case 25988: @@ -5033,18 +5044,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger                      triggered_spell_id = 34650;                      break;                  } -                // Overkill -                case 58426: -                { -                    if (procEx & AURA_REMOVE_PROC_EX_MASK) -                        triggered_spell_id = 58428; -                    else -                    { -                        basepoints0 = -triggerAmount; -                        triggered_spell_id = 58427; -                    } -                    break; -                }                  // Mark of Malice                  case 33493:                  { @@ -13340,6 +13339,12 @@ void Unit::AddPetAura(PetAura const* petSpell)      if(GetTypeId() != TYPEID_PLAYER)          return; +    // Aura already added - not need to add it twice +    // This check is to prevent existing pet having aura applied twice (passive auras can stack) +    // if aura has more than 1 dummy effect +    if (m_petAuras.find(petSpell)!= m_petAuras.end()) +        return; +      m_petAuras.insert(petSpell);      if(Pet* pet = ((Player*)this)->GetPet())          pet->CastPetAura(petSpell); @@ -13480,7 +13485,6 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura * aura, SpellEntry co      {          modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_CHANCE_OF_SUCCESS,chance);      } -      return roll_chance_f(chance);  } diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp index 0464c52705e..fd1fbae5926 100644 --- a/src/game/Vehicle.cpp +++ b/src/game/Vehicle.cpp @@ -45,26 +45,6 @@ void Vehicle::AddToWorld()              m_zoneScript->OnCreatureCreate(this, true);          ObjectAccessor::Instance().AddObject(this); -        switch(GetEntry()) -        { -            //case 27850:InstallAccessory(27905,1);break; -            case 28312:InstallAccessory(28319,7);break; -            case 32627:InstallAccessory(32629,7);break; -            case 33109:InstallAccessory(33167,1);break; -            case 33060:InstallAccessory(33067,7);break; -            case 33113: -                InstallAccessory(33114,0); -                InstallAccessory(33114,1); -                InstallAccessory(33114,2); -                InstallAccessory(33114,3); -                InstallAccessory(33139,7); -                break; -            case 33114: -                InstallAccessory(33143,1); -                //InstallAccessory(33142,0); -                InstallAccessory(33142,2); -                break; -        }          for(uint32 i = 0; i < MAX_SPELL_VEHICLE; ++i)          {              if(!m_spells[i]) @@ -85,11 +65,38 @@ void Vehicle::AddToWorld()              }          } +        InstallAllAccessories(); +          Unit::AddToWorld();          AIM_Initialize();      }  } +void Vehicle::InstallAllAccessories() +{ +    switch(GetEntry()) +    { +        //case 27850:InstallAccessory(27905,1);break; +        case 28782:InstallAccessory(28768,0);break; // Acherus Deathcharger +        case 28312:InstallAccessory(28319,7);break; +        case 32627:InstallAccessory(32629,7);break; +        case 33109:InstallAccessory(33167,1);break; +        case 33060:InstallAccessory(33067,7);break; +        case 33113: +            InstallAccessory(33114,0); +            InstallAccessory(33114,1); +            InstallAccessory(33114,2); +            InstallAccessory(33114,3); +            InstallAccessory(33139,7); +            break; +        case 33114: +            InstallAccessory(33143,1); +            //InstallAccessory(33142,0); +            InstallAccessory(33142,2); +            break; +    } +} +  void Vehicle::RemoveFromWorld()  {      if(IsInWorld()) @@ -110,7 +117,7 @@ void Vehicle::setDeathState(DeathState s)                       // overwrite vir          for(SeatMap::iterator itr = m_Seats.begin(); itr != m_Seats.end(); ++itr)          {              if(Unit *passenger = itr->second.passenger) -                if(passenger->GetTypeId() == TYPEID_UNIT && ((Creature*)passenger)->isVehicle()) +                if(passenger->GetOwnerGUID() == GetGUID())                  {                      passenger->ExitVehicle();                      ((Vehicle*)passenger)->setDeathState(s); @@ -118,12 +125,15 @@ void Vehicle::setDeathState(DeathState s)                       // overwrite vir          }          RemoveAllPassengers();      } -    else if(s == JUST_ALIVED) + +    Creature::setDeathState(s); + +    if(s == JUST_ALIVED)      { +        InstallAllAccessories();          if(m_usableSeatNum)              SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);      } -    Creature::setDeathState(s);  }  void Vehicle::Update(uint32 diff) @@ -226,6 +236,15 @@ int8 Vehicle::GetNextEmptySeat(int8 seatId, bool next) const  void Vehicle::InstallAccessory(uint32 entry, int8 seatId)  { +    if(Unit *passenger = GetPassenger(seatId)) +    { +        // already installed +        if(passenger->GetEntry() == entry) +            return; + +        passenger->ExitVehicle(); // this should not happen +    } +      const CreatureInfo *cInfo = objmgr.GetCreatureTemplate(entry);      if(!cInfo)          return; @@ -421,5 +440,7 @@ bool Vehicle::LoadFromDB(uint32 guid, Map *map)      // checked at creature_template loading      m_defaultMovementType = MovementGeneratorType(data->movementType); +    m_creatureData = data; +      return true;  } diff --git a/src/game/Vehicle.h b/src/game/Vehicle.h index 309e8a5f02c..9639597bd8f 100644 --- a/src/game/Vehicle.h +++ b/src/game/Vehicle.h @@ -57,7 +57,7 @@ class TRINITY_DLL_SPEC Vehicle : public Creature          int8 GetNextEmptySeat(int8 seatId, bool next) const;          bool AddPassenger(Unit *passenger, int8 seatId = -1);          void RemovePassenger(Unit *passenger); -        void InstallAccessory(uint32 entry, int8 seatId); +        void InstallAllAccessories();          void Dismiss();          bool LoadFromDB(uint32 guid, Map *map); @@ -68,6 +68,7 @@ class TRINITY_DLL_SPEC Vehicle : public Creature          uint32 m_usableSeatNum;          void RemoveAllPassengers(); +        void InstallAccessory(uint32 entry, int8 seatId);      private:          void SaveToDB(uint32, uint8)                        // overwrited of Creature::SaveToDB     - don't must be called diff --git a/src/game/Wintergrasp.cpp b/src/game/Wintergrasp.cpp index d604507a799..dbe086bb761 100644 --- a/src/game/Wintergrasp.cpp +++ b/src/game/Wintergrasp.cpp @@ -300,8 +300,7 @@ bool OPvPWintergrasp::UpdateCreatureInfo(Creature *creature)          if(entry != creature->GetEntry())          {              creature->SetOriginalEntry(entry); -            creature->setDeathState(DEAD); -            creature->Respawn(); +            creature->Respawn(true);          }      }  | 
