diff options
Diffstat (limited to 'src')
43 files changed, 197 insertions, 154 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 543cb9235d3..d912de2a72c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -766,6 +766,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)                      TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());                      return false;                  } +                  if (!IsMinMaxValid(e, e.action.randomPhaseRange.phaseMin, e.action.randomPhaseRange.phaseMax))                      return false;                  break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index bb806717d97..d47dbeae600 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -53,9 +53,12 @@ enum SMART_EVENT_PHASE      SMART_EVENT_PHASE_4       = 4,      SMART_EVENT_PHASE_5       = 5,      SMART_EVENT_PHASE_6       = 6, -    SMART_EVENT_PHASE_MAX     = 7, +    SMART_EVENT_PHASE_7       = 7, +    SMART_EVENT_PHASE_8       = 8, +    SMART_EVENT_PHASE_9       = 9, +    SMART_EVENT_PHASE_MAX     = 10, -    SMART_EVENT_PHASE_COUNT   = 6 +    SMART_EVENT_PHASE_COUNT   = 9  };  enum SMART_EVENT_PHASE_BITS @@ -67,7 +70,10 @@ enum SMART_EVENT_PHASE_BITS      SMART_EVENT_PHASE_4_BIT        = 8,      SMART_EVENT_PHASE_5_BIT        = 16,      SMART_EVENT_PHASE_6_BIT        = 32, -    SMART_EVENT_PHASE_ALL          = SMART_EVENT_PHASE_1_BIT + SMART_EVENT_PHASE_2_BIT + SMART_EVENT_PHASE_3_BIT + SMART_EVENT_PHASE_4_BIT + SMART_EVENT_PHASE_5_BIT + SMART_EVENT_PHASE_6_BIT +    SMART_EVENT_PHASE_7_BIT        = 64, +    SMART_EVENT_PHASE_8_BIT        = 128, +    SMART_EVENT_PHASE_9_BIT        = 256, +    SMART_EVENT_PHASE_ALL          = SMART_EVENT_PHASE_1_BIT + SMART_EVENT_PHASE_2_BIT + SMART_EVENT_PHASE_3_BIT + SMART_EVENT_PHASE_4_BIT + SMART_EVENT_PHASE_5_BIT + SMART_EVENT_PHASE_6_BIT + SMART_EVENT_PHASE_7_BIT + SMART_EVENT_PHASE_8_BIT + SMART_EVENT_PHASE_9_BIT  };  const uint32 SmartPhaseMask[SMART_EVENT_PHASE_COUNT][2] = @@ -77,7 +83,10 @@ const uint32 SmartPhaseMask[SMART_EVENT_PHASE_COUNT][2] =      {SMART_EVENT_PHASE_3, SMART_EVENT_PHASE_3_BIT },      {SMART_EVENT_PHASE_4, SMART_EVENT_PHASE_4_BIT },      {SMART_EVENT_PHASE_5, SMART_EVENT_PHASE_5_BIT }, -    {SMART_EVENT_PHASE_6, SMART_EVENT_PHASE_6_BIT } +    {SMART_EVENT_PHASE_6, SMART_EVENT_PHASE_6_BIT }, +    {SMART_EVENT_PHASE_7, SMART_EVENT_PHASE_7_BIT }, +    {SMART_EVENT_PHASE_8, SMART_EVENT_PHASE_8_BIT }, +    {SMART_EVENT_PHASE_9, SMART_EVENT_PHASE_9_BIT }  };  enum SMART_EVENT diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index b10ba3e52af..d57d1312add 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -7850,14 +7850,9 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)      {          if (Weather* weather = WeatherMgr::FindWeather(zone->ID))              weather->SendWeatherUpdateToPlayer(this); -        else -        { -            if (!WeatherMgr::AddWeather(zone->ID)) -            { -                // send fine weather packet to remove old zone's weather -                WeatherMgr::SendFineWeatherUpdateToPlayer(this); -            } -        } +        else if (!WeatherMgr::AddWeather(zone->ID)) +            // send fine weather packet to remove old zone's weather +            WeatherMgr::SendFineWeatherUpdateToPlayer(this);      }      sScriptMgr->OnPlayerUpdateZone(this, newZone, newArea); diff --git a/src/server/game/Handlers/TicketHandler.cpp b/src/server/game/Handlers/TicketHandler.cpp index aefe7d96331..4ea4d835ae9 100644 --- a/src/server/game/Handlers/TicketHandler.cpp +++ b/src/server/game/Handlers/TicketHandler.cpp @@ -49,13 +49,23 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData)      // Player must not have ticket      if (!ticket || ticket->IsClosed())      { -        ticket = new GmTicket(GetPlayer(), recvData); - +        uint32 mapId; +        float x, y, z; +        std::string message; +        uint32 needResponse; +        bool needMoreHelp;          uint32 count;          std::list<uint32> times;          uint32 decompressedSize;          std::string chatLog; +        recvData >> mapId; +        recvData >> x >> y >> z; +        recvData >> message; + +        recvData >> needResponse; +        recvData >> needMoreHelp; +          recvData >> count;          for (uint32 i = 0; i < count; i++) @@ -77,19 +87,25 @@ void WorldSession::HandleGMTicketCreateOpcode(WorldPacket& recvData)              if (uncompress(dest.contents(), &realSize, recvData.contents() + pos, recvData.size() - pos) == Z_OK)              {                  dest >> chatLog; -                ticket->SetChatLog(times, chatLog);              }              else              {                  TC_LOG_ERROR("network", "CMSG_GMTICKET_CREATE possibly corrupt. Uncompression failed.");                  recvData.rfinish(); -                delete ticket;                  return;              }              recvData.rfinish(); // Will still have compressed data in buffer.          } +        ticket = new GmTicket(GetPlayer()); +        ticket->SetPosition(mapId, x, y, z); +        ticket->SetMessage(message); +        ticket->SetGmAction(needResponse, needMoreHelp); + +        if (!chatLog.empty()) +            ticket->SetChatLog(times, chatLog); +          sTicketMgr->AddTicket(ticket);          sTicketMgr->UpdateLastChange(); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index daa6c1f7c93..bac84951e21 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -817,7 +817,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const* spellPr      {          if (EventProcFlag & PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS)          { -            if (!(procExtra & PROC_EX_INTERNAL_DOT)) +            if (!(procExtra & PROC_EX_INTERNAL_HOT))                  return false;          }          else if (procExtra & PROC_EX_INTERNAL_HOT) diff --git a/src/server/game/Tickets/TicketMgr.cpp b/src/server/game/Tickets/TicketMgr.cpp index 5c536b2f929..c97a8b95678 100644 --- a/src/server/game/Tickets/TicketMgr.cpp +++ b/src/server/game/Tickets/TicketMgr.cpp @@ -34,26 +34,13 @@ inline float GetAge(uint64 t) { return float(time(NULL) - t) / DAY; }  // GM ticket  GmTicket::GmTicket() : _id(0), _playerGuid(0), _posX(0), _posY(0), _posZ(0), _mapId(0), _createTime(0), _lastModifiedTime(0),                         _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), -                       _needResponse(false), _haveTicket(false) { } +                       _needResponse(false), _needMoreHelp(false) { } -GmTicket::GmTicket(Player* player, WorldPacket& recvData) : _createTime(time(NULL)), _lastModifiedTime(time(NULL)), _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _haveTicket(false) +GmTicket::GmTicket(Player* player) : _createTime(time(NULL)), _lastModifiedTime(time(NULL)), _closedBy(0), _assignedTo(0), _completed(false), _escalatedStatus(TICKET_UNASSIGNED), _viewed(false), _needMoreHelp(false), _needResponse(false)  {      _id = sTicketMgr->GenerateTicketId();      _playerName = player->GetName();      _playerGuid = player->GetGUID(); - -    uint32 mapId; -    recvData >> mapId;                      // Map is sent as UInt32! -    _mapId = mapId; - -    recvData >> _posX; -    recvData >> _posY; -    recvData >> _posZ; -    recvData >> _message; -    uint32 needResponse; -    recvData >> needResponse; -    _needResponse = (needResponse == 17);   // Requires GM response. 17 = true, 1 = false (17 is default) -    recvData >> _haveTicket;                // Requests further GM interaction on a ticket to which a GM has already responded. Basically means "has a new ticket"  }  GmTicket::~GmTicket() { } @@ -80,7 +67,7 @@ bool GmTicket::LoadFromDB(Field* fields)      _completed          = fields[++index].GetBool();      _escalatedStatus    = GMTicketEscalationStatus(fields[++index].GetUInt8());      _viewed             = fields[++index].GetBool(); -    _haveTicket         = fields[++index].GetBool(); +    _needMoreHelp       = fields[++index].GetBool();      return true;  } @@ -107,7 +94,7 @@ void GmTicket::SaveToDB(SQLTransaction& trans) const      stmt->setBool  (++index, _completed);      stmt->setUInt8 (++index, uint8(_escalatedStatus));      stmt->setBool  (++index, _viewed); -    stmt->setBool  (++index, _haveTicket); +    stmt->setBool  (++index, _needMoreHelp);      CharacterDatabase.ExecuteOrAppend(trans, stmt);  } @@ -124,7 +111,7 @@ void GmTicket::WritePacket(WorldPacket& data) const      data << uint32(GMTICKET_STATUS_HASTEXT);      data << uint32(_id);      data << _message; -    data << uint8(_haveTicket); +    data << uint8(_needMoreHelp);      data << GetAge(_lastModifiedTime);      if (GmTicket* ticket = sTicketMgr->GetOldestOpenTicket())          data << GetAge(ticket->GetLastModifiedTime()); @@ -225,6 +212,20 @@ void GmTicket::SetUnassigned()      }  } +void GmTicket::SetPosition(uint32 mapId, float x, float y, float z) +{ +    _mapId = mapId; +    _posX = x; +    _posY = y; +    _posZ = z; +} + +void GmTicket::SetGmAction(uint32 needResponse, bool needMoreHelp) +{ +    _needResponse = (needResponse == 17);   // Requires GM response. 17 = true, 1 = false (17 is default) +    _needMoreHelp = needMoreHelp;           // Requests further GM interaction on a ticket to which a GM has already responded. Basically means "has a new ticket" +} +  void GmTicket::TeleportTo(Player* player) const  {      player->TeleportTo(_mapId, _posX, _posY, _posZ, 0.0f, 0); diff --git a/src/server/game/Tickets/TicketMgr.h b/src/server/game/Tickets/TicketMgr.h index 3dd048189d7..5bfe78abbba 100644 --- a/src/server/game/Tickets/TicketMgr.h +++ b/src/server/game/Tickets/TicketMgr.h @@ -82,7 +82,7 @@ class GmTicket  {  public:      GmTicket(); -    GmTicket(Player* player, WorldPacket& recvData); +    GmTicket(Player* player);      ~GmTicket();      bool IsClosed() const { return _closedBy; } @@ -129,6 +129,8 @@ public:      void SetComment(std::string const& comment) { _comment = comment; }      void SetViewed() { _viewed = true; }      void SetUnassigned(); +    void SetPosition(uint32 mapId, float x, float y, float z); +    void SetGmAction(uint32 needResponse, bool needMoreHelp);      void AppendResponse(std::string const& response) { _response += response; } @@ -164,7 +166,7 @@ private:      GMTicketEscalationStatus _escalatedStatus;      bool _viewed;      bool _needResponse; /// @todo find out the use of this, and then store it in DB -    bool _haveTicket; +    bool _needMoreHelp;      std::string _response;      std::string _chatLog; // No need to store in db, will be refreshed every session client side  }; diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp index 2a7e29629ff..79b4fbd8c69 100644 --- a/src/server/game/Weather/Weather.cpp +++ b/src/server/game/Weather/Weather.cpp @@ -195,7 +195,6 @@ bool Weather::ReGenerate()  void Weather::SendWeatherUpdateToPlayer(Player* player)  {      WorldPacket data(SMSG_WEATHER, (4+4+4)); -      data << uint32(GetWeatherState()) << (float)m_grade << uint8(0);      player->GetSession()->SendPacket(&data);  } @@ -203,10 +202,6 @@ void Weather::SendWeatherUpdateToPlayer(Player* player)  /// Send the new weather to all players in the zone  bool Weather::UpdateWeather()  { -    Player* player = sWorld->FindPlayerInZone(m_zone); -    if (!player) -        return false; -      ///- Send the weather packet to all players in this zone      if (m_grade >= 1)          m_grade = 0.9999f; @@ -216,8 +211,13 @@ bool Weather::UpdateWeather()      WeatherState state = GetWeatherState();      WorldPacket data(SMSG_WEATHER, (4+4+4)); -    data << uint32(state) << (float)m_grade << uint8(0); -    player->SendMessageToSet(&data, true); +    data << uint32(state); +    data << (float)m_grade; +    data << uint8(0); + +    //- Returns false if there were no players found to update +    if (!sWorld->SendZoneMessage(m_zone, &data)) +        return false;      ///- Log the event      char const* wthstr; @@ -264,8 +264,8 @@ bool Weather::UpdateWeather()              wthstr = "fine";              break;      } -    TC_LOG_INFO("misc", "Change the weather of zone %u to %s.", m_zone, wthstr); +    TC_LOG_INFO("misc", "Change the weather of zone %u to %s.", m_zone, wthstr);      sScriptMgr->OnWeatherChange(this, state, m_grade);      return true;  } diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp index 69dce957558..9faecdf7c99 100644 --- a/src/server/game/Weather/WeatherMgr.cpp +++ b/src/server/game/Weather/WeatherMgr.cpp @@ -146,7 +146,6 @@ void LoadWeatherData()  void SendFineWeatherUpdateToPlayer(Player* player)  {      WorldPacket data(SMSG_WEATHER, (4+4+4)); -      data << (uint32)WEATHER_STATE_FINE << (float)0.0f << uint8(0);      player->GetSession()->SendPacket(&data);  } diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index ef6f2869ec5..5f6fb683e8f 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -172,10 +172,7 @@ Player* World::FindPlayerInZone(uint32 zone)              continue;          if (player->IsInWorld() && player->GetZoneId() == zone) -        { -            // Used by the weather system. We return the player to broadcast the change weather message to him and all players in the zone.              return player; -        }      }      return NULL;  } @@ -2322,9 +2319,11 @@ void World::SendGlobalText(const char* text, WorldSession* self)  }  /// Send a packet to all players (or players selected team) in the zone (except self if mentioned) -void World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self, uint32 team) +bool World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self, uint32 team)  { +    bool foundPlayerToSend = false;      SessionMap::const_iterator itr; +      for (itr = m_sessions.begin(); itr != m_sessions.end(); ++itr)      {          if (itr->second && @@ -2335,8 +2334,11 @@ void World::SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self              (team == 0 || itr->second->GetPlayer()->GetTeam() == team))          {              itr->second->SendPacket(packet); +            foundPlayerToSend = true;          }      } + +    return foundPlayerToSend;  }  /// Send a System Message to all players in the zone (except self if mentioned) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 6f81c4fae97..c8937a062b6 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -648,7 +648,7 @@ class World          void SendGMText(int32 string_id, ...);          void SendGlobalMessage(WorldPacket* packet, WorldSession* self = 0, uint32 team = 0);          void SendGlobalGMMessage(WorldPacket* packet, WorldSession* self = 0, uint32 team = 0); -        void SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self = 0, uint32 team = 0); +        bool SendZoneMessage(uint32 zone, WorldPacket* packet, WorldSession* self = 0, uint32 team = 0);          void SendZoneText(uint32 zone, const char *text, WorldSession* self = 0, uint32 team = 0);          void SendServerMessage(ServerMessageType type, const char *text = "", Player* player = NULL); diff --git a/src/server/scripts/Commands/cs_ban.cpp b/src/server/scripts/Commands/cs_ban.cpp index b1a3dd4bca5..aa90c21c995 100644 --- a/src/server/scripts/Commands/cs_ban.cpp +++ b/src/server/scripts/Commands/cs_ban.cpp @@ -205,7 +205,7 @@ public:                      else                          handler->PSendSysMessage(LANG_BAN_YOUBANNED, nameOrIP.c_str(), secsToTimeString(TimeStringToSecs(durationStr), true).c_str(), reasonStr);                  } -                else                 +                else                  {                      if (sWorld->getBoolConfig(CONFIG_SHOW_BAN_IN_WORLD))                          sWorld->SendWorldText(LANG_BAN_ACCOUNT_YOUPERMBANNEDMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), nameOrIP.c_str(), reasonStr); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 67dbaacedce..2be40b03a3d 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -813,11 +813,12 @@ public:          if (kickReason != NULL)              kickReasonStr = kickReason; -            if (sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD)) -                sWorld->SendWorldText(LANG_COMMAND_KICKMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), playerName.c_str(), kickReasonStr.c_str()); -            else -                handler->PSendSysMessage(LANG_COMMAND_KICKMESSAGE, playerName.c_str()); -                target->GetSession()->KickPlayer(); +        if (sWorld->getBoolConfig(CONFIG_SHOW_KICK_IN_WORLD)) +            sWorld->SendWorldText(LANG_COMMAND_KICKMESSAGE_WORLD, (handler->GetSession() ? handler->GetSession()->GetPlayerName().c_str() : "Server"), playerName.c_str(), kickReasonStr.c_str()); +        else +            handler->PSendSysMessage(LANG_COMMAND_KICKMESSAGE, playerName.c_str()); + +        target->GetSession()->KickPlayer();          return true;      } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp index 845db0cac1c..1edb1100289 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_emperor_dagran_thaurissan.cpp @@ -74,7 +74,7 @@ public:          void JustDied(Unit* /*killer*/) OVERRIDE          { -            if (Creature* Moira = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_MOIRA) : 0)) +            if (Creature* Moira = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MOIRA)))              {                  Moira->AI()->EnterEvadeMode();                  Moira->setFaction(35); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp index 1b9ef055b8c..ebd8762e9be 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_netherspite.cpp @@ -247,13 +247,13 @@ public:              PortalPhase = false;              Talk(EMOTE_PHASE_BANISH); -            for (int i=0; i<3; ++i) +            for (uint8 i = 0; i < 3; ++i)                  me->RemoveAurasDueToSpell(NetherBuff[i]);          }          void HandleDoors(bool open) // Massive Door switcher          { -            if (GameObject* Door = GameObject::GetGameObject(*me, instance ? instance->GetData64(DATA_GO_MASSIVE_DOOR) : 0)) +            if (GameObject* Door = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_GO_MASSIVE_DOOR) ))                  Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);          } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index 8592120f94a..4bc0ee68cc3 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -376,7 +376,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI          ResetThreatTimer = urand(5000, 20000);          // in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her) -        if (Creature* pDelrissa = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_DELRISSA) : 0)) +        if (Creature* pDelrissa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))          {              if (!pDelrissa->IsAlive())                  pDelrissa->Respawn(); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index a52ddcea3b0..9dcbed211bb 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -176,7 +176,7 @@ public:          void DoIntro()          { -            Creature* Madrigosa = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_MADRIGOSA) : 0); +            Creature* Madrigosa = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_MADRIGOSA));              if (!Madrigosa)                  return; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 9d073cd7ef8..0b2e7766ac6 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -1206,7 +1206,7 @@ public:              if (uiTimer <= diff)              { -                if (Unit* random = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_PLAYER_GUID) : 0)) +                if (Unit* random = ObjectAccessor::GetPlayer(*me, instance->GetData64(DATA_PLAYER_GUID)))                      DoCast(random, SPELL_SHADOW_BOLT, false);                  uiTimer = urand(500, 1000);              } else uiTimer -= diff; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 426771e6db6..2dc17968822 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -602,7 +602,7 @@ public:          {              if (SpellTimer <= diff)              { -                Unit* Victim = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_PLAYER_GUID) : 0); +                Unit* Victim = Unit::GetUnit(*me, instance->GetData64(DATA_PLAYER_GUID));                  switch (NeedForAHack)                  {                      case 0: diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp index a4f9a364684..27426e76a81 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_anetheron.cpp @@ -102,7 +102,7 @@ public:          void JustDied(Unit* killer) OVERRIDE          {              hyjal_trashAI::JustDied(killer); -            if (instance && IsEvent) +            if (IsEvent)                  instance->SetData(DATA_ANETHERONEVENT, DONE);              Talk(SAY_ONDEATH);          } @@ -225,7 +225,7 @@ public:              {                  if (AnetheronGUID)                  { -                    Creature* boss = Unit::GetCreature((*me), AnetheronGUID); +                    Creature* boss = ObjectAccessor::GetCreature(*me, AnetheronGUID);                      if (!boss || (boss && boss->isDead()))                      {                          me->setDeathState(JUST_DIED); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index 6d296945659..1024369d4f1 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -107,7 +107,7 @@ public:          void JustDied(Unit* killer) OVERRIDE          {              hyjal_trashAI::JustDied(killer); -            if (instance && IsEvent) +            if (IsEvent)                  instance->SetData(DATA_AZGALOREVENT, DONE);              Talk(SAY_ONDEATH);          } @@ -237,7 +237,7 @@ public:              {                  if (AzgalorGUID)                  { -                    Creature* boss = Unit::GetCreature((*me), AzgalorGUID); +                    Creature* boss = ObjectAccessor::GetCreature(*me, AzgalorGUID);                      if (!boss || (boss && boss->isDead()))                      {                          me->setDeathState(JUST_DIED); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index 0b95d3d02fd..70de0303f01 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -103,7 +103,7 @@ public:          void JustDied(Unit* killer) OVERRIDE          {              hyjal_trashAI::JustDied(killer); -            if (instance && IsEvent) +            if (IsEvent)                  instance->SetData(DATA_KAZROGALEVENT, DONE);              DoPlaySoundToSet(me, SOUND_ONDEATH);          } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp index 4d6a94b6e73..740b056ac25 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_rage_winterchill.cpp @@ -98,7 +98,7 @@ public:          void JustDied(Unit* killer) OVERRIDE          {              hyjal_trashAI::JustDied(killer); -            if (instance && IsEvent) +            if (IsEvent)                  instance->SetData(DATA_RAGEWINTERCHILLEVENT, DONE);              Talk(SAY_ONDEATH);          } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index e4f1324d19c..7c0169cda95 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -147,7 +147,7 @@ public:                          return;                      } -                    if (Creature* pArthas = me->GetCreature(*me, instance ? instance->GetData64(DATA_ARTHAS) : 0)) +                    if (Creature* pArthas = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_ARTHAS)))                          if (pArthas->isDead())                          {                              EnterEvadeMode(); @@ -196,7 +196,7 @@ public:                                  uiOutroTimer = 8000;                                  break;                              case 2: -                                me->SetTarget(instance ? instance->GetData64(DATA_ARTHAS) : 0); +                                me->SetTarget(instance->GetData64(DATA_ARTHAS));                                  me->HandleEmoteCommand(29);                                  Talk(SAY_ESCAPE_SPEECH_2);                                  ++uiOutroStep; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index f1406a5a008..4fa65c5d42d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -311,7 +311,7 @@ public:              pos.m_positionZ = std::max(me->GetMap()->GetHeight(pos.m_positionX, pos.m_positionY, MAX_HEIGHT), me->GetMap()->GetWaterLevel(pos.m_positionX, pos.m_positionY));              if (Unit* Summon = DoSummon(creature_entry, pos, 30000, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT)) -                if (Unit* temp = Unit::GetUnit(*me, instance ? instance->GetData64(DATA_MEDIVH) : 0)) +                if (Unit* temp = ObjectAccessor::GetUnit(*me, instance->GetData64(DATA_MEDIVH)))                      Summon->AddThreat(temp, 0.0f);          } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp index d29831b8cde..830c3fed382 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/boss_glutton.cpp @@ -40,7 +40,10 @@ public:      struct boss_gluttonAI : public BossAI      { -        boss_gluttonAI(Creature* creature) : BossAI(creature, DATA_GLUTTON) { } +        boss_gluttonAI(Creature* creature) : BossAI(creature, DATA_GLUTTON) +        { +            hp15 = false; +        }          void Reset() OVERRIDE          { diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index 3b4defeca56..b9605794074 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -158,6 +158,7 @@ public:          {              instance = creature->GetInstanceScript();              eventInProgress = false; +            spawnerCount = 0;          }          void Reset() OVERRIDE @@ -177,9 +178,7 @@ public:          void EnterCombat(Unit* who) OVERRIDE          {              if (channeling) -            {                  Talk(SAY_WATCH_OUT, who); -            }              else              {                  events.ScheduleEvent(EVENT_FIREBALL, 1000); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 5449e6737d7..37e52900204 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -639,7 +639,7 @@ public:              {                  bDone = true; -                if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1)) +                if (me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1))                      me->SetHomePosition(739.678f, 662.541f, 412.393f, 4.49f);                  else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_2))                      me->SetHomePosition(746.71f, 661.02f, 411.69f, 4.6f); diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 5a16271d378..46912eeb898 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -423,7 +423,7 @@ public:              if (id == 1)              { -                if (Creature* colossus = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_DRAKKARI_COLOSSUS) : 0)) +                if (Creature* colossus = Unit::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))                  {                      colossus->AI()->DoAction(ACTION_UNFREEZE_COLOSSUS);                      if (!colossus->AI()->GetData(DATA_INTRO_DONE)) @@ -440,7 +440,7 @@ public:                  return;              // we do this checks to see if the creature is one of the creatures that sorround the boss -            if (Creature* colossus = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_DRAKKARI_COLOSSUS) : 0)) +            if (Creature* colossus = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_DRAKKARI_COLOSSUS)))              {                  Position homePosition;                  me->GetHomePosition().GetPosition(&homePosition); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 41d1f53b52d..07157100ea4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -374,11 +374,11 @@ public:          void FindGameObjects()          { -            PortalsGUID[0] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL01) : 0; -            PortalsGUID[1] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL02) : 0; -            PortalsGUID[2] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL03) : 0; -            PortalsGUID[3] = instance ? instance->GetData64(DATA_KELTHUZAD_PORTAL04) : 0; -            KTTriggerGUID = instance ? instance->GetData64(DATA_KELTHUZAD_TRIGGER) : 0; +            PortalsGUID[0] = instance->GetData64(DATA_KELTHUZAD_PORTAL01); +            PortalsGUID[1] = instance->GetData64(DATA_KELTHUZAD_PORTAL02); +            PortalsGUID[2] = instance->GetData64(DATA_KELTHUZAD_PORTAL03); +            PortalsGUID[3] = instance->GetData64(DATA_KELTHUZAD_PORTAL04); +            KTTriggerGUID = instance->GetData64(DATA_KELTHUZAD_TRIGGER);          }          void UpdateAI(uint32 diff) OVERRIDE diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 2f6a328b728..9943ad7e1b1 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -213,7 +213,7 @@ public:      {          InstanceScript* instance = go->GetInstanceScript(); -        Creature* pKeristrasza = Unit::GetCreature(*go, instance ? instance->GetData64(DATA_KERISTRASZA) : 0); +        Creature* pKeristrasza = ObjectAccessor::GetCreature(*go, instance->GetData64(DATA_KERISTRASZA));          if (pKeristrasza && pKeristrasza->IsAlive())          {              // maybe these are hacks :( diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index c666a36741b..1788ecacd35 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -168,7 +168,7 @@ public:              for (std::list<uint64>::const_iterator itr = lSparkList.begin(); itr != lSparkList.end(); ++itr)              { -                if (Creature* pSpark = Unit::GetCreature(*me, *itr)) +                if (Creature* pSpark = ObjectAccessor::GetCreature(*me, *itr))                  {                      if (pSpark->IsAlive())                      { @@ -297,11 +297,6 @@ class npc_spark_of_ionar : public CreatureScript  public:      npc_spark_of_ionar() : CreatureScript("npc_spark_of_ionar") { } -    CreatureAI* GetAI(Creature* creature) const OVERRIDE -    { -        return GetInstanceAI<npc_spark_of_ionarAI>(creature); -    } -      struct npc_spark_of_ionarAI : public ScriptedAI      {          npc_spark_of_ionarAI(Creature* creature) : ScriptedAI(creature) @@ -336,7 +331,7 @@ public:          void UpdateAI(uint32 uiDiff) OVERRIDE          {              // Despawn if the encounter is not running -            if (instance && instance->GetBossState(DATA_IONAR) != IN_PROGRESS) +            if (instance->GetBossState(DATA_IONAR) != IN_PROGRESS)              {                  me->DespawnOrUnsummon();                  return; @@ -345,13 +340,13 @@ public:              // Prevent them to follow players through the whole instance              if (uiCheckTimer <= uiDiff)              { -                Creature* pIonar = instance->instance->GetCreature(instance->GetData64(DATA_IONAR)); -                if (pIonar && pIonar->IsAlive()) +                Creature* ionar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_IONAR)); +                if (ionar && ionar->IsAlive())                  { -                    if (me->GetDistance(pIonar) > DATA_MAX_SPARK_DISTANCE) +                    if (me->GetDistance(ionar) > DATA_MAX_SPARK_DISTANCE)                      {                          Position pos; -                        pIonar->GetPosition(&pos); +                        ionar->GetPosition(&pos);                          me->SetSpeed(MOVE_RUN, 2.0f);                          me->GetMotionMaster()->Clear(); @@ -369,6 +364,10 @@ public:          }      }; +    CreatureAI* GetAI(Creature* creature) const OVERRIDE +    { +        return GetInstanceAI<npc_spark_of_ionarAI>(creature); +    }  };  void AddSC_boss_ionar() diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 480c04c3254..169a7085672 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -227,7 +227,7 @@ class npc_flash_freeze : public CreatureScript                      // Prevents to have Ice Block on other place than target is                      me->NearTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), target->GetOrientation());                      if (target->GetTypeId() == TYPEID_PLAYER) -                        if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0)) +                        if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))                              Hodir->AI()->DoAction(ACTION_CHEESE_THE_FREEZE);                  }              } @@ -279,7 +279,7 @@ class npc_ice_block : public CreatureScript                  {                      Helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); -                    if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0)) +                    if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))                      {                          if (!Hodir->IsInCombat())                          { @@ -658,7 +658,7 @@ class npc_hodir_priest : public CreatureScript              void JustDied(Unit* /*killer*/) OVERRIDE               { -                if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0)) +                if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))                      Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);                } @@ -720,7 +720,7 @@ class npc_hodir_shaman : public CreatureScript              void JustDied(Unit* /*killer*/) OVERRIDE               { -                if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0)) +                if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))                      Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);                } @@ -781,7 +781,7 @@ class npc_hodir_druid : public CreatureScript              void JustDied(Unit* /*killer*/) OVERRIDE               { -                if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0)) +                if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))                      Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);                } @@ -861,7 +861,7 @@ class npc_hodir_mage : public CreatureScript              void JustDied(Unit* /*killer*/) OVERRIDE               { -                  if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_HODIR) : 0)) +                  if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_HODIR)))                      Hodir->AI()->DoAction(ACTION_I_HAVE_THE_COOLEST_FRIENDS);                } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 862ee2c786b..e96cfaccc56 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -312,7 +312,7 @@ class go_razorscale_harpoon : public GameObjectScript          bool OnGossipHello(Player* /*player*/, GameObject* go) OVERRIDE          {              InstanceScript* instance = go->GetInstanceScript(); -            if (ObjectAccessor::GetCreature(*go, instance ? instance->GetData64(BOSS_RAZORSCALE) : 0)) +            if (ObjectAccessor::GetCreature(*go, instance->GetData64(BOSS_RAZORSCALE)))                  go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);              return false;          } @@ -347,14 +347,14 @@ class boss_razorscale : public CreatureScript                  me->SetReactState(REACT_PASSIVE);                  PermaGround = false;                  HarpoonCounter = 0; -                if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXPEDITION_COMMANDER) : 0)) +                if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EXPEDITION_COMMANDER)))                      commander->AI()->DoAction(ACTION_COMMANDER_RESET);              }              void EnterCombat(Unit* /*who*/) OVERRIDE              {                  _EnterCombat(); -                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_RAZORSCALE_CONTROL) : 0)) +                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL)))                      controller->AI()->DoAction(ACTION_HARPOON_BUILD);                  me->SetSpeed(MOVE_FLIGHT, 3.0f, true);                  me->SetReactState(REACT_PASSIVE); @@ -369,7 +369,7 @@ class boss_razorscale : public CreatureScript              void JustDied(Unit* /*killer*/) OVERRIDE              {                  _JustDied(); -                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_RAZORSCALE_CONTROL) : 0)) +                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL)))                      controller->AI()->Reset();              } @@ -445,7 +445,7 @@ class boss_razorscale : public CreatureScript                                  me->SetCanFly(false);                                  me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);                                  me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); -                                if (Creature* commander = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_EXPEDITION_COMMANDER) : 0)) +                                if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EXPEDITION_COMMANDER)))                                      commander->AI()->DoAction(ACTION_GROUND_PHASE);                                  events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND);                                  events.ScheduleEvent(EVENT_BUFFET, 33000, 0, PHASE_GROUND); @@ -461,7 +461,7 @@ class boss_razorscale : public CreatureScript                                  return;                              case EVENT_BUFFET:                                  DoCastAOE(SPELL_WINGBUFFET); -                                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(DATA_RAZORSCALE_CONTROL) : 0)) +                                if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_RAZORSCALE_CONTROL)))                                      controller->CastSpell(controller, SPELL_FLAMED, true);                                  events.CancelEvent(EVENT_BUFFET);                                  return; @@ -689,7 +689,7 @@ class npc_expedition_commander : public CreatureScript                              Phase = 5;                              break;                          case 5: -                            if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance ? instance->GetData64(BOSS_RAZORSCALE) : 0)) +                            if (Creature* Razorscale = ObjectAccessor::GetCreature(*me, instance->GetData64(BOSS_RAZORSCALE)))                              {                                  Razorscale->AI()->DoAction(ACTION_EVENT_START);                                  me->SetInCombatWith(Razorscale); diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index 4dd3aa9916b..7377029080f 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -195,7 +195,7 @@ class npc_tempest_minion : public CreatureScript              void JustDied(Unit* /*killer*/) OVERRIDE              { -                if (Creature* emalon = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EMALON) : 0)) +                if (Creature* emalon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EMALON)))                  {                      if (emalon->IsAlive())                      { @@ -210,7 +210,7 @@ class npc_tempest_minion : public CreatureScript                  DoZoneInCombat();                  events.ScheduleEvent(EVENT_SHOCK, 20000); -                if (Creature* pEmalon = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EMALON) : 0)) +                if (Creature* pEmalon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EMALON)))                  {                      if (!pEmalon->GetVictim() && pEmalon->AI())                          pEmalon->AI()->AttackStart(who); diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index ccb1b5ed7d8..bd2128a1b4c 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -241,7 +241,7 @@ class npc_frozen_orb_stalker : public CreatureScript              npc_frozen_orb_stalkerAI(Creature* creature) : ScriptedAI(creature)              {                  creature->SetVisible(false); -                creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_DISABLE_MOVE); +                creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE);                  creature->SetReactState(REACT_PASSIVE);                  instance = creature->GetInstanceScript(); @@ -256,7 +256,7 @@ class npc_frozen_orb_stalker : public CreatureScript                      return;                  spawned = true; -                Unit* toravon = me->GetCreature(*me, instance ? instance->GetData64(DATA_TORAVON) : 0); +                Unit* toravon = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TORAVON));                  if (!toravon)                      return; diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index 81edfd65d03..441603dcdc8 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -79,12 +79,12 @@ public:              else if (instance->GetData(DATA_WAVE_COUNT) == 12)                  instance->SetData(DATA_2ND_BOSS_EVENT, NOT_STARTED); -            if (Creature* pGuard1 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_1) : 0)) +            if (Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_1)))              {                  if (!pGuard1->IsAlive())                      pGuard1->Respawn();              } -            if (Creature* pGuard2 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_2) : 0)) +            if (Creature* pGuard2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_2)))              {                  if (!pGuard2->IsAlive())                      pGuard2->Respawn(); @@ -103,15 +103,15 @@ public:                  who->SetInCombatWith(me);                  DoStartMovement(who); -                if (Creature* pGuard1 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_1) : 0)) +                if (Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_1)))                  { -                    pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); +                    pGuard1->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);                      if (!pGuard1->GetVictim() && pGuard1->AI())                          pGuard1->AI()->AttackStart(who);                  } -                if (Creature* pGuard2 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_2) : 0)) +                if (Creature* pGuard2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_2)))                  { -                    pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_NON_ATTACKABLE); +                    pGuard2->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE);                      if (!pGuard2->GetVictim() && pGuard2->AI())                          pGuard2->AI()->AttackStart(who);                  } @@ -148,9 +148,9 @@ public:              //spam stormstrike in hc mode if spawns are dead              if (IsHeroic())              { -                if (Creature* pGuard1 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_1) : 0)) +                if (Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_1)))                  { -                    if (Creature* pGuard2 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_2) : 0)) +                    if (Creature* pGuard2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_2)))                      {                          if (!pGuard1->IsAlive() && !pGuard2->IsAlive())                              DoCastVictim(SPELL_STORMSTRIKE); @@ -168,12 +168,12 @@ public:              {                  if (uint64 TargetGUID = GetChainHealTargetGUID())                  { -                    if (Creature* target = Unit::GetCreature(*me, TargetGUID)) +                    if (Creature* target = ObjectAccessor::GetCreature(*me, TargetGUID))                          DoCast(target, SPELL_CHAIN_HEAL);                      //If one of the adds is dead spawn heals faster -                    Creature* pGuard1 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_1) : 0); -                    Creature* pGuard2 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_2) : 0); +                    Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_1)); +                    Creature* pGuard2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_2));                      uiChainHealTimer = ((pGuard1 && !pGuard1->IsAlive()) || (pGuard2 && !pGuard2->IsAlive()) ? 3000 : 8000) + rand()%3000;                  }              } else uiChainHealTimer -= diff; @@ -229,11 +229,11 @@ public:              if (HealthBelowPct(85))                  return me->GetGUID(); -            Creature* pGuard1 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_1) : 0); +            Creature* pGuard1 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_1));              if (pGuard1 && pGuard1->IsAlive() && !pGuard1->HealthAbovePct(75))                  return pGuard1->GetGUID(); -            Creature* pGuard2 = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_EREKEM_GUARD_2) : 0); +            Creature* pGuard2 = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_EREKEM_GUARD_2));              if (pGuard2 && pGuard2->IsAlive() && !pGuard2->HealthAbovePct(75))                  return pGuard2->GetGUID(); diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index f91f5d8c007..7487c3c8828 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -150,7 +150,10 @@ class npc_commander_eligor_dawnbringer : public CreatureScript          struct npc_commander_eligor_dawnbringerAI : public ScriptedAI          { -            npc_commander_eligor_dawnbringerAI(Creature* creature) : ScriptedAI(creature) { } +            npc_commander_eligor_dawnbringerAI(Creature* creature) : ScriptedAI(creature) +            { +                talkWing = 0; +            }              void Reset() OVERRIDE              { @@ -649,7 +652,10 @@ class npc_torturer_lecraft : public CreatureScript          struct npc_torturer_lecraftAI : public ScriptedAI          { -            npc_torturer_lecraftAI(Creature* creature) : ScriptedAI(creature) { } +            npc_torturer_lecraftAI(Creature* creature) : ScriptedAI(creature) +            { +                _playerGUID = 0; +            }              void Reset() OVERRIDE              { diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 69e4e65225a..70de4d4758d 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -451,7 +451,10 @@ public:      struct npc_brann_bronzebeard_keystoneAI : public ScriptedAI      { -        npc_brann_bronzebeard_keystoneAI(Creature* creature) : ScriptedAI(creature) { } +        npc_brann_bronzebeard_keystoneAI(Creature* creature) : ScriptedAI(creature) +        { +            objectCounter = 0; +        }          void Reset() OVERRIDE          { @@ -634,7 +637,10 @@ public:      struct npc_king_jokkum_vehicleAI : public VehicleAI      { -        npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) { } +        npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature) +        { +            pathEnd = false; +        }          void Reset() OVERRIDE          { diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index 311b18524b2..e218741649d 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -249,7 +249,10 @@ class npc_wg_queue : public CreatureScript      struct npc_wg_queueAI : public ScriptedAI      { -        npc_wg_queueAI(Creature* creature) : ScriptedAI(creature) { } +        npc_wg_queueAI(Creature* creature) : ScriptedAI(creature) +        { +            FrostArmor_Timer = 0; +        }          uint32 FrostArmor_Timer; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index 6d632c81bca..2ffa7284ec9 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -139,21 +139,20 @@ public:              RAdvisors[0] = instance->GetData64(DATA_SHARKKIS);              RAdvisors[1] = instance->GetData64(DATA_TIDALVESS);              RAdvisors[2] = instance->GetData64(DATA_CARIBDIS); -            //Respawn of the 3 Advisors -            Creature* pAdvisor = NULL; -            for (int i=0; i<MAX_ADVISORS; ++i) +            // Respawn of the 3 Advisors +            for (uint8 i = 0; i < MAX_ADVISORS; ++i)                  if (RAdvisors[i])                  { -                    pAdvisor = (Unit::GetCreature((*me), RAdvisors[i])); -                    if (pAdvisor && !pAdvisor->IsAlive()) +                    Creature* advisor = ObjectAccessor::GetCreature(*me, RAdvisors[i]); +                    if (advisor && !advisor->IsAlive())                      { -                        pAdvisor->Respawn(); -                        pAdvisor->AI()->EnterEvadeMode(); -                        pAdvisor->GetMotionMaster()->MoveTargetedHome(); +                        advisor->Respawn(); +                        advisor->AI()->EnterEvadeMode(); +                        advisor->GetMotionMaster()->MoveTargetedHome();                      }                  } -            instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED); +            instance->SetData(DATA_KARATHRESSEVENT, NOT_STARTED);          }          void EventSharkkisDeath() @@ -273,8 +272,8 @@ public:                  for (uint8 i = 0; i < MAX_ADVISORS; ++i)                      if (Advisors[i])                      { -                        Advisor = (Unit::GetCreature(*me, Advisors[i])); -                        if (Advisor && Advisor->IsAlive()) +                        Creature* advisor = ObjectAccessor::GetCreature(*me, Advisors[i]); +                        if (advisor && advisor->IsAlive())                          {                              continueTriggering = true;                              break; @@ -333,11 +332,9 @@ public:              pet = false; -            Creature* Pet = Unit::GetCreature(*me, SummonedPet); +            Creature* Pet = ObjectAccessor::GetCreature(*me, SummonedPet);              if (Pet && Pet->IsAlive()) -            {                  Pet->DealDamage(Pet, Pet->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); -            }              SummonedPet = 0; @@ -346,7 +343,7 @@ public:          void JustDied(Unit* /*killer*/) OVERRIDE          { -            if (Creature* Karathress = (Unit::GetCreature((*me), instance->GetData64(DATA_KARATHRESS)))) +            if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS)))                  CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventSharkkisDeath();          } @@ -394,11 +391,11 @@ public:              if (TheBeastWithin_Timer <= diff)              {                  DoCast(me, SPELL_THE_BEAST_WITHIN); -                Creature* Pet = Unit::GetCreature(*me, SummonedPet); + +                Creature* Pet = ObjectAccessor::GetCreature(*me, SummonedPet);                  if (Pet && Pet->IsAlive()) -                {                      Pet->CastSpell(Pet, SPELL_PET_ENRAGE, true); -                } +                  TheBeastWithin_Timer = 30000;              } else TheBeastWithin_Timer -= diff; @@ -472,7 +469,7 @@ public:          void JustDied(Unit* /*killer*/) OVERRIDE          { -            if (Creature* Karathress = Unit::GetCreature((*me), instance->GetData64(DATA_KARATHRESS))) +            if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS)))                  CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventTidalvessDeath();          } @@ -588,7 +585,7 @@ public:          void JustDied(Unit* /*killer*/) OVERRIDE          { -            if (Creature* Karathress = Unit::GetCreature((*me), instance->GetData64(DATA_KARATHRESS))) +            if (Creature* Karathress = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_KARATHRESS)))                  CAST_AI(boss_fathomlord_karathress::boss_fathomlord_karathressAI, Karathress->AI())->EventCaribdisDeath();          } @@ -612,7 +609,7 @@ public:                  return;              //someone evaded! -            if (instance && !instance->GetData(DATA_KARATHRESSEVENT)) +            if (!instance->GetData(DATA_KARATHRESSEVENT))              {                  EnterEvadeMode();                  return; diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index cc58be26664..3f1579c42b1 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -113,7 +113,10 @@ public:      struct npc_bloodmaul_bruteAI : public ScriptedAI      { -        npc_bloodmaul_bruteAI(Creature* creature) : ScriptedAI(creature) { } +        npc_bloodmaul_bruteAI(Creature* creature) : ScriptedAI(creature) +        { +            hp30 = false; +        }          void Reset() OVERRIDE          { @@ -1128,6 +1131,7 @@ public:          npc_oscillating_frequency_scanner_master_bunnyAI(Creature* creature) : ScriptedAI(creature)          {              playerGuid = 0; +            timer = 500;          }          void Reset() OVERRIDE diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 5b08e28e331..a844a4d7e69 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -639,7 +639,7 @@ class spell_warr_retaliation : public SpellScriptLoader              bool CheckProc(ProcEventInfo& eventInfo)              {                  // check attack comes not from behind -                return GetTarget()->isInFront(eventInfo.GetProcTarget(), M_PI); +                return GetTarget()->isInFront(eventInfo.GetProcTarget(), M_PI) && !GetTarget()->HasUnitState(UNIT_STATE_STUNNED);              }              void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)  | 
